[k8s]nfs作statefulset存儲圖解

nfs服務器的配置

參考: https://github.com/gregbkr/kubernetes-kargo-logging-monitoring#8-data-persistence

mkdir -p /export/centos
chmod -R 777 /export/centos

cat /etc/exports
/export/centos *(rw,insecure,sync,no_subtree_check,no_root_squash) 

測試掛載

nfs作爲stateful存儲

nfs服務端目錄:

[root@node135 centos]# ll
total 0
drwxr-xr-x 2 root root 21 Sep  6 15:03 default-test-claim-pvc-2ba54d52-92ce-11e7-8612-6eed15cdfa93
創建nfs-client-provisioner,即deployment後:
[root@node131 ~]# kubectl get po
NAME                                     READY     STATUS    RESTARTS   AGE
nfs-client-provisioner-168516604-lwp9q   1/1       Running   0          36m

創建storageclass後
[root@node131 ~]# kubectl get sc
NAME                  TYPE
managed-nfs-storage   fuseim.pri/ifs

創建test-claim pvc後:
[root@node131 ~]# kubectl get pvc
NAME         STATUS    VOLUME                                                        CAPACITY   ACCESSMODES   STORAGECLASS          AGE
test-claim   Bound     default-test-claim-pvc-2ba54d52-92ce-11e7-8612-6eed15cdfa93   1Mi        RWX           managed-nfs-storage   35m

創建test-pod後:
[root@node131 ~]# kubectl get pv
NAME                                                          CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM                STORAGECLASS          REASON    AGE
default-test-claim-pvc-2ba54d52-92ce-11e7-8612-6eed15cdfa93   1Mi        RWX           Delete          Bound     default/test-claim   managed-nfs-storage             35m

操刀實戰

第一步創建nfs底層驅動來對接nfs server

本質:實際上是把pv掛載成class供應卷

[root@node131 nfs]# cat nfs-stateful.yaml 
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccount: nfs-provisioner
      containers:
        - name: nfs-client-provisioner
          image: quay.io/kubernetes_incubator/nfs-provisioner:latest
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 192.168.6.135
            - name: NFS_PATH
              value: /export/centos
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.6.135
            path: /export/centos
[root@node131 nfs]# cat nfs-class.yaml 
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: fuseim.pri/ifs 
[root@node131 nfs-client]# cat nfs-nginx.yaml 
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx1"
  replicas: 2
  volumeClaimTemplates:
  - metadata:
      name: test
      annotations:
        volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      serviceAccount: nfs-provisioner
      containers:
      - name: nginx1
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - mountPath: "/mnt"
          name: test

pod名字觀察

[root@node131 nfs-client]# kubectl get po
NAME                                     READY     STATUS    RESTARTS   AGE
nfs-client-provisioner-168516604-lwp9q   1/1       Running   0          41m
web-0                                    1/1       Running   0          37s
web-1                                    1/1       Running   0          35s

nfs服務器目錄觀察

[root@node135 centos]# ll
total 0
drwxr-xr-x 2 root root 21 Sep  6 15:03 archived-default-test-claim-pvc-2ba54d52-92ce-11e7-8612-6eed15cdfa93
drwxr-xr-x 2 root root  6 Sep  6 15:19 default-test-web-0-pvc-b479d66b-92d3-11e7-8612-6eed15cdfa93
drwxr-xr-x 2 root root  6 Sep  6 15:19 default-test-web-1-pvc-b5a7b634-92d3-11e7-8612-6eed15cdfa93
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章