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 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!