kubernetes之NFS動態提供Kubernetes後端存儲卷

StorageClass做爲對存儲資源的抽象定義, 對用戶設置的NFS申請屏蔽後端存儲的細節, 一方面減小了用戶對於存儲資源細節的關注, 另外一方面減輕了管理員手工管理pv的工做, 由系統自動完成pv的建立和綁定 StorageClass自己是一種資源對象, 不提供pv的建立, 這裏以NFS共享存儲爲例, 使用nfs-client-provisioner組件鏈接nfs服務器以及pv的建立 #####案例 1.安裝nfs服務:省略 2.克隆nfs-client-provisioner組件代碼html

git clone https://github.com/kubernetes-incubator/external-storage.git
cd external-storage/nfs-client/deploy

3.修改deployment文件, 主要修改nfs服務器地址和nfs提供的目錄nginx

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: registry.cn-hangzhou.aliyuncs.com/wangfang-dev/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 192.168.1.48
            - name: NFS_PATH
              value: /data/nfs
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.1.48
            path: /data/nfs

4.StorageClass 此處能夠不修改,或者修改provisioner的名字,須要與上面的deployment的PROVISIONER_NAME名字一致。 cat class.yamlgit

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: default
provisioner: fuseim.pri/ifs

5.應用建立github

kubectl apply -f deployment.yaml 
kubectl apply -f class.yaml 
kubectl apply -f rbac.yaml

7.建立pvc和deployment資源後端

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-deployment-pvc
  annotations:
    volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default 
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.12
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: html 
          mountPath: /usr/share/nginx/html 
      volumes:
      - name: html 
        persistentVolumeClaim: 
          claimName: nginx-deployment-pvc

8.驗證 自動建立pv PV以 ${namespace}-${pvcName}-${pvName}的命名格式提供(在NFS服務器上) PV回收的時候以 archieved-${namespace}-${pvcName}-${pvName} 的命名格式(在NFS服務器上)api

相關文章
相關標籤/搜索