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/mysql

yum -y install nfs-utils rpcbind

echo '/data/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/mysql 192.168.0.0/24
#执行showmount -e 有以上输出表示正常

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

yum -y install nfs-utils

创建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
        args:
        - "--character-set-server=utf8"
        - "--collation-server=utf8_bin"
        - "--default-authentication-plugin=mysql_native_password"
        env:
        - name: MYSQL_DATABASE
          value: "zabbix"
        - name: MYSQL_USER
          value: "zabbix"
        - name: MYSQL_PASSWORD
          value: "zabbix"
        - name: MYSQL_ROOT_PASSWORD
          value: "zabbix"
        ports:
        - containerPort: 3306
          name: mysql
          protocol: TCP
        resources:
          requests:
            cpu: 1000m
            memory: 1000Mi
          limits:
            cpu: 2000m
            memory: 2000Mi
        volumeMounts:
        - name: timezone
          mountPath: /etc/localtime
        - name: data
          mountPath: /var/lib/mysql
      terminationGracePeriodSeconds: 20
      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: 20Gi

执行部署

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

查看pod

kubectl get pod -n zabbix 

部署zabbix server

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

你要将服务固定部署在哪台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

下载 Ingress controller

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

下载后,将文件上传至 /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

部署 Ingress controller

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

查看pod

kubectl get pod -n zabbix 

部署 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

查看ingress

kubectl get ingress -n zabbix 

访问zabbix

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

在这里插入图片描述

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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值