Win10 docker desktop Kubernetes v1.19.7部署Zabbix
1、github下載kubernetes.yaml (Zabbix 5.2 release prepare),直接建立資源,有報錯:
$ kubectl create -f zabbix.yaml
namespace/zabbix created
service/mysql-server created
service/zabbix-proxy-sqlite3 created
service/zabbix-proxy-mysql created
service/zabbix-java-gateway created
service/zabbix-agent created
replicationcontroller/zabbix-web created
replicationcontroller/mysql-server created
replicationcontroller/zabbix-server created
replicationcontroller/zabbix-proxy-sqlite3 created
replicationcontroller/zabbix-proxy-mysql created
replicationcontroller/zabbix-java-gateway created
daemonset.apps/zabbix-agent created
horizontalpodautoscaler.autoscaling/zabbix-web created
persistentvolume/zabbix-mysql-data created
persistentvolumeclaim/zabbix-mysql-data-claim created
secret/db-secret created
Error from server (Invalid): error when creating "zabbix.yaml": Service "zabbix-web" is invalid: spec.externalIPs[0]: Invalid value: "<Specify external IP here>": must be a valid IP address, (e.g. 10.9.8.7)
Error from server (Invalid): error when creating "zabbix.yaml": Service "zabbix-server" is invalid: spec.externalIPs[0]: Invalid value: "<Specify external IP here>": must be a valid IP address, (e.g. 10.9.8.7)
$ kubectl get pod,service
NAME READY STATUS RESTARTS AGE
pod/mysql-server-8hnv2 0/1 Pending 0 2m17s
pod/zabbix-agent-9cg2f 1/1 Running 0 2m17s
pod/zabbix-java-gateway-5tfkj 1/1 Running 0 2m17s
pod/zabbix-proxy-mysql-pxfrg 1/1 Running 0 2m17s
pod/zabbix-proxy-sqlite3-vqltl 1/1 Running 0 2m17s
pod/zabbix-server-6lfzq 1/2 Running 0 2m17s
pod/zabbix-web-pcgdg 0/1 Running 1 2m17s
pod/zabbix-web-qdqwg 0/1 Running 0 2m17s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mysql-server ClusterIP 10.103.160.211 <none> 3306/TCP 2m17s
service/zabbix-agent ClusterIP 10.99.68.135 <none> 10050/TCP 2m17s
service/zabbix-java-gateway ClusterIP 10.98.194.191 <none> 10052/TCP 2m17s
service/zabbix-proxy-mysql ClusterIP 10.103.8.208 <none> 10051/TCP,162/UDP 2m17s
service/zabbix-proxy-sqlite3 ClusterIP 10.109.172.46 <none> 10051/TCP,162/UDP 2m17s
這裡services "zabbix-web" 和 "zabbix-server"not found
$ kubectl describe pod mysql-server-8hnv2
......
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 4m6s default-scheduler persistentvolumeclaim "zabbix-mysql-data-claim" not found
Warning FailedScheduling 4m6s default-scheduler persistentvolumeclaim "zabbix-mysql-data-claim" not found
Warning FailedScheduling 4m4s default-scheduler 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
2、排查一:修改 kubernetes.yaml
1)將Service資源物件zabbix-web和mysql-server的預設type:ClusterIP( 叢集內的私有ip)修改為type: NodePort( 在node 埠暴露服務,將向該埠的流量匯入到kube-proxy,然後由kube-proxy進一步導給對應的pod),否則Win10主機無法訪問。
2)註釋掉externalIPs相關項:
在Service的Spec中,
當把IP地址填入
externalIPs欄位後,
kube-proxy
會增加對應的
iptables
規則, 當有以對應IP為目標的流量傳送到Node節點時,
iptables
將進行NAT,將流量轉發到對應的服務上,
可以實現給Service繫結外部IP的效果。
3) 註釋掉 ReplicationController資源物件 mysql-server的volumes:和volumeMounts:相關項,解決該Pod/mysql-server 狀態Pending的問題。
4)為了能登入mysql,修改List/Secret資源物件db-secret的db-root-pass、db-zbx-user、db-zbx-pass密碼為"emFiYml4",即zabbix(由命令得到:echo -n 'zabbix' | base64)
3、完成以上步驟,pod/mysql-server恢復running,但是pod/zabbix-server出現 CrashLoopBackOff狀態!
$ kubectl get pod,service
NAME READY STATUS RESTARTS AGE
pod/mysql-server-xvtbn 1/1 Running 0 2m42s
pod/zabbix-agent-7dks2 1/1 Running 0 2m42s
pod/zabbix-java-gateway-bmn46 1/1 Running 0 2m42s
pod/zabbix-proxy-mysql-47wh6 1/1 Running 0 2m42s
pod/zabbix-proxy-sqlite3-qsxcb 1/1 Running 0 2m42s
pod/zabbix-server-sj584 1/2 CrashLoopBackOff 3 2m42s
pod/zabbix-web-8rbmc 1/1 Running 0 2m42s
pod/zabbix-web-9znhb 1/1 Running 0 2m42s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mysql-server NodePort 10.110.160.252 <none> 3306: 32130/TCP 2m42s
service/zabbix-agent ClusterIP 10.111.34.4 <none> 10050/TCP 2m42s
service/zabbix-java-gateway ClusterIP 10.99.175.58 <none> 10052/TCP 2m42s
service/zabbix-proxy-mysql ClusterIP 10.101.232.209 <none> 10051/TCP,162/UDP 2m42s
service/zabbix-proxy-sqlite3 ClusterIP 10.105.63.0 <none> 10051/TCP,162/UDP 2m42s
service/zabbix-server ClusterIP 10.108.177.103 <none> 10051/TCP,162/UDP 2m42s
service/zabbix-web NodePort 10.99.166.170 <none> 80: 31153/TCP,443:32148/TCP 2m42s
而且瀏覽器localhost: 31153,出現Database error不能選擇配置檔案報錯。
4、 排查二
$ kubectl logs zabbix-server-sj584 -c zabbix-server
......
8:20210314:123345.722 cannot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?)
$mysql -uzabbix -pzabbix -h 127.0.0.1 -P 32130 zabbix
mysql> use zabbix
Database changed
mysql> select *from users;
Empty set (0.02 sec)
判斷原因是雖然mysql中建立了表結構,但是沒有資料。下載原始碼包zabbix-5.2.5.tar.gz,在zabbix-5.2.5.tar.gz\zabbix-5.2.5\database\mysql解壓出data.sql,匯入zabbix資料庫中:
$ mysql -uzabbix -pzabbix -h 127.0.0.1 -P 32130 zabbix < data.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
檢查 pod/zabbix-server-sj584狀態恢復running, 瀏覽器localhost: 31153出現正常登入介面(Admin/zabbix)。
5、後續需解決資料庫持久化儲存的問題
在Kubernetes Pod中的容器系統儲存檔案是臨時的,Pod如果異常重啟將會恢復到映象的原始狀態從而會丟失所有的狀態包括系統儲存檔案,或者同一個Pod中多個容器需要共享資料。資料卷誕生就是為了解決這一類資料持久化及資料共享的場景,並與容器的生命週期分離開。
PV(PersistentVolume): PV是定義儲存資料的方式,例如儲存類、儲存實現等,是由叢集管理員定義的叢集資源中的物件。
PVC (PersistentVolumeClaim): 是宣告定義儲存資料使用的請求,被掛載到Pod中進行使用。通常由開發人員進行配置使用,不用關心資料儲存底層具體的實現方式,只關心與業務相關的資料儲存大小,訪問方式等。
PV與PVC是一對一關係,一個PVC只能繫結到一個PV,如果PV被繫結後,其他PVC則無法在使用此PV。
$ kubectl get pv -o wide
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
VOLUMEMODE
zabbix-mysql-data 1Gi RWO Retain Available 33m Filesystem
Retain(保留) 當PVC與PV解除繫結關係後PV處於保留狀態,如果有同樣宣告的PVC時PV將繼續可以被繫結使用,期間資料不會被刪除。
ReadWriteOnce(RWO)允許被單個節點以讀寫的模式進行掛載。 ReadWriteMany(RWX)允許被多個節點以讀寫的模式進行掛載。
PV Phase 執行狀態:Available PV處於可用狀態,可以被PVC繫結。
Bound PV已被PVC所繫結。
Released PVC已刪除,但PV還未被叢集回收。 Failed PV自動回收失敗。
$ kubectl describe pv //
檢視PV詳細資訊
檢視PVC詳細資訊
$ kubectl describe pvc
Name: zabbix-mysql-data-claim
Namespace: zabbix
StorageClass: hostpath
Status: Pending
Volume: zabbix-mysql-data
Labels: <none>
Annotations: <none>
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 0
Access Modes:
VolumeMode: Filesystem
Mounted By: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning VolumeMismatch 2m49s (x44 over 42m) persistentvolume-controller Cannot bind to requested volume "zabbix-mysql-data": storageClassName does not match
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7970627/viewspace-2762773/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Docker部署zabbix3.2監控系統Docker
- Kubernetes&Docker叢集部署Docker
- zabbix server 部署Server
- 【zabbix】zabbix遠端安裝部署
- Windows安裝Docker Desktop並在WSL2整合KubernetesWindowsDocker
- Zabbix安裝部署
- Mac上使用Docker Desktop啟動Kubernetes,踩坑後才搞定MacDocker
- 用WSL2+Docker Desktop部署InLong的坑和經驗Docker
- 在玩客雲上透過docker部署zabbix(PostgreSQL資料庫)DockerSQL資料庫
- 在筆記本Win10中基於WSL+Docker Desktop安裝Kubernetes和Istio、Knative筆記Win10Docker
- Docker Desktop 下載Docker
- Docker實踐(6)—CentOS7上部署KubernetesDockerCentOS
- 如何在 Windows 使用 Podman Desktop 取代 Docker DesktopWindowsDocker
- Ubuntu 安裝 Docker DesktopUbuntuDocker
- Docker Desktop啟動報錯:Failed to set version to docker-desktop: exit code: -1DockerAI
- Zabbix監控安裝部署
- 詳解zabbix安裝部署
- 【Zabbix】CentOS6.9系統下部署Zabbix-server 3.0CentOSServer
- JKube幫助Java應用Docker化部署到KubernetesJavaDocker
- zabbix agent 3.0部署文件 安裝部署
- Docker Desktop for Windows的安裝DockerWindows
- Windows Docker Desktop安裝教程WindowsDocker
- Docker映像的Zabbix元件安裝Docker元件
- zabbix server & proxy部署操作過程Server
- zabbix系統監控部署(上)
- Zabbixserver環境部署(LNMP+ZABBIX)ServerLNMP
- Windows10的Docker Desktop使用WindowsDocker
- win11 安裝desktop dockerDocker
- docker desktop清理wsl虛擬磁碟Docker
- 【Docker】使用docker部署 mysqlDockerMySql
- zabbix-server-pgsql docker映象說明ServerSQLDocker
- 部署一臺Zabbix Proxy代理服務
- 阿里雲ECS部署Grafana接入zabbix阿里Grafana
- 基於 Docker for MAC 的 Kubernetes 本地環境搭建與應用部署DockerMac
- 基於Docker和Kubernetes構建的部署管理和叢集管理Docker
- Win10 下安裝 docker,部署 Web 應用Win10DockerWeb
- redmine docker部署Docker
- docker 部署 postgresDocker