一、整体架构(先明确)

  • K8s 集群:3 节点(1master+2node),1.24+,含 CSI 存储(PVC)
  • Ansible 控制节点:独立 VM / 物理机,与 K8s 节点互通、免密 sudo
  • Zabbix 组件(容器化部署在 K8s)
    • MySQL(StatefulSet + PVC):存储 Zabbix 配置 / 历史数据
    • Zabbix Server(Deployment):10051 端口
    • Zabbix Web(Deployment + Ingress):80/443
    • Zabbix Agent2(DaemonSet):每节点一个,监控节点与容器
  • 监控对象:K8s 集群(API、Scheduler、kubelet、Node、Pod)+ 所有主机 / 容器

二、环境准备(所有节点)

2.1 基础环境(所有机器)

需要四台机器   一台独立的ansible 一台master 两台node  注意 部署k8s的机器内存要大于四G 内核大于二

# 关闭防火墙/selinux systemctl stop firewalld && systemctl disable firewalld

setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 时间同步

yum install -y chrony systemctl start chrony && systemctl enable chrony

# 主机名解析(所有节点)

cat >> /etc/hosts << EOF

192.168.1.10 k8s-master

192.168.1.11 k8s-node1

192.168.1.12 k8s-node2

192.168.1.20 ansible-controller

EOF

2.2 Ansible 控制节点配置

# 安装 ansible yum install -y epel-release yum install -y ansible

# 生成 ssh 密钥并分发到所有 K8s 节点(免密)

ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa for ip in 192.168.1.10 192.168.1.11 192.168.1.12; do ssh-copy-id root@$ip done

# 测试免密

ansible all -m ping

2.3 K8s 集群准备(已就绪则跳过)需要提前准备yum源

选择使用 一键更换阿里云的yum源

# 备份原有源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 下载阿里云官方源

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 生成缓存

yum clean all && yum makecache

# 所有节点安装 kubeadm/kubelet/kubectl(1.24+)

 yum install -y kubeadm-1.24.17-0 kubelet-1.24.17-0 kubectl-1.24.17-0

systemctl enable kubelet

# master 初始化

kubeadm init \

--apiserver-advertise-address=192.168.1.10 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version=v1.24.17 \ --service-cidr=10.96.0.0/12 \

--pod-network-cidr=10.244.0.0/16

# 配置 kubectl

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装网络插件(calico) kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml

# 加入 node(在 node 执行,用 master 输出的 join 命令)

kubeadm join 192.168.1.10:6443 --token xxx \ --discovery-token-ca-cert-hash sha256:xxx

三、用 Ansible 准备 K8s 环境与依赖

3.1 Ansible Inventory(/etc/ansible/hosts)

[k8s-master]
192.168.1.10

[k8s-nodes]
192.168.1.11
192.168.1.12

[k8s-cluster:children]
k8s-master
k8s-nodes

3.2 Ansible Playbook:初始化 K8s 节点

ansible-playbook init-k8s.yml

四、K8s 部署 Zabbix(MySQL + Server + Web)

4.1 创建命名空间与存储

kubectl create namespace monitoring

4.2 部署 MySQL(StatefulSet + PVC)

mysql.yaml:

使用命令完成该文件的部署

kubectl apply -f mysql.yaml

4.3 部署 Zabbix Server

zabbix-server.yaml:

使用命令完成部署

kubectl apply -f zabbix-server.yaml

4.4 部署 Zabbix Web 界面

新建 zabbix-web.yaml

部署并查看访问端口:

kubectl apply -f zabbix-web.yaml

kubectl get svc -n monitoring

第五阶段:Ansible 批量给所有机器部署 Zabbix Agent2(核心)

5.1 新建 Ansible 项目目录

mkdir -p /opt/ansible/zabbix-agent/templates

cd /opt/ansible/zabbix-agent

5.2 编写 Agent 配置模板

vi templates/zabbix_agent2.conf.j2

PidFile=/run/zabbix/zabbix_agent2.pid

LogFile=/var/log/zabbix/zabbix_agent2.log

Server=192.168.10.10 ServerActive=192.168.10.10

Hostname={{ ansible_hostname }}

5.3 编写 Ansible 部署剧本 deploy-agent.yml

5.4 一键批量部署所有节点

ansible-playbook deploy-agent.yml

第六阶段:Zabbix Web 添加监控主机

  1. 浏览器登录 Zabbix
  2. 配置 → 主机 → 创建主机
  3. 主机名称:k8s-masterIP 地址:192.168.10.10模板链接:选择 Linux by Zabbix agent 2
  4. 同样方式添加 node1、node2
  5. 等待 5 分钟,即可看到 CPU、内存、磁盘、网络监控数据。

    第七阶段:整体项目总结流程

  6. 3 台虚拟机基础初始化(主机名 / 防火墙 / SELinux / 时间同步)
  7. Master 节点安装 Ansible,配置免密、主机清单
  8. 3 台机器统一安装 Docker、K8s 组件
  9. Kubeadm 初始化集群、加入节点、Calico 组网
  10. K8s 内部用 yaml 部署 MySQL + Zabbix-Server + Zabbix-Web
  11. Ansible 编写 Playbook,一键批量给所有节点装 Zabbix Agent
  12. Zabbix 页面添加主机、绑定模板、查看监控、配置告警
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐