k8s-部署zabbix最新版

部署环境

k8s 版本1.18

主机名IP
master192.168.0.10
node01192.168.0.11
nfs192.168.0.14

创建namespace

mkdir -p /data/zabbix

cd /data/zabbix

vim namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: zabbix

执行创建

kubectl apply -f /data/zabbix/namespace.yaml

查看命名空间

kubectl get ns  

部署NFS

nfs 机器上执行(记得关闭防火墙)

mkdir -p /data/zabbix/mysql

yum -y install nfs-utils rpcbind

echo '/data/zabbix/mysql 192.168.0.0/24(rw,sync,no_root_squash)' > /etc/exports

chmod -R 755 /data/zabbix/mysql

exportfs -arv

systemctl enable rpcbind && systemctl start rpcbind

systemctl enable nfs && systemctl start nfs

查看是否共享成功

[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/data/zabbix/mysql 192.168.0.0/24
#执行showmount -e 有以上输出表示正常

使用nfs的node节点都要安装nfs(所有Node 上执行

yum -y install nfs-utils

创建pv

Master机器上创建mysql-pv

修改 yaml 中的 server: 192.168.0.14 为自己的 nfs ip

cd /data/zabbix
vim mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    pvname: nfs-mysql-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.0.14 # nfs 的ip
    path: /data/zabbix/mysql

执行部署

kubectl apply -f /data/zabbix/mysql-pv.yaml

查看pv 是否创建成功

kubectl get pv 

部署 mysql

下面 yaml 内容无需修改,复制粘贴即可

vim /data/zabbix/mysql.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: zabbix
  labels:
    app: mysql
spec:
  selector:
    app: mysql
  ports:
    - name: mysql
      port: 3306
      protocol: TCP
      targetPort: 3306
  clusterIP: None

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
  namespace: zabbix
spec:
  serviceName: mysql
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        imagePullPolicy: IfNotPresent
        # 核心修改:通过 command 直接集成数据库初始化逻辑
        command: 
        - /bin/sh
        - -c
        - |
          # 启动 MySQL 服务(保留默认入口脚本)
          docker-entrypoint.sh mysqld &
          
          # 等待 MySQL 完全启动(最多 30 秒)
          for i in {1..30}; do
            mysqladmin ping -uroot -p$MYSQL_ROOT_PASSWORD --silent && break
            sleep 1
          done
          
          # 自动创建数据库和用户(兼容已存在的情况)
          mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "\
            CREATE DATABASE IF NOT EXISTS zabbix \
              CHARACTER SET utf8mb4 \
              COLLATE utf8mb4_bin; \
            CREATE USER IF NOT EXISTS 'zabbix'@'%' \
              IDENTIFIED WITH mysql_native_password BY 'zabbix'; \
            GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%'; \
            FLUSH PRIVILEGES;"
          
          # 保持容器运行
          wait
        args:  # 保留必要参数
        - "--character-set-server=utf8mb4"
        - "--collation-server=utf8mb4_bin"
        - "--default-authentication-plugin=mysql_native_password"
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "zabbix"  # Root 密码必须设置
        ports:
        - containerPort: 3306
          name: mysql
          protocol: TCP
        volumeMounts:
        - name: timezone
          mountPath: /etc/localtime
        - name: data
          mountPath: /var/lib/mysql
      volumes:
      - name: timezone
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
  volumeClaimTemplates:
  - metadata:
      name: data
      namespace: zabbix
    spec:
      selector:
        matchLabels:
          pvname: nfs-mysql-pv
      accessModes: [ "ReadWriteMany" ]
      resources:
        requests:
          storage: 20G

配置加速地址(所有node上执行,不配置可能会出现无法拉取镜像)

vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://docker.1panel.live"]
} 

在master上执行部署

kubectl apply -f /data/zabbix/mysql.yaml

查看pod

kubectl get pod -n zabbix 

部署zabbix server

给node01 打标签,将服务固定部署在node01上

你要将服务固定部署在哪台node,就给哪个node 打标签

kubectl label nodes node01 node-role.kubernetes.io/master="192.168.0.11"
vim /data/zabbix/zabbix-server.yaml

注意修改 yaml 中的标签,和你的一致 ,除了标签其它的不用改
node-role.kubernetes.io/master: “192.168.0.11”

apiVersion: v1
kind: Service
metadata:
  name: zabbix-server
  namespace: zabbix
  labels:
    app: zabbix-server
spec:
  selector:
    app: zabbix-server
  ports:
  - name: zabbix-server
    port: 10051
    nodePort: 30051
  type: NodePort

---
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
        imagePullPolicy: IfNotPresent
        env:
        - name: DB_SERVER_HOST
          value: mysql
        - name: DB_SERVER_PORT
          value: "3306"
        - name: MYSQL_DATABASE
          value: zabbix
        - name: MYSQL_USER
          value: zabbix
        - name: MYSQL_PASSWORD
          value: zabbix
        - name: MYSQL_ROOT_PASSWORD
          value: zabbix
        - name: ZBX_CACHESIZE
          value: "512M"
        - name: ZBX_HISTORYCACHESIZE
          value: "128M"
        - name: ZBX_HISTORYINDEXCACHESIZE
          value: "128M"
        - name: ZBX_TRENDCACHESIZE
          value: "128M"
        - name: ZBX_VALUECACHESIZE
          value: "256M"
        - name: ZBX_TIMEOUT
          value: "30"
        ports:
        - containerPort: 10051
          name: zabbix-server
          protocol: TCP
        resources:
          requests:
            cpu: 1000m
            memory: 1000Mi
          limits:
            cpu: 1000m
            memory: 1000Mi
      - name: zabbix-agent
        image: zabbix/zabbix-agent:latest
        imagePullPolicy: IfNotPresent
        env:
        - name: ZBX_HOSTNAME
          value: "Zabbix server"
        - name: ZBX_SERVER_HOST
          value: "127.0.0.1"
        - name: ZBX_STARTAGENTS
          value: "3"
        - name: ZBX_UNSAFEUSERPARAMETERS
          value: "1"
        - name: ZBX_TIMEOUT
          value: "10"
        ports:
        - containerPort: 10050
          name: zabbix-agent
          protocol: TCP
        resources:
          requests:
            cpu: 200m
            memory: 200Mi
          limits:
            cpu: 200m
            memory: 200Mi
      nodeSelector:             #固定zabbix server ip
        node-role.kubernetes.io/master: "192.168.0.11"
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
kubectl apply -f /data/zabbix/zabbix-server.yaml

查看pod

kubectl get pod -n zabbix 

部署 zabbix web

vim /data/zabbix/zabbix-web.yaml
apiVersion: v1
kind: Service
metadata:
  name: zabbix-web
  namespace: zabbix
  labels:
    app: zabbix-web
spec:
  selector:
    app: zabbix-web
  ports:
  - name: web
    port: 8080
    protocol: TCP

---
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
        imagePullPolicy: IfNotPresent
        env:
        - name: DB_SERVER_HOST
          value: mysql
        - name: MYSQL_DATABASE
          value: zabbix
        - name: MYSQL_USER
          value: zabbix
        - name: MYSQL_PASSWORD
          value: zabbix
        - name: MYSQL_ROOT_PASSWORD
          value: zabbix
        - name: ZBX_SERVER_HOST
          value: zabbix-server
        - name: PHP_TZ
          value: "Asia/Shanghai"
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        resources:
          requests:
            cpu: 500m
            memory: 500Mi
          limits:
            cpu: 500m
            memory: 500Mi
kubectl apply -f /data/zabbix/zabbix-web.yaml

查看pod

kubectl get pod -n zabbix 

部署 Ingress

1、下载 Ingress controller

Ingress-controller 微云分享下载链接:https://share.weiyun.com/LtejiTBX

2、下载后,将文件上传至 /data/zabbix 目录

[root@master zabbix]# cd /data/zabbix/
[root@master zabbix]# ll
总用量 36
-rw-r--r-- 1 root root 6690 42 16:44 ingrss-controller.yaml

3、部署 Ingress controller

kubectl create -f /data/zabbix/ingrss-controller.yaml

4、查看pod,检查 nginx-ingress-controller-xxx 是否创建成功

kubectl get pod -A

5、部署 Ingress

vim zabbix-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: zabbix-web
  namespace: zabbix
spec:
  rules:
  - host: my.zabbix.com
    http:
      paths:
      - path: /
        backend:
          serviceName: zabbix-web
          servicePort: 8080
kubectl create -f /data/zabbix/zabbix-ingress.yaml

6、查看ingress

kubectl get ingress -n zabbix 

访问zabbix

修改windows hosts 文件
C:\Windows\System32\drivers\etc\hosts

在这里插入图片描述

打开浏览器输出域名访问
在这里插入图片描述
默认账户:Admin
默认密码:zabbix

视频参考:
k8s部署zabbix【B站必须教程】我敢说B站头一份,全网运维工程师们赶紧冲!

### 使用 Docker 部署 Zabbix 7 对于 containerized deployment of Zabbix 7 using Docker, 创建并配置必要的服务来运行 Zabbix Server 和数据库是必需的操作。下面提供了一个基于官方文档的方法,利用 Docker Compose 来简化这一过程。 #### 准备工作 确保已安装 Docker 和 Docker Compose 并能正常运作。如果尚未完成这一步骤,在 CentOS 7 上可以通过特定命令实现 Docker 的安装和镜像加速设置[^1]。 #### 编写 `docker-compose.yml` 创建一个新的目录用于保存项目文件,并在此目录下编写名为 `docker-compose.yml` 的文件: ```yaml version: '3' services: db: image: postgres:12 environment: POSTGRES_DB: zabbix POSTGRES_USER: zabbix POSTGRES_PASSWORD: your_password_here volumes: - zabbix_db_data:/var/lib/postgresql/data zabbix-server-pgsql: image: zabbix/zabbix-server-pgsql:alpine-7.0 depends_on: - db environment: DB_SERVER_HOST: "db" POSTGRES_USER: "zabbix" POSTGRES_PASSWORD: "your_password_here" POSTGRES_DB: "zabbix" ports: - "10051:10051" zabbix-web-nginx-pgsql: image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0 depends_on: - zabbix-server-pgsql environment: ZBX_SERVER_HOST: "zabbix-server-pgsql" POSTGRES_USER: "zabbix" POSTGRES_PASSWORD: "your_password_here" POSTGRES_DB: "zabbix" PHP_TZ: "Asia/Shanghai" # 设置时区为中国标准时间 ports: - "8080:80" volumes: zabbix_db_data: ``` 此配置定义了三个主要的服务组件:PostgreSQL 数据库、Zabbix server 和带有 Nginx 前端的 Web 接口。通过指定版本号为 alpine-7.0Zabbix 映像,可以保证使用最新的稳定版 Zabbix 7.x 版本。 启动这些服务只需在一个终端窗口中执行如下指令即可: ```bash docker-compose up -d ``` 上述命令会下载所需的映像并在后台启动所有容器。访问 http://localhost:8080 即可进入 Zabbix web 界面进行初始化配置。 ### 使用 Kubernetes 部署 Zabbix 7 当考虑更大规模的应用场景或希望获得更高水平的可用性和扩展能力时,Kubernetes 成为了理想的选择。虽然这里不展开具体细节,但通常涉及 Helm Chart 工具的帮助以快速部署复杂的分布式应用到 K8S 集群上。社区提供了多种现成的 Helm Charts 方便用户直接采用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值