基于ubuntu-wsl2及docker desktop搭建prometheus的kind集群

33 阅读3分钟

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