k8s部署zabbix监控系统
zabbix简介
Zabbix 是一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。Zabbix 使用 MySQL、PostgreSQL、SQLite、Oracle 或 IBM DB2 储存资料。Server 端基于 C语言、Web 前端则是基于 PHP 所制作的。Zabbix 可以使用多种方式监视。可以只使用 Simple Check 不需要安装 Client 端,亦可基于 SMTP 或 HTTP 等各种协定做死活监视。在客户端如 UNIX、Windows 中安装 Zabbix Agent 之后,可监视 CPU 负荷、网络使用状况、硬盘容量等各种状态。而就算没有安装 Agent 在监视对象中,Zabbix 也可以经由 SNMP、TCP、ICMP检查,以及利用 IPMI、SSH、telnet 对目标进行监视。另外,Zabbix 包含 XMPP 等各种 Item 警示功能。
zabbix特性
安装部署简单
web可视化管理界面
开源
分布式
实时绘图
实验环境
Kubernetes版本1.16.0
zabbix版本4.4.5(官方镜像)
mysql版本8.0.19(官方镜像)
- (猜你喜欢:使用zabbix监控K8s出现异常POD的解决方法)
zabbix k8s部署
部署mysql(采用hostpath做数据持久化)
1.创建pv
vim mysql-pv.yaml
kind: PersistentVolumeapiVersion: v1metadata: name: mysql-pv-volume labels: type: localspec: storageClassName: manual capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data"---apiVersion: v1kind: PersistentVolumeClaimmetadata: name: mysql-pv-claimspec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
2.创建mysql配置文件(configMap)
(猜你喜欢:zabbix监控k8s出现的pod error status的解决方法)
vim mysql-config.yaml
apiVersion: v1kind: ConfigMapmetadata: name: mysql-configdata: custom.cnf: | [mysqld] default_storage_engine=innodb skip_external_locking skip_host_cache skip_name_resolve default_authentication_plugin=mysql_native_password
3.创建mysql密码(secret)
[root@k8s-master-01 mysql]# echo -n password|base64cGFzc3dvcmQ=vim mysql-secret.yaml
apiVersion: v1kind: Secretmetadata: name: mysql-user-pwddata: mysql-root-pwd: cGFzc3dvcmQ=
4.创建mysql部署文件
vim mysql-deploy.yaml
apiVersion: v1kind: Servicemetadata: name: mysqlspec: type: NodePort ports: - port: 3306 nodePort: 30006 protocol: TCP targetPort: 3306 selector: app: mysql---apiVersion: apps/v1kind: Deploymentmetadata: name: mysqlspec: replicas: 1 selector: matchLabels: app: mysql strategy: type: Recreate template: metadata: labels: app: mysql spec: containers: - image: mysql name: mysql imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-user-pwd key: mysql-root-pwd ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-config mountPath: /etc/mysql/conf.d/ - name: mysql-persistent-storage mountPath: /var/lib/mysql - name: timezone mountPath: /etc/localtime volumes: - name: mysql-config configMap: name: mysql-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim
5.使用kubectl命令及以上yaml文件部署mysql
[root@k8s-master-01 mysql]# kubectl apply -f ./ configmap/mysql-config createdservice/mysql createddeployment.apps/mysql createdpersistentvolume/mysql-pv-volume createdpersistentvolumeclaim/mysql-pv-claim createdsecret/mysql-user-pwd created
部署zabbix-server
vim zabbix-server-deploy.yaml
apiVersion: v1kind: Servicemetadata: name: zabbixserverspec: type: NodePort ports: - port: 10051 nodePort: 30051 protocol: TCP targetPort: 10051 selector: app: zabbix-server---apiVersion: apps/v1kind: Deploymentmetadata: name: zabbix-serverspec: replicas: 1 selector: matchLabels: app: zabbix-server template: metadata: labels: app: zabbix-server spec: containers: - name: zabbix-server image: zabbix/zabbix-server-mysql imagePullPolicy: IfNotPresent ports: - containerPort: 10051 name: server protocol: TCP readinessProbe: tcpSocket: port: server initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: tcpSocket: port: server initialDelaySeconds: 15 periodSeconds: 20 env: - name: DB_SERVER_HOST value: "mysql" - name: MYSQL_USER value: "zabbix" - name: MYSQL_PASSWORD value: "zabbix" - name: MYSQL_DATABASE value: "zabbix" - name: ZBX_CACHESIZE value: "1024M" - name: ZBX_TRENDCACHESIZE value: "1024M" - name: ZBX_HISTORYCACHESIZE value: "2048M" - name: ZBX_HISTORYINDEXCACHESIZE value: "1024M" - name: ZBX_STARTTRAPPERS value: "5" - name: ZBX_STARTPREPROCESSORS value: "10" - name: ZBX_STARTDBSYNCERS value: "10" - name: DB_SERVER_PORT value: "3306" - name: zabbix-agent image: zabbix/zabbix-agent imagePullPolicy: Always ports: - containerPort: 10050 name: zabbix-agent env: - name: ZBX_HOSTNAME value: "Zabbix server" - name: ZBX_SERVER_HOST value: "127.0.0.1" - name: ZBX_PASSIVE_ALLOW value: "true" - name: ZBX_STARTAGENTS value: "3" - name: ZBX_TIMEOUT value: "10" securityContext: privileged: true
部署zabbix-web
vim zabbix-web.yaml
apiVersion: v1kind: Servicemetadata: name: zabbix-webspec: type: NodePort ports: - port: 80 protocol: TCP nodePort: 30080 targetPort: 80 selector: app: zabbix-web---apiVersion: apps/v1kind: Deploymentmetadata: name: zabbix-webspec: replicas: 2 selector: matchLabels: app: zabbix-web template: metadata: labels: app: zabbix-web spec: containers: - image: zabbix/zabbix-web-nginx-mysql name: zabbix-web imagePullPolicy: IfNotPresent ports: - containerPort: 80 name: web protocol: TCP env: - name: DB_SERVER_HOST value: "mysql" - name: ZBX_SERVER_HOST value: "zabbixserver" - name: MYSQL_USER value: "zabbix" - name: MYSQL_PASSWORD value: "zabbix" - name: TZ value: "Asia/Shanghai"
使用kubectl命令及以上yaml文件部署
[root@k8s-master-01 zabbix]# kubectl apply -f ./service/zabbixserver createddeployment.apps/zabbix-server createdservice/zabbix-web createddeployment.apps/zabbix-web created
查看部署的组件状态
[root@k8s-master-01 zabbix]# kubectl get deploy,pod,svc,cm,secret,pv,pvc -o wideNAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTORdeployment.apps/mysql 1/1 1 1 15m mysql mysql app=mysqldeployment.apps/zabbix-server 1/1 1 1 3m23s zabbix-server,zabbix-agent zabbix/zabbix-server-mysql,zabbix/zabbix-agent app=zabbix-serverdeployment.apps/zabbix-web 2/2 2 2 3m23s zabbix-web zabbix/zabbix-web-nginx-mysql app=zabbix-webNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESpod/mysql-ffcc44677-g2tlr 1/1 Running 0 15m 10.244.0.126 k8s-node-01pod/zabbix-server-75cdd8865-rnxhx 2/2 Running 0 3m24s 10.244.0.127 k8s-node-01 pod/zabbix-web-856989975-8k45c 1/1 Running 0 3m23s 10.244.0.128 k8s-node-01 pod/zabbix-web-856989975-hxdfl 1/1 Running 0 3m24s 10.244.1.118 k8s-node-02 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTORservice/kubernetes ClusterIP 10.0.0.1 443/TCP 88d service/mysql NodePort 10.0.0.15 3306:30006/TCP 15m app=mysqlservice/zabbix-web NodePort 10.0.0.189 80:30080/TCP 3m23s app=zabbix-webservice/zabbixserver NodePort 10.0.0.234 10051:30051/TCP 3m23s app=zabbix-serverNAME DATA AGEconfigmap/mysql-config 1 15mNAME TYPE DATA AGEsecret/default-token-7qhlz kubernetes.io/service-account-token 3 88dsecret/mysql-user-pwd Opaque 1 15msecret/tls-secret kubernetes.io/tls 2 61dNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODEpersistentvolume/mysql-pv-volume 20Gi RWO Retain Bound default/mysql-pv-claim manual 15m FilesystemNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODEpersistentvolumeclaim/mysql-pv-claim Bound mysql-pv-volume 20Gi RWO manual 15m Filesystem
通过浏览器访问测试
浏览器地址栏输入任意node节点的ip:30080
输入用户名及密码访问
默认用户:Admin默认密码:zabbix
至此k8s部署zabbix-server测试完成。
本文暂不展开说明k8s基础环境部署,后期再专门就k8s基础环境部署做专门说明。