k8s jinkens zabbix ansible
一、环境准备(所有节点执行)
1.1 系统基础配置
主机规划
| 角色 | IP地址 | 主机名 |
|---|---|---|
| K8s Master | 192.168.209.100 | master |
| K8s Node | 192.168.209.101 | node1 |
| 工具节点 | 192.168.209.102 | tools |
关闭防火墙、SELinux、Swap
bash
# 所有节点执行 systemctl stop firewalld && systemctl disable firewalld sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config swapoff -a sed -i '/swap/d' /etc/fstab
验证:
systemctl status firewalld应显示inactive;getenforce应输出Disabled;free -m中 Swap 应为 0。
配置主机名与 hosts 解析
bash
# master 节点 hostnamectl set-hostname master # node1 节点 hostnamectl set-hostname node1 # 所有节点 cat >> /etc/hosts <<EOF 192.168.209.100 master 192.168.209.101 node1 EOF
验证:
ping master -c 2 && ping node1 -c 2应能互相 ping 通。
时间同步
bash
yum install -y ntpdate ntpdate ntp.aliyun.com echo "0 */1 * * * /usr/sbin/ntpdate ntp.aliyun.com" >> /var/spool/cron/root
验证:
date查看时间是否正确。
内核参数与模块
bash
cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system modprobe overlay && modprobe br_netfilter echo -e "overlay\nbr_netfilter" > /etc/modules-load.d/k8s.conf
验证:
lsmod | grep -E "overlay|br_netfilter"应看到两个模块已加载。
1.2 配置 YUM 源(阿里云镜像加速)
bash
rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # Kubernetes 源 cat > /etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 EOF # Docker CE 源(用于安装 containerd) yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum clean all && yum makecache
验证:
yum repolist应列出kubernetes和docker-ce-stable仓库。
二、部署 Kubernetes 集群(containerd 运行时)
2.1 安装 containerd
bash
yum install -y containerd.io mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml # 将 SystemdCgroup 改为 true sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml # 配置镜像加速(国内必做) sed -i 's@registry.k8s.io@registry.cn-hangzhou.aliyuncs.com/google_containers@g' /etc/containerd/config.toml systemctl enable containerd --now
验证:
systemctl status containerd应显示active (running);ls /run/containerd/containerd.sock应能看到套接字文件。
2.2 安装 kubeadm/kubelet/kubectl
bash
yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 systemctl enable kubelet --now
验证:
kubeadm version和kubectl version应输出版本信息。
2.3 Master 节点初始化
bash
kubeadm init \ --apiserver-advertise-address=192.168.209.100 \ --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \ --kubernetes-version=v1.28.2 \ --pod-network-cidr=10.244.0.0/16 # 配置 kubectl 访问凭证 mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
验证:
kubectl get nodes应看到 master 节点(此时状态为NotReady,需安装网络插件后变为Ready)。注意:记录输出中的kubeadm join命令,用于节点加入。
2.4 安装 Flannel 网络插件
bash
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
验证:等待约 2 分钟后,
kubectl get nodes应显示Ready状态;kubectl get pods -n kube-flannel应全部Running。
2.5 Worker 节点加入集群
bash
# 在 node1 上执行(使用 init 输出的 join 命令) kubeadm join 192.168.209.100:6443 --token <token> \ --discovery-token-ca-cert-hash sha256:<hash>
验证:在 master 上执行
kubectl get nodes,应看到所有节点状态为Ready。若 token 过期,在 master 上执行kubeadm token create --print-join-command重新生成。
三、部署 Zabbix 监控系统
3.1 安装 MySQL 数据库
bash
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm yum install -y mysql-community-server systemctl enable mysqld --now
创建 Zabbix 数据库
bash
# 获取初始密码
TEMP_PASS=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
mysql -uroot -p"${TEMP_PASS}" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPass@2024';"
# 创建 zabbix 数据库和用户
mysql -uroot -p'YourNewPass@2024' -e "
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'Zabbix@2024';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;"
验证:
mysql -uzabbix -p'Zabbix@2024' -e "SHOW DATABASES;"应列出zabbix数据库。
3.2 安装 Zabbix Server
bash
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/6.4/rhel/7/x86_64/zabbix-release-6.4-1.el7.noarch.rpm # 替换为阿里云源 sed -i 's@repo.zabbix.com@mirrors.aliyun.com/zabbix@g' /etc/yum.repos.d/zabbix.repo yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent
导入数据库初始数据
bash
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p'Zabbix@2024' zabbix
配置 Zabbix Server
bash
sed -i 's/# DBPassword=/DBPassword=Zabbix@2024/' /etc/zabbix/zabbix_server.conf systemctl enable zabbix-server zabbix-agent httpd --now
验证:
systemctl status zabbix-server应显示active (running)。
3.3 配置 Zabbix Web 前端
bash
cat > /etc/httpd/conf.d/zabbix.conf <<EOF php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value date.timezone Asia/Shanghai EOF systemctl restart httpd
验证:浏览器访问
http://<服务器IP>/zabbix,应出现 Zabbix Web 安装向导页面,按提示完成数据库连接配置。
四、部署 Jenkins
4.1 安装 Java 与 Jenkins
bash
yum install -y java-11-openjdk wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key yum install -y jenkins systemctl enable jenkins --now
验证:
systemctl status jenkins应显示active (running)。
4.2 初始化 Jenkins
bash
# 获取初始管理员密码 cat /var/lib/jenkins/secrets/initialAdminPassword
验证:浏览器访问
http://<服务器IP>:8080,输入初始密码后进入插件安装页面,选择"安装推荐的插件"。
4.3 配置 Kubernetes 插件
-
访问 Manage Jenkins → Plugins → 搜索并安装 Kubernetes 插件。
-
访问 Manage Jenkins → Clouds → New Cloud → Kubernetes,进行如下配置:
-
Kubernetes URL:
https://kubernetes.default.svc.cluster.local -
Kubernetes Namespace:
jenkins(需提前创建) -
Credentials:选择 ServiceAccount 方式
-
验证:点击 Test Connection,应显示连接成功。
五、部署 Ansible
5.1 安装 Ansible
bash
yum install -y epel-release yum install -y ansible
验证:
ansible --version应显示版本号。
5.2 配置主机清单与 SSH 免密
bash
# 配置主机清单 cat > /etc/ansible/hosts <<EOF [k8s_cluster] master ansible_host=192.168.209.100 node1 ansible_host=192.168.209.101 [all:vars] ansible_user=root EOF # 生成 SSH 密钥并分发(免密登录) ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa ssh-copy-id root@master ssh-copy-id root@node1
验证:
ansible all -m ping应返回所有主机的pong成功响应。
5.3 基本 Ad-Hoc 命令测试
bash
# 查看所有主机磁盘使用情况 ansible all -m shell -a "df -h /" # 在所有节点上安装一个软件包(如 curl) ansible all -m yum -a "name=curl state=present"
验证:命令成功执行,且无错误返回,说明 Ansible 可用。
六、组件联动配置
6.1 Ansible 管理 K8s 集群
bash
ansible k8s_cluster -m shell -a "kubectl get nodes"
验证:应能输出当前集群节点状态。
6.2 Jenkins 对接 Ansible
在 Jenkins 中安装 Ansible 插件,然后在流水线中添加阶段:
groovy
stage('Deploy with Ansible') {
steps {
ansiblePlaybook(
playbook: '/path/to/deploy.yml',
inventory: '/etc/ansible/hosts'
)
}
}
验证:在 Jenkins 中创建一个 Freestyle 或 Pipeline 项目,执行上述 Ansible 步骤,确认构建成功。
6.3 Jenkins 与 Kubernetes 联动
创建一个 Pipeline,在 Pod 中运行 Ansible:
groovy
pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: ansible
image: willhallonline/ansible:latest
command: ['sleep']
args: ['infinity']
"""
}
}
stages {
stage('Run Ansible') {
steps {
container('ansible') {
sh 'ansible all -m ping'
}
}
}
}
}
验证:构建成功后,日志中应显示 Ansible 对各节点的
ping成功结果。
6.4 Zabbix 监控 Kubernetes
bash
# 在 Kubernetes 集群中安装 Zabbix Agent 作为 DaemonSet kubectl apply -f https://raw.githubusercontent.com/zabbix/zabbix-docker/6.4/kubernetes/zabbix-agent-daemonset.yaml
验证:
kubectl get pods -n monitoring应看到 agent 全部Running;登录 Zabbix Web 添加 Kubernetes 集群主机,确认能采集数据。
七、全链端到端验证
7.1 Kubernetes 集群基础功能验证
bash
# 部署测试应用 kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get svc nginx # 使用返回的 NodePort 访问 curl http://192.168.209.101:<NodePort>
验证:
curl应返回 Nginx 欢迎页 HTML。
7.2 Jenkins CI/CD 端到端验证
在 Jenkins 中创建 Pipeline 项目,使用以下 Jenkinsfile:
groovy
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo "Build completed"'
}
}
stage('Deploy to K8s') {
steps {
sh 'kubectl set image deployment/nginx nginx=nginx:latest'
}
}
}
}
构建项目。
验证:构建日志中应显示
Build completed和部署成功信息。
7.3 Ansible 批量操作验证
bash
# 创建 Playbook 批量检查所有节点状态
cat > check.yml <<EOF
- hosts: all
tasks:
- name: Check system uptime
command: uptime
register: result
- debug: var=result.stdout
EOF
ansible-playbook check.yml
验证:所有节点应返回
uptime信息。
7.4 Zabbix 告警验证
登录 Zabbix Web,进入 Configuration → Actions,创建测试告警动作,手动触发一个告警。
验证:应在 Monitoring → Problems 中看到告警,并能收到邮件/消息通知。
更多推荐



所有评论(0)