基于k8s集群部署安装Zabbi

一、搭建k8s集群

1、检查环境

1.1 配置静态IP

TYPE=Ethernet

网络类型,通常为以太网 (Ethernet)。

推荐配置,明确接口类型。

PROXY_METHOD=none

代理方法,none表示不使用代理。

可选,通常保持 none。

BROWSER_ONLY=no

可能指示是否仅用于浏览器,no表示否。

可选,通常持 no。

BOOTPROTO=none

获取IP地址的方式。none或 static表示静态IP,dhcp表示动态获取。

必需,静态配置时必须为 none或 static。

DEFROUTE=yes

是否将此接口设置为默认路由(IPv4)。yes表示是。

推荐,通常主网卡需要设为 yes以确保有默认路由。

IPV4_FAILURE_FATAL=no

IPv4配置失败是否视为致命错误。no表示否,系统会继续启动。

推荐,设为 no可避免网络配置错误导致系统无法启动。

IPV6INIT=yes

是否初始化IPv6协议栈。yes表示是。

可选,如果不需要IPv6,可设为 no。

IPV6_AUTOCONF=yes

是否允许自动配置IPv6地址。yes表示是。

可选,取决于IPv6网络环境需求。

IPV6_DEFROUTE=yes

是否将此接口设置为IPv6的默认路由。yes表示是。

可选,取决于IPv6网络环境需求。

IPV6_FAILURE_FATAL=no

IPv6配置失败是否视为致命错误。no表示否。

推荐,设为 no可避免IPv6配置错误影响系统启动。

IPV6_ADDR_GEN_MODE=stable-privacy

IPv6地址生成模式,stable-privacy旨在增强隐私性。

可选,通常系统默认或网络环境决定。

NAME=ens192

网络连接的逻辑名称,可自定义。

可选,但建议配置,便于识别。

DEVICE=ens192

指定该配置文件对应的物理网络设备名称。

必需,必须与配置文件文件名中的接口名(如 ifcfg-ens192)一致。

ONBOOT=yes

系统启动时是否自动激活此接口。yes表示是。

必需,通常需要设为 yes以确保开机后网络自动启动。

IPADDR=192.168.3.174

手动指定的静态IPv4地址。

静态IP必需,BOOTPROTO=none/static时必需。

PREFIX=16

IPv4地址的子网掩码长度(CIDR表示法),16对应 255.255.0.0。

静态IP必需(与 NETMASK二选一)。

GATEWAY=192.168.1.1

默认网关的IPv4地址。

推荐,通常需要配置,否则无法访问其他网络。系统多网卡时一般只需一个默认网关。

DNS1=192.168.1.1

首选DNS服务器的IPv4地址。

推荐,通常需要配置,否则可能无法解析域名。也可在 /etc/resolv.conf中设置。

示例(最小化配置必须的参数)

[root@k8s-master01 ~]# vi etc/sysconfig/network-scripts/ifcfg-ens192

BOOTPROTO="none"

NAME="ens192"

DEVICE="ens192"

ONBOOT="yes"

IPADDR=192.168.3.174

PREFIX=24

GATEWAY=192.168.1.1

DNS1=114.114.114.114

[root@k8s-master01 ~]# systemctl restart network #刷新网络服务

[root@k8s-master01 ~]# ip a #查看ip

1.2 配置添加hosts

[root@k8s-master01 ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.3.174 k8s-master01

192.168.3.175 k8s-node01

192.168.3.176 k8s-node02

[root@k8s-master01 ~]#

2、配置docker环境

(1)清理现有 Docker 并配置源

# 卸载可能存在的旧版本 Docker

sudo yum remove docker docker-engine docker-ce docker-* containerd.io

# 添加阿里云 CentOS 8 基础源

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

# 添加 Docker CE 源(阿里云镜像)

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 修正 yum 变量(关键步骤!强制使用 centos 8 的包)

echo "8" | sudo tee /etc/yum/vars/centos_version > /dev/null

sudo sed -i 's/$releasever/$centos_version/g' /etc/yum.repos.d/docker-ce.repo

sudo sed -i 's/$releasever/$centos_version/g' /etc/yum.repos.d/CentOS-Base.repo

# 更新缓存

sudo yum makecache

# 查看所有可用的 Docker CE 版本

yum list docker-ce --showduplicates | sort -r

#让包管理器自动解决依赖关系。​​注意​​,这会安装软件源中标记为默认或最新的版本

yum install -y docker-ce docker-ce-cli containerd.io

或# 选择一个较新但非最新的版本进行安装(例如 26.1.3)

yum install -y docker-ce-26.1.3-1.el8 docker-ce-cli-26.1.3-1.el8 containerd.io

(2)配置docker的国内源

# 创建/etc/docker目录(如果不存在)

sudo mkdir -p /etc/docker

# 配置Docker守护进程,尤其是cgroup驱动

cat <<EOF | sudo tee /etc/docker/daemon.json

{

"registry-mirrors": ["https://hub.docker-alhk.dkdun.com/"],

"exec-opts": ["native.cgroupdriver=systemd"]

}

EOF

# 重启Docker以应用配置

sudo systemctl daemon-reload

sudo systemctl restart docker

# 设置Docker开机自启

sudo systemctl enable docker.service

sudo systemctl status dokcer

3、配置k8s组件源

(1)配置国内yum源

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

# 更新索引缓冲

yum makecache

(2)安装kubelet、kubeadm和kubectl​

# 安装指定版本,建议指定版本以避免兼容性问题

yum install -y kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0 --disableexcludes=kubernetes

# 或者安装当前最新稳定版

# sudo yum install -y kubelet kubeadm kubectl

# 启用kubelet服务,但暂不启动(需初始化后才会正常)

sudo systemctl enable kubelet​

4、集群初始化

(1)初始化Kubernetes控制平面(Master节点)
   以下步骤仅在Master节点上执行:

kubeadm init \

--apiserver-advertise-address=192.168.3.174 \ # 替换为你的Master节点IP

--image-repository registry.aliyuncs.com/google_containers \ # 使用国内镜像源

--kubernetes-version=v1.23.17 \ # 指定与安装一致的版本

--service-cidr=10.96.0.0/12 \ #指定 Service 网络的 IP 地址范围。

--pod-network-cidr=10.244.0.0/16 # 设置Pod网络CIDR,需与后续CNI插件匹配

成功后会提示一下信息

IMG_256

继续执行

mkdir -p $HOME/.kube

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

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

在node节点执行加入到集群

kubeadm join 192.168.3.174:6443 --token g5aqri.02haydobvjfu7dnl \

--discovery-token-ca-cert-hash sha256:95fd4a7fd82ccde7b329ea551130340a837a3aa612145caa2435d2c18b3c91ef

查看集群

[root@k8s-master01 ~]# kubectl label node k8s-node01 node-role.kubernetes.io/worker=worker

node/k8s-node01 labeled

[root@k8s-master01 ~]# kubectl label node k8s-node02 node-role.kubernetes.io/worker=worker

node/k8s-node02 labeled

[root@k8s-master01 ~]# kubectl get nodes

NAME STATUS ROLES AGE VERSION

k8s-master01 NotReady control-plane,master 4h29m v1.23.17

k8s-node01 NotReady worker 3m45s v1.23.17

k8s-node02 NotReady worker 41m v1.23.17

[root@k8s-master01 ~]#

#过一段时间

[root@k8s-master01 ~]# kubectl get nodes

NAME STATUS ROLES AGE VERSION

k8s-master01 Ready control-plane,master 24m v1.23.17

k8s-node01 Ready worker 18m v1.23.17

k8s-node02 Ready worker 18m v1.23.17

二、部署zabbix

如果镜像拉取有问题,可先手动导入(连接下载解压:通过网盘分享的文件:zabbix-all.zip
链接: https://pan.baidu.com/s/1VsVlPF8RAZUlP3F2b5IxYQ?pwd=5h2u 提取码: 5h2u)

# 导入 Zabbix Server

docker load -i zabbix-server-mysql.tar.gz

# 导入 Zabbix Web

docker load -i zabbix-web-nginx-mysql.tar.gz

# 导入 Zabbix Agent

docker load -i zabbix-agent.tar.gz

#导入 数据库

docker load -i mysql:8.0.gz

1、安装zabbix的数据库(MySQL或PostgreSQL)

(1)本次测试选择MySQL,创建mysql-deploy.yaml文件

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mysql-pvc

namespace: zabbix

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 10Gi # 根据需求调整存储大小

# 若有StorageClass,取消注释并指定(如:storageClassName: "standard")

# storageClassName: "your-storage-class"

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: mysql

namespace: zabbix

spec:

replicas: 1

selector:

matchLabels:

app: mysql

template:

metadata:

labels:

app: mysql

spec:

containers:

- name: mysql

image: mysql:8.0 # 官方MySQL镜像

imagePullPolicy: IfNotPresent

ports:

- containerPort: 3306

env:

- name: MYSQL_ROOT_PASSWORD

value: "Root@123" # root密码,建议修改

- name: MYSQL_DATABASE

value: "zabbix" # Zabbix数据库名

- name: MYSQL_USER

value: "zabbix" # Zabbix数据库用户

- name: MYSQL_PASSWORD

value: "zabbix" # Zabbix用户密码,建议修改

volumeMounts:

- name: mysql-data

mountPath: /var/lib/mysql # MySQL数据目录

resources:

requests:

cpu: 300m

memory: 300Mi

limits:

cpu: 800m

memory: 800Mi

volumes:

- name: mysql-data

persistentVolumeClaim:

claimName: mysql-pvc

---

apiVersion: v1

kind: Service

metadata:

name: mysql

namespace: zabbix

spec:

selector:

app: mysql

ports:

- port: 3306

targetPort: 3306

type: ClusterIP # 仅集群内部访问

(2) 应用部署

kubectl apply -f mysql-deploy.yaml

(3)验证 MySQL 是否运行

kubectl get pods -n zabbix -l app=mysql

# 状态应为Running

示例:

[root@k8s-master01 ~]# kubectl get pods -n zabbix -l app=mysql

NAME READY STATUS RESTARTS AGE

mysql-758b6cf559-7d2kh 1/1 Running 0 40m

[root@k8s-master01 ~]#

2、部署zabbix server

(1)Zabbix Server 是核心组件,负责处理监控数据。需连接 MySQL,创建zabbix-server-deploy.yaml

[root@k8s-master01 ~]# cat zabbix-server-deploy.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: zabbix-server

namespace: zabbix

spec:

replicas: 1

selector:

matchLabels:

app: zabbix-server

template:

metadata:

labels:

app: zabbix-server

spec:

containers:

- name: zabbix-server

image: zabbix/zabbix-server-mysql:latest # 官方Zabbix Server镜像(6.4版本)

imagePullPolicy: IfNotPresent

ports:

- containerPort: 10051 # Zabbix Server默认端口

env:

- name: DB_SERVER_HOST

value: "mysql" # 对应MySQL Service名称

- name: MYSQL_DATABASE

value: "zabbix"

- name: MYSQL_USER

value: "zabbix"

- name: MYSQL_PASSWORD

value: "zabbix" # 与MySQL中Zabbix用户密码一致

- name: MYSQL_ROOT_PASSWORD

value: "Root@123" # MySQL root密码(用于初始化数据库)

resources:

requests:

cpu: 300m

memory: 300Mi

limits:

cpu: 1000m

memory: 800Mi

---

apiVersion: v1

kind: Service

metadata:

name: zabbix-server

namespace: zabbix

spec:

selector:

app: zabbix-server

ports:

- port: 10051

targetPort: 10051

type: ClusterIP # 内部访问

[root@k8s-master01 ~]#

(2)应用部署

kubectl apply -f zabbix-server-deploy.yaml

(3)验证 Zabbix Server 状态

kubectl get pods -n zabbix -l app=zabbix-server

3、部署 Zabbix Web 前端(Nginx+PHP)

(1)Zabbix Web 提供可视化界面,需连接 Zabbix Server 和 MySQL。创建zabbix-web-deploy.yaml

[root@k8s-master01 ~]# cat zabbix-web-deploy.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: zabbix-web

namespace: zabbix

spec:

replicas: 1

selector:

matchLabels:

app: zabbix-web

template:

metadata:

labels:

app: zabbix-web

spec:

containers:

- name: zabbix-web

image: zabbix/zabbix-web-nginx-mysql:latest # 官方Web镜像(Nginx+PHP)

imagePullPolicy: IfNotPresent

ports:

- containerPort: 8080 # Web端口

env:

- name: ZBX_SERVER_HOST

value: "zabbix-server" # 对应Zabbix Server Service名称

- name: DB_SERVER_HOST

value: "mysql"

- name: MYSQL_DATABASE

value: "zabbix"

- name: MYSQL_USER

value: "zabbix"

- name: MYSQL_PASSWORD

value: "zabbix"

- name: PHP_TZ

value: "Asia/Shanghai" # 设置时区为上海

resources:

requests:

cpu: 200m

memory: 256Mi

limits:

cpu: 1000m

memory: 512Mi

---

apiVersion: v1

kind: Service

metadata:

name: zabbix-web

namespace: zabbix

spec:

selector:

app: zabbix-web

ports:

- port: 80

targetPort: 8080

type: NodePort # 暴露到节点端口,便于外部访问

[root@k8s-master01 ~]#

(2)应用部署

kubectl apply -f zabbix-web-deploy.yaml

(3)验证 Web 状态

kubectl get pods -n zabbix -l app=zabbix-web

[root@k8s-master01 ~]# kubectl get pods -n zabbix -l app=zabbix-web

NAME READY STATUS RESTARTS AGE

zabbix-web-7bc9f48d8f-7bvvz 1/1 Running 0 27m

[root@k8s-master01 ~]#

4、部署 Zabbix Agent(可选,监控 K8s 节点)

[root@k8s-master01 ~]# cat zabbix-agent-daemonset.yaml

apiVersion: apps/v1

kind: DaemonSet

metadata:

name: zabbix-agent

namespace: zabbix

spec:

selector:

matchLabels:

app: zabbix-agent

template:

metadata:

labels:

app: zabbix-agent

spec:

hostNetwork: true

# 新增:容忍 master 节点的污点(关键!)

tolerations:

- key: "node-role.kubernetes.io/master"

operator: "Exists"

effect: "NoSchedule"

# 保留原有其他容忍(内存压力、磁盘压力等,无需修改)

- key: "node.kubernetes.io/memory-pressure"

operator: "Exists"

effect: "NoSchedule"

- key: "node.kubernetes.io/disk-pressure"

operator: "Exists"

effect: "NoSchedule"

# 容器配置不变(保留原有内容)

containers:

- name: zabbix-agent

image: zabbix/zabbix-agent:latest

ports:

- containerPort: 10050

env:

- name: ZBX_SERVER_HOST

value: "zabbix-server"

- name: ZBX_HOSTNAME

valueFrom:

fieldRef:

fieldPath: spec.nodeName

resources:

requests:

cpu: 50m

memory: 64Mi

limits:

cpu: 100m

memory: 128Mi

[root@k8s-master01 ~]#

kubectl apply -f zabbix-agent-daemonset.yaml

[root@k8s-master01 ~]# kubectl get pods -n zabbix -l app=zabbix-agent -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

zabbix-agent-6lgmp 1/1 Running 0 41m 192.168.3.174 k8s-master01 <none> <none>

zabbix-agent-hm6fz 1/1 Running 0 41m 192.168.3.176 k8s-node02 <none> <none>

zabbix-agent-t7jd5 1/1 Running 0 33m 192.168.3.175 k8s-node01 <none> <none>

[root@k8s-master01 ~]#

5、访问 Zabbix Web 界面

(1)获取节点 IP(任意 worker 节点或 master 节点均可

[root@k8s-master01 ~]# kubectl get nodes -o wide

NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME

k8s-master01 Ready control-plane,master 30d v1.23.17 192.168.3.174 <none> Kylin Linux Advanced Server V10 (Lance) 4.19.90-52.22.v2207.ky10.x86_64 docker://20.10.24

k8s-node01 Ready worker 30d v1.23.17 192.168.3.175 <none> Kylin Linux Advanced Server V10 (Lance) 4.19.90-52.22.v2207.ky10.x86_64 docker://20.10.24

k8s-node02 Ready worker 30d v1.23.17 192.168.3.176 <none> Kylin Linux Advanced Server V10 (Lance) 4.19.90-52.22.v2207.ky10.x86_64 docker://20.10.24

[root@k8s-master01 ~]#

(2)访问地址:http://<节点IP>:<NodePort>

[root@k8s-master01 ~]# kubectl get svc zabbix-web -n zabbix

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

zabbix-web NodePort 10.99.186.185 <none> 80:30211/TCP 177m

[root@k8s-master01 ~]#

(3)登录

登录:

用户名:Admin

密码:zabbix(首次登录建议修改)

IMG_256

posted @ 2025-10-15 15:15  乐维_lwops  阅读(18)  评论(0)    收藏  举报