一、整体架构先明确K8s 集群3 节点1master2node1.24含 CSI 存储PVCAnsible 控制节点独立 VM / 物理机与 K8s 节点互通、免密 sudoZabbix 组件容器化部署在 K8sMySQLStatefulSet PVC存储 Zabbix 配置 / 历史数据Zabbix ServerDeployment10051 端口Zabbix WebDeployment Ingress80/443Zabbix Agent2DaemonSet每节点一个监控节点与容器监控对象K8s 集群API、Scheduler、kubelet、Node、Pod 所有主机 / 容器二、环境准备所有节点2.1 基础环境所有机器需要四台机器 一台独立的ansible 一台master 两台node 注意 部署k8s的机器内存要大于四G 内核大于二# 关闭防火墙/selinux systemctl stop firewalld systemctl disable firewalldsetenforce 0sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/selinux/config# 时间同步yum install -y chrony systemctl start chrony systemctl enable chrony# 主机名解析所有节点cat /etc/hosts EOF192.168.1.10 k8s-master192.168.1.11 k8s-node1192.168.1.12 k8s-node2192.168.1.20 ansible-controllerEOF2.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 ping2.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/kubectl1.24yum install -y kubeadm-1.24.17-0 kubelet-1.24.17-0 kubectl-1.24.17-0systemctl enable kubelet# master 初始化kubeadm init \--apiserver-advertise-address192.168.1.10 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-versionv1.24.17 \ --service-cidr10.96.0.0/12 \--pod-network-cidr10.244.0.0/16# 配置 kubectlmkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 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-nodes3.2 Ansible Playbook初始化 K8s 节点ansible-playbook init-k8s.yml四、K8s 部署 ZabbixMySQL Server Web4.1 创建命名空间与存储kubectl create namespace monitoring4.2 部署 MySQLStatefulSet PVCmysql.yaml使用命令完成该文件的部署kubectl apply -f mysql.yaml4.3 部署 Zabbix Serverzabbix-server.yaml使用命令完成部署kubectl apply -f zabbix-server.yaml4.4 部署 Zabbix Web 界面新建zabbix-web.yaml部署并查看访问端口kubectl apply -f zabbix-web.yamlkubectl get svc -n monitoring第五阶段Ansible 批量给所有机器部署 Zabbix Agent2核心5.1 新建 Ansible 项目目录mkdir -p /opt/ansible/zabbix-agent/templatescd /opt/ansible/zabbix-agent5.2 编写 Agent 配置模板vi templates/zabbix_agent2.conf.j2PidFile/run/zabbix/zabbix_agent2.pidLogFile/var/log/zabbix/zabbix_agent2.logServer192.168.10.10 ServerActive192.168.10.10Hostname{{ ansible_hostname }}5.3 编写 Ansible 部署剧本deploy-agent.yml5.4 一键批量部署所有节点ansible-playbook deploy-agent.yml第六阶段Zabbix Web 添加监控主机浏览器登录 Zabbix配置 → 主机 → 创建主机主机名称k8s-masterIP 地址192.168.10.10模板链接选择Linux by Zabbix agent 2同样方式添加 node1、node2等待 5 分钟即可看到 CPU、内存、磁盘、网络监控数据。第七阶段整体项目总结流程3 台虚拟机基础初始化主机名 / 防火墙 / SELinux / 时间同步Master 节点安装 Ansible配置免密、主机清单3 台机器统一安装 Docker、K8s 组件Kubeadm 初始化集群、加入节点、Calico 组网K8s 内部用 yaml 部署 MySQL Zabbix-Server Zabbix-WebAnsible 编写 Playbook一键批量给所有节点装 Zabbix AgentZabbix 页面添加主机、绑定模板、查看监控、配置告警