系統部署流程
使⽤kubernetes部署wordpress+MySQL, 並利⽤NFS去保存我們容器的源代碼以及DB數據。搭建好nfs后任意node上的Pod訪問db或者業務代碼都會有相同的效果,數據只存儲一份。
步驟:
- 所有節點搭建nfs⽂件系統
- 創建PersistentVolumeClaims(PVC)和PersistentVolume(PV)
- 創建service
- 創建Secret(注⼊MySql密碼等)
- 創建confifigMap(初始化數據庫)
- 部署MySQL容器組(Deployment)
- 部署WordPress容器組(Deployment)
在K8S上部署⼀個WordPress和MySQL應⽤,其中WordPress和MySQL都使⽤PersistentVolume 和 PersistentVolumeClaim 存儲數據。
PersistentVolume 是集群中可⽤的⼀⽚存儲空間,通常由集群管理員⼿⼯提供,或者由Kubernetes 使⽤ StorageClass ⾃動提供。
PersistentVolumeClaim 代表了⽤戶(應⽤程序)對存儲空間的需求,此需求可由PersistentVolume 滿⾜。
PersistentVolume 和 PersistentVolumeClaim 都是獨⽴於 Pod 的⽣命周期,可⽤於在Pod 重啟、重新調度、甚⾄刪除之后保存數據。⼀句話表示PersistentVolume 和PersistentVolumeClaim 就是,我有多少,你要多少
nfs文件系統搭建
安裝nfs並設置開機啟動
#集群所有節點上執行nfs文件系統的安裝和啟動 [root@k8s-01 ~]# yum install nfs-utils -y [root@k8s-01 ~]# systemctl enable nfs-server && systemctl start nfs-server #啟動完成后查看nfs啟動狀態 [root@k8s-01 ~]# systemctl status nfs-server ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled) Drop-In: /run/systemd/generator/nfs-server.service.d └─order-with-mounts.conf Active: active (exited) since Mon 2021-10-04 17:51:47 CST; 16h ago Process: 1399 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS) Process: 1378 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS) Process: 1375 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 1378 (code=exited, status=0/SUCCESS) Tasks: 0 Memory: 0B CGroup: /system.slice/nfs-server.service Oct 04 17:51:47 k8s-01 systemd[1]: Starting NFS server and services... Oct 04 17:51:47 k8s-01 systemd[1]: Started NFS server and services.
master節點創建nfs掛載點
#創建/home/nfstest測試路徑,測試nfs文件系統 [root@k8s-01 home]# mkdir nfstest #修改/home/nfstest路徑權限 #no_subtree_check不檢查其父目錄的權限,rw表示權限 讀寫,sync表示同步寫入,no_root_squash表示worknode以root訪問時賦予本地root權限 [root@k8s-01 home]# chown nfsnobody:nfsnobody /home/nfstest [root@k8s-01 home]# echo -e "/home/nfstest *(rw,sync,no_subtree_check,no_root_squash)" > /etc/exports #應用配置 [root@k8s-01 home]# exportfs -a
work node進行nfs掛載驗證
#worknode上創建本地掛載點 [root@k8s-02 ~]# mkdir /home/nfstest #將worknode本地掛載點與master上的nfs掛載點映射 [root@k8s-02 ~]# mount -t nfs 192.168.188.131:/home/nfstest /home/nfstest #本地掛載點修改屬主信息 [root@k8s-02 ~]# chown nfsnobody:nfsnobody /home/nfstest #檢查掛載是否成功 [root@k8s-02 ~]# df -h|grep /home/nfstest 192.168.188.131:/home/nfstest 16G 7.2G 8.9G 45% /home/nfstest #master節點上創建文件 [root@k8s-01 nfstest]# echo "test nfs on k8s-01 master" >> nfstest.file [root@k8s-01 nfstest]# cat nfstest.file test nfs on k8s-01 master #worknode上對應掛載點查看此文件 [root@k8s-02 ~]# cat /home/nfstest/nfstest.file test nfs on k8s-01 master
配置mysql和wordpress的nfs文件系統
#master節點創建nfs文件主目錄以及相關設置 [root@k8s-01 ~]# mkdir -p /kube/mysql-db [root@k8s-01 ~]# mkdir -p /kube/wordpress [root@k8s-01 ~]# chown nfsnobody:nfsnobody /kube/mysql-db [root@k8s-01 ~]# chown nfsnobody:nfsnobody /kube/wordpress [root@k8s-01 ~]# vim /etc/exports /kube/wordpress *(rw,sync,no_subtree_check,no_root_squash) /kube/mysql-db *(rw,sync,no_subtree_check,no_root_squash) [root@k8s-01 ~]# exportfs -a #worknode上創建掛載點,作相應設置,並通過nfs將掛載點掛載到master對應的目錄上,k8s-01是master節點的主機名 [root@k8s-02 ~]# mkdir -p /kube/mysql-db You have new mail in /var/spool/mail/root [root@k8s-02 ~]# mkdir -p /kube/wordpress [root@k8s-02 ~]# chown nfsnobody:nfsnobody /kube/mysql-db [root@k8s-02 ~]# chown nfsnobody:nfsnobody /kube/wordpress [root@k8s-02 ~]# mount -t nfs k8s-01:/kube/wordpress /kube/wordpress [root@k8s-02 ~]# mount -t nfs k8s-01:/kube/mysql-db /kube/mysql-db [root@k8s-02 ~]# df -h|grep k8s-01 k8s-01:/kube/wordpress 16G 6.0G 11G 38% /kube/wordpress k8s-01:/kube/mysql-db 16G 6.0G 11G 38% /kube/mysql-db