k8s部署zabbix实验

我的集群环境

[root@k8s-master01 zabbix]# kubectl get nodes -owide
NAME           STATUS   ROLES                  AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
k8s-master01   Ready    control-plane,master   34d   v1.23.6   11.0.1.10     <none>        CentOS Linux 7 (Core)   5.19.1-1.el7.elrepo.x86_64   docker://20.10.17
k8s-node01     Ready    <none>                 34d   v1.23.6   11.0.1.11     <none>        CentOS Linux 7 (Core)   5.19.1-1.el7.elrepo.x86_64   docker://20.10.17
k8s-node02     Ready    <none>                 34d   v1.23.6   11.0.1.12     <none>        CentOS Linux 7 (Core)   5.19.1-1.el7.elrepo.x86_64   docker://20.10.17

1、新建ns

[root@k8s-master01 zabbix]# cat namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: zabbix
[root@k8s-master01 zabbix]# kubectl apply -f namespace.yaml

2、创建存储,需提前搭建好nfs环境

[root@k8s-master01 zabbix]# cat nfs-mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    pvname: nfs-mysql-pv
spec:
  capacity:
    storage: 15Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 11.0.1.10
    path: /data/mysql
[root@k8s-master01 zabbix]# kubectl apply -f nfs-mysql-pv.yaml

3、部署mysql

其中所需镜像我已下载到本地,原镜像为:

mysql:8.0

[root@k8s-master01 zabbix]# cat mysql/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: harbor.likf.space/zabbix/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: 500m
            memory: 500Mi
        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: monitoring
    spec:
      selector:
        matchLabels:
          pvname: nfs-mysql-pv
      accessModes: [ "ReadWriteMany" ]
      resources:
        requests:
          storage: 10Gi
[root@k8s-master01 zabbix]# kubectl apply -f mysql/

4、部署zabbix-server

其中所需镜像我已下载到本地,原镜像为:

zabbix/zabbix-server-mysql:latest

zabbix/zabbix-agent:latest

[root@k8s-master01 zabbix]# cat zabbix-server/zabbix-server.yaml
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: harbor.likf.space/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: 500m
            memory: 500Mi
          limits:
            cpu: 500m
            memory: 500Mi
      - name: zabbix-agent
        image: harbor.likf.space/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: ""
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
[root@k8s-master01 zabbix]# kubectl apply -f zabbix-server/

5、部署zabbix-web

1、部署ingress

# 1.安装ingress
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.1/deploy/static/provider/baremetal/deploy.yaml -O ingress-nginx.yaml
# 2.将yaml中的镜像替换为国内镜像,分别为:
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:1.1.1
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:1.3.1
# 3、部署
kubectl apply -f ingress-nginx.yaml

[root@k8s-master01 zabbix]# kubectl get pods -n ingress-nginx
NAME                                   READY   STATUS      RESTARTS      AGE
ingress-nginx-admission-create-qgvv9   0/1     Completed   0             12d
ingress-nginx-admission-patch-lgt6z    0/1     Completed   1             12d
ingress-nginx-controller-68f57         1/1     Running     1 (12d ago)   12d
ingress-nginx-controller-gntqj         1/1     Running     1 (12d ago)   12d

2、部署zabbix-web

其中所需镜像我已下载到本地,原镜像为:

zabbix/zabbix-web-nginx-mysql:latest

[root@k8s-master01 zabbix]# cat zabbix-web/zabbix-web.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: zabbix-web
  namespace: zabbix
spec:
  ingressClassName: nginx
  rules:
  - host: zabbix.likf.space
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: zabbix-web
            port:
              number: 8080

---
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: harbor.likf.space/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
[root@k8s-master01 zabbix]# kubectl apply -f zabbix-web/
此步骤可能需要花点时间,因为需要初始化数据库

6、验证

[root@k8s-master01 zabbix]# kubectl get all -n zabbix
NAME                                 READY   STATUS    RESTARTS   AGE
pod/mysql-0                          1/1     Running   0          12d
pod/zabbix-server-7b7454554f-s88hh   2/2     Running   0          12d
pod/zabbix-web-5dd6df449-xf4ld       1/1     Running   0          12d

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
service/mysql           ClusterIP   None             <none>        3306/TCP          12d
service/zabbix-server   NodePort    10.107.163.21    <none>        10051:30051/TCP   12d
service/zabbix-web      ClusterIP   10.110.144.129   <none>        8080/TCP          12d

NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/zabbix-server   1/1     1            1           12d
deployment.apps/zabbix-web      1/1     1            1           12d

NAME                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/zabbix-server-7b7454554f   1         1         1       12d
replicaset.apps/zabbix-web-5dd6df449       1         1         1       12d

NAME                     READY   AGE
statefulset.apps/mysql   1/1     12d
[root@k8s-master01 zabbix]# kubectl get ing
No resources found in default namespace.
[root@k8s-master01 zabbix]# kubectl get ing -n zabbix
NAME         CLASS   HOSTS               ADDRESS               PORTS   AGE
zabbix-web   nginx   zabbix.likf.space   11.0.1.11,11.0.1.12   80      12d

修改host,使用任意nodeip登陆都可以

作者:likaifei

出处:https://www.cnblogs.com/likaifei/p/16709332.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   adai_kfl  阅读(1111)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示