部署环境
k8s 版本1.18
主机名 | IP |
---|---|
master | 192.168.0.10 |
node01 | 192.168.0.11 |
nfs | 192.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 4月 2 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