一、环境准备(所有节点执行)

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 应显示 inactivegetenforce 应输出 Disabledfree -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 插件

  1. 访问 Manage Jenkins → Plugins → 搜索并安装 Kubernetes 插件。

  2. 访问 Manage Jenkins → Clouds → New Cloud → Kubernetes,进行如下配置:

    • Kubernetes URLhttps://kubernetes.default.svc.cluster.local

    • Kubernetes Namespacejenkins(需提前创建)

    • 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 中看到告警,并能收到邮件/消息通知。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐