淺析kubernetes創建Pv、Pvc、Deployment
阿新 • • 發佈:2018-07-24
quest 一個 aml bound ref volume minor repl rec 淺析kubernetes創建Pv、Pvc、Deployment
- 基本環境
#系統環境 cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) #k8s client 和 server 的版本信息 kubectl version Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:55:54Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.1", GitCommit:"d4ab47518836c750f9949b9e0d387f20fb92260b", GitTreeState:"clean", BuildDate:"2018-04-12T14:14:26Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
- 創建有狀態服務的操作順序
#值得註意的是創建順序非常關鍵 (1)Volume (2)Persistent Volume (3)Persistent Volume Claim (4)Service (5)StatefulSet
- 創建PV
我這裏使用的是NFS服務,點擊NFS部署及優化,搭建自己的NFS服務。#註意兩點: (1)請先部署好自己的NFS服務; (2)在使用共享之前,必須運行自己的NFS服務器並運行共享。
##持久性存儲卷 apiVersion: v1 kind: PersistentVolume metadata: name: data-nfs ##名字任意取 labels: type: nfs spec: capacity: storage: 8Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle mountOptions: - hard - nfsvers=4.1 nfs: path: /data ##NFS服務器上的共享目錄 server: 192.168.246.168 ##NFS服務器的ip地址
- 創建PVC
##pvc的yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: datadir-nginx-0 spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi selector: matchLabels: type: nfs
#說明: 創建PVC的名稱和Deployment中的名稱要對應上,要不然Deployment中的Pod就肯定 創建不成功!簡單說一下PVC和Deployment中的命名的規律: 如上面創建PVC的yaml文件,我們在這裏創建了一個叫做datadir-nginx-0的PVC, 粗略一看這個名字有點奇怪,因為這個yaml文件中並沒有提到PV的名字,所以PV和PVC 是怎麽bound起來的呢?是通過labels標簽下的type: nfs鍵值對來進行匹配的,我們 在創建PV時指定了label的鍵值對,在PVC裏通過selector可以指定label。 關於這個PVC的名稱定義:datadir-nginx-0,我們需要看一下下面 創建Deployment中的yaml:
- 創建Deployment
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 volumeMounts: - mountPath: "/wtf" name: datadir volumes: - name: datadir persistentVolumeClaim: claimName: datadir-nginx-0 volumeClaimTemplates: - metadata: name: datadir labels: type: nfs annotations: volume.alpha.kubernetes.io/storage-class: anything spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi
#說明: 接著說PVC的名稱定義,首先我們看到Deployment的name叫nginx-deployment,設置 的replicas為1個,volumeMounts和volumeClaimTemplates的name必須相同,為datadir, 所以Deployment創建的第一個Pod的name應該為nginx-0,第二個為nginx-1,依此類推, 這裏只定義了一個replicas,所以pod的名字是nginx-0。 這裏Deployment中的Pod與PVC之間的綁定關系是通過名稱來匹配的,即: PVC_name === volumeClaimTemplates_name + "-" + pod_name
淺析kubernetes創建Pv、Pvc、Deployment