Openshift上搭建NFS StorageClass淀弹,別再說(shuō)存儲(chǔ)使用不方便

動(dòng)態(tài)存儲(chǔ)是什么

Openshift持久化存儲(chǔ)(PV)有兩種丹壕,一種是靜態(tài)的,另一種是動(dòng)態(tài)薇溃。

  • 靜態(tài)存儲(chǔ):需要管理員手動(dòng)創(chuàng)建PV菌赖,供PVC掛載調(diào)用
  • 動(dòng)態(tài)存儲(chǔ):通過(guò)一個(gè)稱作 Storage Class的對(duì)象由存儲(chǔ)系統(tǒng)根據(jù)PVC的要求自動(dòng)創(chuàng)建。

StorageClass是什么

  • StorageClass是Openshfit中的一個(gè)資源對(duì)象沐序,它主要用于描述請(qǐng)求的存儲(chǔ)琉用,并提供按需傳遞動(dòng)態(tài)預(yù)配置存儲(chǔ)的參數(shù)的方法。
  • StorageClass對(duì)象還可以用作控制不同級(jí)別的存儲(chǔ)和對(duì)存儲(chǔ)的訪問(wèn)的管理機(jī)制策幼。
  • 有了StorageClass后辕羽,管理員無(wú)需手動(dòng)創(chuàng)建PV。Openshift的使用者在創(chuàng)建PVC時(shí)只需要指定StorageClass,會(huì)自動(dòng)按照對(duì)應(yīng)的StorageClass配置垄惧,調(diào)用對(duì)應(yīng)的Dynamic provisioning來(lái)創(chuàng)建需要的存儲(chǔ)

沒(méi)有StorageClass時(shí)代刁愿,如何使用NFS

每次需要手動(dòng)創(chuàng)建PV,一句話:麻煩到逊。

StorageClass時(shí)代來(lái)了

一次配置铣口,永久自動(dòng),無(wú)需手動(dòng)創(chuàng)建PV觉壶,一句話:方便脑题。

NFS Provisioner原理

NFS Provisioner原理
  1. 新建PVC時(shí),指定為默認(rèn)驅(qū)動(dòng)铜靶,或者指定storageclass為nfs storage
  2. 運(yùn)行nfs client provisioner的pod會(huì)根據(jù)配置叔遂,在共享的NFS目錄下創(chuàng)建新的文件夾,同時(shí)創(chuàng)建新的PV指向該文件夾
  3. 將新建的PVC與2中新建的PV關(guān)聯(lián),完成PVC的創(chuàng)建
  4. 該P(yáng)VC就可以被調(diào)用的Pod掛載了已艰。

NFS StorageClass具體配置步驟

  1. 準(zhǔn)備NFS服務(wù)
$ yum install nfs -y
$ mkdir -p /nfsdata/share
$ chown nfsnobody:nfsnobody /nfsdata/share
$ chmod 700 /nfsdata/share

$ #開(kāi)放nfs訪問(wèn)的端口
$ iptables -A INPUT -p tcp --dport 111 -j ACCEPT
$ iptables -A INPUT -p udp --dport 111 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
$ iptables -A INPUT -p udp --dport 2049 -j ACCEPT

$ # 配置NFS
$ echo "/nfsdata/share *(rw,async,no_root_squash)" >> /etc/exports
$ exportfs -a #加載共享目錄配置
$ showmount -e #查看當(dāng)前可用的共享目錄

$ # 啟動(dòng)NFS
$ systemctl restart nfs
  1. 確定Provisioner安裝的project(默認(rèn)為default)
    如果使用default project的話
$ oc project default

如果希望將它部署在自定義的project中痊末,則新建project

$ oc new-project nfs-provisoner
  1. 如果安裝的project不是default的話,需要更改配置rbac.yaml,再設(shè)置權(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

$ NAMESPACE=`oc project -q`
$ sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/rbac.yaml

$ oc create -f deploy/rbac.yaml
$ oc adm policy add-scc-to-user hostmount-anyuid system:serviceaccount:$NAMESPACE:nfs-client-provisioner
  1. 更新deploy/deployment.yaml哩掺,設(shè)置NFS Server的配置
$ cat << EOF | oc create -f -
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: docker.io/xhuaustc/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: <YOUR NFS SERVER HOSTNAME>
            - name: NFS_PATH
              value: /nfsdata/share
      volumes:
        - name: nfs-client-root
          nfs:
            server: <YOUR NFS SERVER HOSTNAME>
            path: /nfsdata/share
EOF
  1. 創(chuàng)建storageclass
$ cat << EOF | oc create -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
  annotations:
    storageclass.kubernetes.io/is-default-class: "true" # 設(shè)置該storageclass為PVC創(chuàng)建時(shí)默認(rèn)使用的存儲(chǔ)機(jī)制
provisioner: fuseim.pri/ifs # 匹配deployment中的環(huán)境變量'PROVISIONER_NAME'
parameters:
  archiveOnDelete: "true" # "false" 刪除PVC時(shí)不會(huì)保留數(shù)據(jù)凿叠,"true"將保留PVC數(shù)據(jù)
reclaimPolicy: Delete
EOF

NFS StorageClass使用

  1. 創(chuàng)建PVC
$ cat << EOF | oc create -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    volume.beta.kubernetes.io/storage-class: managed-nfs-storage
    volume.beta.kubernetes.io/storage-provisioner: fuseim.pri/ifs
  name: testpvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
EOF

如果storageclass中設(shè)置了storageclass.kubernetes.io/is-default-class: "true",可以更簡(jiǎn)單地創(chuàng)建PVC

$ cat << EOF | oc create -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: hello-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
EOF
  1. 查看PVC
$ oc get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                            STORAGECLASS          REASON    AGE
pvc-fb952566-4bed-11e9-9007-525400ad3b43   1Gi        RWO            Delete           Bound      test/hello-pvc                 managed-nfs-storage             5m

$ oc get pvc
hello-pvc   Bound     pvc-fb952566-4bed-11e9-9007-525400ad3b43   1Gi        RWO            managed-nfs-storage   4m
  1. 如果storageclass中設(shè)置了archiveOnDelete: "true"嚼吞,在刪除PVC時(shí)盒件,會(huì)將數(shù)據(jù)目錄歸檔
$ ls /nfsdata/share
test-hello-pvc-pvc-fb952566-4bed-11e9-9007-525400ad3b43

$ oc delete pvc hello-pvc
$ ls /nfsdata/share
archived-test-hello-pvc-pvc-fb952566-4bed-11e9-9007-525400ad3b43
$ #數(shù)據(jù)目錄被改名為以archived開(kāi)頭的文件夾,同時(shí)刪除了對(duì)應(yīng)的PV和PVC

總結(jié)

有了NFS StorageClass后舱禽,創(chuàng)建存儲(chǔ)就非常簡(jiǎn)單方便了炒刁。
Openshift NFS動(dòng)態(tài)存儲(chǔ)代碼 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client

引用自:https://mp.weixin.qq.com/s/HgDCDgYjkX5en7ORNeG0yA

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市誊稚,隨后出現(xiàn)的幾起案子翔始,更是在濱河造成了極大的恐慌,老刑警劉巖片吊,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異协屡,居然都是意外死亡俏脊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)肤晓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)爷贫,“玉大人,你說(shuō)我怎么就攤上這事补憾÷眩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵盈匾,是天一觀的道長(zhǎng)腾务。 經(jīng)常有香客問(wèn)我,道長(zhǎng)削饵,這世上最難降的妖魔是什么岩瘦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮窿撬,結(jié)果婚禮上启昧,老公的妹妹穿的比我還像新娘。我一直安慰自己劈伴,他們只是感情好密末,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般严里。 火紅的嫁衣襯著肌膚如雪新啼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天田炭,我揣著相機(jī)與錄音师抄,去河邊找鬼。 笑死教硫,一個(gè)胖子當(dāng)著我的面吹牛叨吮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瞬矩,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼茶鉴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了景用?” 一聲冷哼從身側(cè)響起涵叮,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伞插,沒(méi)想到半個(gè)月后割粮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媚污,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年舀瓢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耗美。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡京髓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出商架,到底是詐尸還是另有隱情堰怨,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布蛇摸,位于F島的核電站备图,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赶袄。R本人自食惡果不足惜诬烹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弃鸦。 院中可真熱鬧绞吁,春花似錦、人聲如沸唬格。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至汰聋,卻和暖如春门粪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烹困。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工玄妈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人髓梅。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓拟蜻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親枯饿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酝锅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355