1.前序步骤
- Windows 11安装wsl2及Ubuntu
- 安装docker desktop
注:由于需要为kind集群开启端口映射,所以没有使用docker desktop自带的kind集群,Enable保持关闭:
开启时:
2.配置代理
2.1 关键说明
由于kind集群拉取镜像时需依赖宿主机的代理,所以需要在宿主机配置代理为host.docker.internal,同时达到两个效果:
- 确保宿主机仍能访问代理,需额外配置hosts
- 在创建kind集群时kind会把相关代理配置(如https_proxy=host.docker.internal:7890 等)传递给所创建的kind集群
2.2 配置
#宿主机host配置
127.0.0.1 host.docker.internal
#禁止host自动生成,修改/etc/wsl.conf
5 [network]
6 generateHosts = false
# 宿主机.bashrc中的代理配置
124 hostip=host.docker.internal
125
126 proxy(){
127 export https_proxy=http://$hostip:7890
128 export http_proxy=http://$hostip:7890
129 export all_proxy=socks5://$hostip:7890
130 export no_proxy=172.18.0.0/16,fc00:f853:ccd:e793::/64,localhost,127.0.0.1,10.96.0.0/12,192.168.0.0/16,172.18.0.0/16,.svc,.svc.cluster.local,10.96.0.0/16,10.244.0.0/16,kind- control-plane,.svc,.svc.cluster,.svc.cluster.local
131
132 echo 'proxy on'
133 }
134
135 noproxy(){
136 unset https_proxy
137 unset http_proxy
138 unset all_proxy
139 unset no_proxy
140
141 echo 'proxy off'
142 }
3. 安装相关工具:
3.1 安装 Docker(可选)
# 更新包索引
sudo apt update
# 安装依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 将当前用户加入 docker 组(避免每次使用 sudo)
sudo usermod -aG docker $USER
# 重新登录或运行以下命令使组更改生效
newgrp docker
# 启动并启用 Docker 服务
sudo systemctl enable docker
sudo systemctl start docker
# 验证 Docker 安装
docker --version
3.2 安装 kubectl(可选)
# 下载最新版 kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 安装 kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 验证安装
kubectl version --client
3.3 安装kind
# 下载 kind 二进制文件
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
# 赋予执行权限
chmod +x ./kind
# 移动到 PATH 目录
sudo mv ./kind /usr/local/bin/kind
# 验证安装
kind version
3.4 安装helm
# 下载官方安装脚本
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
# 为脚本添加执行权限
chmod 700 get_helm.sh
# 执行安装
./get_helm.sh
# 检查版本,确认安装成功
helm version --short
# 应显示类似:v3.14.0+g90e5a9c
4. 创建Kind集群(单节点)
4.1 说明
通过extraPortMappings实现将宿主机的端口映射到kind集群的nodeport端口上,nodepor端口开在承载kind集群的docker容器节点上。
例如9090(宿主机)->30090(docker容器作为单节点)
4.1 代码
# 创建kind-monitoring.yaml
1 kind: Cluster
2 apiVersion: kind.x-k8s.io/v1alpha4
3 nodes:
4 - role: control-plane
5 image: kindest/node:v1.31.1
6 extraPortMappings:
7 # 映射 Prometheus Server 的端口
8 - containerPort: 30090 # 节点上的端口,将对应NodePort
9 hostPort: 9090 # 宿主机上的端口,访问用 localhost:9090
10 listenAddress: "127.0.0.1"
11 protocol: TCP
12 # 映射 Grafana 的端口
13 - containerPort: 30080 # 节点上的端口,将对应NodePort
14 hostPort: 3000 # 宿主机上的端口,访问用 localhost:3000
15 listenAddress: "127.0.0.1"
16 protocol: TCP
17 # 映射 Alertmanager 的端口(可选)
18 - containerPort: 30093 # 节点上的端口,将对应NodePort
19 hostPort: 9093 # 宿主机上的端口,访问用 localhost:9093
20 listenAddress: "127.0.0.1"
21 protocol: TCP
#使用上面的配置文件创建kind集群,名称为monitoring-cluster
kind create cluster --config kind-monitoring.yaml --name monitoring-cluster
5. helm方式安装prometheus到kind集群
5.1 说明
通过--set覆盖prometheus char包的默认配置,将相关service改为Nodeport类型,并指定端口(开在docker容器单节点上)
5.2 代码
#在kind集群上创建namespace
kubectl create namespace monitoring
# 添加Prometheus社区的Helm仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 安装kube-prometheus-stack
helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --set prometheus.service.type=NodePort --set prometheus.service.nodePort=30090 --set grafana.service.type=NodePort --set grafana.service.nodePort=30080 --set alertmanager.service.type=NodePort --set alertmanager.service.nodePort=30093
- 安装过程(实际花了近40分钟,pod拉镜像较慢):
T+0s: helm install 开始
T+1s: Chart加载和渲染完成
T+2s: API调用发送到K8s
T+3s: Helm返回成功
T+5s: K8s调度Pod到节点
T+10s: 开始拉取镜像
T+30s: 镜像拉取完成
T+35s: 容器启动
T+40s: Pod状态变为Running
- 安装结果
- 获取grafana的登录密码:
kubectl get secret prometheus-grafana -n monitoring -o jsonpath="{.data.admin-password}" | base64 --decode
- 登录地址
http://localhost:9090
http://localhost:3000
http://localhost:9093