Kubernetes部署NFS PV數(shù)據(jù)持久化存儲

準(zhǔn)備

所有k8s節(jié)點需要安裝nfs服務(wù)
一臺nfs服務(wù)器提供存儲
根據(jù)需求創(chuàng)建數(shù)據(jù)共享目錄


image.png

配置對所有k8s節(jié)點的 授權(quán)
檢查是否已經(jīng)授權(quán)
showmount -e 192.168.100.204


image.png

之后不需要掛載,直接開始使用nfs的存儲創(chuàng)建PV和PVC。

PersistentVolume(PV)是指由集群管理員配置提供的某存儲系統(tǒng)上的段存儲空間伤靠,它是對底層共享存儲的抽象,將共享存儲作為種可由用戶申請使的資源查吊,實現(xiàn)了“存儲消費”機制。通過存儲插件機制湖蜕,PV支持使用多種網(wǎng)絡(luò)存儲系統(tǒng)或云端存儲等多種后端存儲系統(tǒng),例如宋列,NFS昭抒、RBD和Cinder等。PV是集群級別的資源炼杖,不屬于任何名稱空間灭返,用戶對PV資源的使需要通過PersistentVolumeClaim(PVC)提出的使申請(或稱為聲明)來完成綁定,是PV資源的消費者坤邪,它向PV申請?zhí)囟ù笮〉目臻g及訪問模式(如rw或ro)熙含,從創(chuàng)建出PVC存儲卷,后再由Pod資源通過PersistentVolumeClaim存儲卷關(guān)聯(lián)使艇纺,如下圖:

image
image.png
 二 下載NFS插件
GitHub地址:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy
1怎静、下載所需文件
for file in class.yaml deployment.yaml rbac.yaml; do wget https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/$file; done

2、創(chuàng)建RBAC授權(quán)
# cat rbac.yaml
kind: ServiceAccount
apiVersion: v1
metadata:
  name: nfs-client-provisioner
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

3黔衡、創(chuàng)建Storageclass類
# cat class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
  archiveOnDelete: "false"

4蚓聘、創(chuàng)建NFS的deployment,修改相應(yīng)的NFS服務(wù)器IP及掛載路徑
# cat deployment.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-client-provisioner
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: quay.io/external_storage/nfs-client-provisioner:v2.0.0
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 192.168.1.100
            - name: NFS_PATH
              value: /huoban/k8s
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.1.100
            path: /huoban/k8s


image.png
三盟劫、創(chuàng)建一個PV動態(tài)供給應(yīng)用實例
例如:創(chuàng)建一個nginx動態(tài)獲取PV

# cat nginx.yaml
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      imagePullSecrets:
      - name: nginx
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "managed-nfs-storage"
      resources:
        requests:
          storage: 1Gi

啟動之后我們可以看到一下信息
# kubectl get pod,pv,pvc
pod/coredns-68c964545b-mszkt               0/1     Evicted   0          11d
pod/coredns-68c964545b-xzszx               1/1     Running   14         11d
pod/kube-apiserver-ha-proxy-k8s-master-1   1/1     Running   19         23d
pod/kube-apiserver-ha-proxy-k8s-node-1     1/1     Running   17         23d
pod/kube-apiserver-ha-proxy-k8s-node-2     1/1     Running   8          23d
pod/kube-flannel-ds-amd64-588x5            1/1     Running   1          3d19h
pod/kube-flannel-ds-amd64-jfv4h            1/1     Running   36         23d
pod/kube-flannel-ds-amd64-mkjqk            1/1     Running   5          10d
pod/metrics-server-8459f8db8c-h8bn7        2/2     Running   55         13d
pod/my-web-0                               1/1     Running   1          2d18h
pod/my-web-1                               1/1     Running   1          2d18h
pod/my-web-2                               1/1     Running   1          2d18h
pod/my-web-3                               1/1     Running   1          2d18h

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS          REASON   AGE
persistentvolume/pvc-122aef78-c633-4eb0-8edf-4d9a5fa633ac   1Gi        RWO            Delete           Bound    kube-system/www-my-web-0          managed-nfs-storage            2d18h
persistentvolume/pvc-6d3698d5-5e4d-48f8-bb86-c0a300c25b2a   1Gi        RWO            Delete           Bound    kube-system/www-my-web-2          managed-nfs-storage            2d18h
persistentvolume/pvc-77c8a432-7ee5-4b0d-afae-94a88e0a6113   5Gi        RWX            Delete           Bound    kube-system/managed-nfs-storage   managed-nfs-storage            2d18h
persistentvolume/pvc-77e21151-70cc-4185-ad4b-12cf39c4128c   1Gi        RWO            Delete           Bound    kube-system/www-my-web-1          managed-nfs-storage            2d18h
persistentvolume/pvc-cf0c4a85-4d09-4918-b63c-a40c11c1b658   1Gi        RWO            Delete           Bound    kube-system/www-my-web-3          managed-nfs-storage            2d18h

NAME                                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
persistentvolumeclaim/managed-nfs-storage   Bound    pvc-77c8a432-7ee5-4b0d-afae-94a88e0a6113   5Gi        RWX            managed-nfs-storage   2d18h
persistentvolumeclaim/www-my-web-0          Bound    pvc-122aef78-c633-4eb0-8edf-4d9a5fa633ac   1Gi        RWO            managed-nfs-storage   2d18h
persistentvolumeclaim/www-my-web-1          Bound    pvc-77e21151-70cc-4185-ad4b-12cf39c4128c   1Gi        RWO            managed-nfs-storage   2d18h
persistentvolumeclaim/www-my-web-2          Bound    pvc-6d3698d5-5e4d-48f8-bb86-c0a300c25b2a   1Gi        RWO            managed-nfs-storage   2d18h
persistentvolumeclaim/www-my-web-3          Bound    pvc-cf0c4a85-4d09-4918-b63c-a40c11c1b658   1Gi        RWO            managed-nfs-storage   2d18h
現(xiàn)在夜牡,我們在NFS服務(wù)器上也可以看到自動生成了3個掛載目錄,單pod刪除之后數(shù)據(jù)還會存在
[10:41:55root@k8s-master-1 /nfs/data]#ll
total 0
drwxrwxrwx 2 root root  6 Mar 26 16:30 kube-system-managed-nfs-storage-pvc-77c8a432-7ee5-4b0d-afae-94a88e0a6113
drwxrwxrwx 2 root root 24 Mar 26 16:33 kube-system-www-my-web-0-pvc-122aef78-c633-4eb0-8edf-4d9a5fa633ac
drwxrwxrwx 2 root root 24 Mar 26 16:33 kube-system-www-my-web-1-pvc-77e21151-70cc-4185-ad4b-12cf39c4128c
drwxrwxrwx 2 root root 24 Mar 26 16:33 kube-system-www-my-web-2-pvc-6d3698d5-5e4d-48f8-bb86-c0a300c25b2a
drwxrwxrwx 2 root root 24 Mar 26 16:33 kube-system-www-my-web-3-pvc-cf0c4a85-4d09-4918-b63c-a40c11c1b658

StatefulSet應(yīng)用有以下特點:
1.唯一的網(wǎng)絡(luò)標(biāo)識
2.域名訪問(<statefulsetName-index>.<service-name>.svc.cluster.local) 如:web-0.nginx.default.svc.cluster.local
3.獨立的持久存儲
4.有序的部署和刪除
[13:45:46root@k8s-master-1 ~/nfs/lk]#cat nfs-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: managed-nfs-storage
spec:
  storageClassName: "managed-nfs-storage"
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
[13:46:18root@k8s-master-1 ~/nfs/lk]#cat nginx_deployment.yaml 
apiVersion: v1
kind: Service
metadata:
  name: my-nginx-service #服務(wù)名
  labels:
    app: my-nginx  #標(biāo)簽名
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None    #Headless 無頭服務(wù)配置
  selector:
    app: my-nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-web
spec:
  selector:
    matchLabels:
      app: my-nginx
  serviceName: "my-nginx-service"
  replicas: 5    #部署4個副本
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: nginx
        image: registry.aliyuncs.com/google_containers/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: my-web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "managed-nfs-storage"
      resources:
        requests:
          storage: 1Gi

大部分內(nèi)容來自:http://www.reibang.com/p/8c2c6946767e

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侣签,一起剝皮案震驚了整個濱河市塘装,隨后出現(xiàn)的幾起案子急迂,更是在濱河造成了極大的恐慌,老刑警劉巖蹦肴,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僚碎,死亡現(xiàn)場離奇詭異,居然都是意外死亡冗尤,警方通過查閱死者的電腦和手機听盖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裂七,“玉大人皆看,你說我怎么就攤上這事”沉悖” “怎么了腰吟?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長徙瓶。 經(jīng)常有香客問我毛雇,道長,這世上最難降的妖魔是什么侦镇? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任灵疮,我火速辦了婚禮,結(jié)果婚禮上壳繁,老公的妹妹穿的比我還像新娘震捣。我一直安慰自己,他們只是感情好闹炉,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布蒿赢。 她就那樣靜靜地躺著,像睡著了一般渣触。 火紅的嫁衣襯著肌膚如雪羡棵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天嗅钻,我揣著相機與錄音皂冰,去河邊找鬼。 笑死啊犬,一個胖子當(dāng)著我的面吹牛灼擂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播觉至,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剔应,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峻贮,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤席怪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纤控,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挂捻,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年船万,在試婚紗的時候發(fā)現(xiàn)自己被綠了刻撒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡耿导,死狀恐怖声怔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舱呻,我是刑警寧澤醋火,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站箱吕,受9級特大地震影響芥驳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茬高,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一兆旬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怎栽,春花似錦爵憎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刑棵。三九已至巴刻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛉签,已是汗流浹背胡陪。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碍舍,地道東北人柠座。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像片橡,于是被迫代替她去往敵國和親妈经。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容