<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kubernetes 使用 ceph-csi 消費(fèi) RBD 作為持久化存儲(chǔ)

          共 2987字,需瀏覽 6分鐘

           ·

          2020-09-16 00:59

          本文詳細(xì)介紹了如何在 Kubernetes 集群中部署 ceph-csi(v3.1.0),并使用 RBD 作為持久化存儲(chǔ)。

          需要的環(huán)境參考下圖:

          本文使用的環(huán)境版本信息:

          Kubernetes 版本:

          $?kubectl?get?node
          NAME???????STATUS???ROLES????AGE???VERSION
          sealos01???Ready????master???23d???v1.18.8
          sealos02???Ready????master???23d???v1.18.8
          sealos03???Ready????master???23d???v1.18.8

          Ceph 版本:

          $?ceph?version
          ceph?version?14.2.11?(f7fdb2f52131f54b891a2ec99d8205561242cdaf)?nautilus?(stable)

          以下是詳細(xì)部署過(guò)程:

          1. 新建 Ceph Pool

          創(chuàng)建一個(gè)新的 ceph 存儲(chǔ)池(pool) 給 Kubernetes 使用:

          $?ceph?osd?pool?create?kubernetes

          pool?'?kubernetes'?created

          查看所有的 pool

          $?ceph?osd?lspools

          1?cephfs_data
          2?cephfs_metadata
          3?.rgw.root
          4?default.rgw.control
          5?default.rgw.meta
          6?default.rgw.log
          7?kubernetes

          2. 新建用戶

          為 Kubernetes 和 ceph-csi 單獨(dú)創(chuàng)建一個(gè)新用戶:

          $?ceph?auth?get-or-create?client.kubernetes?mon?'profile?rbd'?osd?'profile?rbd?pool=kubernetes'?mgr?'profile?rbd?pool=kubernetes'

          [client.kubernetes]
          ????key?=?AQBnz11fclrxChAAf8TFw8ROzmr8ifftAHQbTw==

          后面的配置需要用到這里的 key,如果忘了可以通過(guò)以下命令來(lái)獲取:

          $?ceph?auth?get?client.kubernetes
          exported?keyring?for?client.kubernetes
          [client.kubernetes]
          ?key?=?AQBnz11fclrxChAAf8TFw8ROzmr8ifftAHQbTw==
          ?caps?mgr?=?"profile?rbd?pool=kubernetes"
          ?caps?mon?=?"profile?rbd"
          ?caps?osd?=?"profile?rbd?pool=kubernetes"

          3. 部署 ceph-csi

          拉取 ceph-csi 的最新 release 分支(v3.1.0)[1]

          $?git?clone?--depth?1?--branch?v3.1.0?https://gitclone.com/github.com/ceph/ceph-csi
          • 這里使用 gitclone[2] 來(lái)加速拉取。

          修改 Configmap

          獲取 Ceph 集群的信息:

          $?ceph?mon?dump

          dumped?monmap?epoch?1
          epoch?1
          fsid?154c3d17-a9af-4f52-b83e-0fddd5db6e1b
          last_changed?2020-09-12?16:16:53.774567
          created?2020-09-12?16:16:53.774567
          min_mon_release?14?(nautilus)
          0:?[v2:172.16.1.21:3300/0,v1:172.16.1.21:6789/0]?mon.sealos01
          1:?[v2:172.16.1.22:3300/0,v1:172.16.1.22:6789/0]?mon.sealos02
          2:?[v2:172.16.1.23:3300/0,v1:172.16.1.23:6789/0]?mon.sealos03

          這里需要用到兩個(gè)信息:

          • fsid : 這個(gè)是 Ceph 的集群 ID。
          • 監(jiān)控節(jié)點(diǎn)信息。目前 ceph-csi 只支持 v1 版本的協(xié)議,所以監(jiān)控節(jié)點(diǎn)那里我們只能用 v1 的那個(gè) IP 和端口號(hào)(例如,172.16.1.21:6789)。

          進(jìn)入 ceph-csi 的 deploy/rbd/kubernetes 目錄:

          $?cd?deploy/rbd/kubernetes

          $?ls?-l?./
          total?36
          -rw-r--r--?1?root?root??100?Sep?14?04:49?csi-config-map.yaml
          -rw-r--r--?1?root?root?1686?Sep?14?04:49?csi-nodeplugin-psp.yaml
          -rw-r--r--?1?root?root??858?Sep?14?04:49?csi-nodeplugin-rbac.yaml
          -rw-r--r--?1?root?root?1312?Sep?14?04:49?csi-provisioner-psp.yaml
          -rw-r--r--?1?root?root?3105?Sep?14?04:49?csi-provisioner-rbac.yaml
          -rw-r--r--?1?root?root?5497?Sep?14?04:49?csi-rbdplugin-provisioner.yaml
          -rw-r--r--?1?root?root?5852?Sep?14?04:49?csi-rbdplugin.yaml

          將以上獲取的信息寫入 csi-config-map.yaml

          ---
          apiVersion:?v1
          kind:?ConfigMap
          data:
          ??config.json:?|-
          ????[
          ??????{
          ????????"clusterID":?"154c3d17-a9af-4f52-b83e-0fddd5db6e1b",
          ????????"monitors":?[
          ??????????"172.16.1.21:6789",
          ??????????"172.15.1.22:6789",
          ??????????"172.16.1.23:6789"
          ????????]
          ??????}
          ????]
          metadata:
          ??name:?ceph-csi-config

          創(chuàng)建一個(gè)新的 namespace 專門用來(lái)部署 ceph-csi:

          $?kubectl?create?ns?ceph-csi

          將此 Configmap 存儲(chǔ)到 Kubernetes 集群中:

          $?kubectl?-n?ceph-csi?apply?-f?csi-config-map.yaml

          新建 Secret

          使用創(chuàng)建的 kubernetes 用戶 ID 和 cephx 密鑰生成 Secret

          cat?<?>?csi-rbd-secret.yaml
          apiVersion:?v1
          kind:?Secret
          metadata:
          name:?csi-rbd-secret
          namespace:?ceph-csi
          stringData:
          userID:?kubernetes
          userKey:?AQBnz11fclrxChAAf8TFw8ROzmr8ifftAHQbTw==
          EOF

          部署 Secret:

          $?kubectl?apply?-f?csi-rbd-secret.yaml

          RBAC 授權(quán)

          將所有配置清單中的 namespace 改成 ceph-csi

          $?sed?-i?"s/namespace:?default/namespace:?ceph-csi/g"?$(grep?-rl?"namespace:?default"?./)
          $?sed?-i?-e?"/^kind:?ServiceAccount/{N;N;a\??namespace:?ceph-csi??#?輸入到這里的時(shí)候需要按一下回車鍵,在下一行繼續(xù)輸入
          ??}"
          ?$(egrep?-rl?"^kind:?ServiceAccount"?./)

          創(chuàng)建必須的 ServiceAccount 和 RBAC ClusterRole/ClusterRoleBinding 資源對(duì)象:

          $?kubectl?create?-f?csi-provisioner-rbac.yaml
          $?kubectl?create?-f?csi-nodeplugin-rbac.yaml

          創(chuàng)建 PodSecurityPolicy:

          $?kubectl?create?-f?csi-provisioner-psp.yaml
          $?kubectl?create?-f?csi-nodeplugin-psp.yaml

          部署 CSI sidecar

          csi-rbdplugin-provisioner.yamlcsi-rbdplugin.yaml 中的 kms 部分配置:

          部署 csi-rbdplugin-provisioner

          $?kubectl?-n?ceph-csi?create?-f?csi-rbdplugin-provisioner.yaml

          這里面包含了 6 個(gè) Sidecar 容器,包括 external-provisioner、external-attacher、csi-resizercsi-rbdplugin。

          部署 RBD CSI driver

          最后部署 RBD CSI Driver

          $?kubectl?-n?ceph-csi?create?-f?csi-rbdplugin.yaml

          Pod 中包含兩個(gè)容器:CSI node-driver-registrarCSI RBD driver

          創(chuàng)建 Storageclass

          $?cat?<?>?storageclass.yaml
          ---
          apiVersion:?storage.k8s.io/v1
          kind:?StorageClass
          metadata:
          ???name:?csi-rbd-sc
          provisioner:?rbd.csi.ceph.com
          parameters:
          ???clusterID:?154c3d17-a9af-4f52-b83e-0fddd5db6e1b
          ???pool:?kubernetes
          ???imageFeatures:?layering
          ???csi.storage.k8s.io/provisioner-secret-name:?csi-rbd-secret
          ???csi.storage.k8s.io/provisioner-secret-namespace:?ceph-csi
          ???csi.storage.k8s.io/controller-expand-secret-name:?csi-rbd-secret
          ???csi.storage.k8s.io/controller-expand-secret-namespace:?ceph-csi
          ???csi.storage.k8s.io/node-stage-secret-name:?csi-rbd-secret
          ???csi.storage.k8s.io/node-stage-secret-namespace:?ceph-csi
          ???csi.storage.k8s.io/fstype:?ext4
          reclaimPolicy:?Delete
          allowVolumeExpansion:?true
          mountOptions:
          ???-?discard
          EOF
          • 這里的 clusterID 對(duì)應(yīng)之前步驟中的 fsid。
          • imageFeatures 用來(lái)確定創(chuàng)建的 image 特征,如果不指定,就會(huì)使用 RBD 內(nèi)核中的特征列表,但 Linux 不一定支持所有特征,所以這里需要限制一下。

          3. 試用 ceph-csi

          Kubernetes 通過(guò) PersistentVolume 子系統(tǒng)為用戶和管理員提供了一組 API,將存儲(chǔ)如何供應(yīng)的細(xì)節(jié)從其如何被使用中抽象出來(lái),其中 PV(PersistentVolume) 是實(shí)際的存儲(chǔ),PVC(PersistentVolumeClaim) 是用戶對(duì)存儲(chǔ)的請(qǐng)求。

          下面通過(guò)官方倉(cāng)庫(kù)的示例來(lái)演示如何使用 ceph-csi。

          先進(jìn)入 ceph-csi 項(xiàng)目的 example/rbd 目錄,然后直接創(chuàng)建 PVC:

          $?kubectl?apply?-f?pvc.yaml

          查看 PVC 和申請(qǐng)成功的 PV:

          $?kubectl?get?pvc
          NAME??????STATUS???VOLUME?????????????????????????????????????CAPACITY???ACCESS?MODES???STORAGECLASS???AGE
          rbd-pvc???Bound????pvc-44b89f0e-4efd-4396-9316-10a04d289d7f???1Gi????????RWO????????????csi-rbd-sc?????8m21s

          $?kubectl?get?pv
          NAME???????????????????????????????????????CAPACITY???ACCESS?MODES???RECLAIM?POLICY???STATUS???CLAIM????????????????STORAGECLASS???REASON???AGE
          pvc-44b89f0e-4efd-4396-9316-10a04d289d7f???1Gi????????RWO????????????Delete???????????Bound????default/rbd-pvc??????csi-rbd-sc??????????????8m18s

          再創(chuàng)建示例 Pod:

          $?kubectl?apply?-f?pod.yaml

          進(jìn)入 Pod 里面測(cè)試讀寫數(shù)據(jù):

          $?kubectl?exec?-it?csi-rbd-demo-pod?bash
          root@csi-rbd-demo-pod:/#?cd?/var/lib/www/
          root@csi-rbd-demo-pod:/var/lib/www#?ls?-l
          total?4
          drwxrwxrwx?3?root?root?4096?Sep?14?09:09?html
          root@csi-rbd-demo-pod:/var/lib/www#?echo?"https://fuckcloudnative.io"?>?sealos.txt
          root@csi-rbd-demo-pod:/var/lib/www#?cat?sealos.txt
          https://fuckcloudnative.io

          列出 kubernetes pool 中的 rbd images

          $?rbd?ls?-p?kubernetes
          csi-vol-d9d011f9-f669-11ea-a3fa-ee21730897e6

          查看該 image 的特征:

          $?rbd?info?csi-vol-d9d011f9-f669-11ea-a3fa-ee21730897e6?-p?kubernetes
          rbd?image?'csi-vol-d9d011f9-f669-11ea-a3fa-ee21730897e6':
          ?size?1?GiB?in?256?objects
          ?order?22?(4?MiB?objects)
          ?snapshot_count:?0
          ?id:?8da46585bb36
          ?block_name_prefix:?rbd_data.8da46585bb36
          ?format:?2
          ?features:?layering
          ?op_features:
          ?flags:
          ?create_timestamp:?Mon?Sep?14?09:08:27?2020
          ?access_timestamp:?Mon?Sep?14?09:08:27?2020
          ?modify_timestamp:?Mon?Sep?14?09:08:27?2020

          可以看到對(duì) image 的特征限制生效了,這里只有 layering。

          實(shí)際上這個(gè) image 會(huì)被掛載到 node 中作為一個(gè)塊設(shè)備,可以通過(guò) rbd 命令查看映射信息:

          $?rbd?showmapped
          id?pool???????namespace?image????????????????????????????????????????snap?device
          0??kubernetes???????????csi-vol-d9d011f9-f669-11ea-a3fa-ee21730897e6?-????/dev/rbd0

          在 node 上查看掛載信息:

          $?lsblk?-l|grep?rbd
          rbd0???????????????????????????????????????????????????????????????????????????????????????????????252:32???0?????1G??0?disk?/var/lib/kubelet/pods/15179e76-e06e-4c0e-91dc-e6ecf2119f4b/volumes/kubernetes.io~csi/pvc-44b89f0e-4efd-4396-9316-10a04d289d7f/mount

          在 容器中查看掛載信息:

          $?kubectl?exec?-it?csi-rbd-demo-pod?bash
          root@csi-rbd-demo-pod:/#?lsblk?-l|grep?rbd
          rbd0???????????????????????????????????????????????????????????????????????????????????????????????252:32???0?????1G??0?disk?/var/lib/www/html

          一切正常!

          參考資料

          [1]

          最新 release 分支(v3.1.0): https://github.com/ceph/ceph-csi/tree/v3.1.0

          [2]

          gitclone: https://gitclone.com


          你可能還喜歡

          點(diǎn)擊下方圖片即可閱讀

          重磅!GitHub 推出容器鏡像倉(cāng)庫(kù)服務(wù)!

          云原生是一種信仰??



          碼關(guān)注公眾號(hào)

          后臺(tái)回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



          點(diǎn)擊?"閱讀原文"?獲取更好的閱讀體驗(yàn)!

          ??給個(gè)「在看」,是對(duì)我最大的支持??
          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  韩国毛片网站 | 大香蕉视频伊人 | 九点操逼网 | 豆花视频在线看成人网站 | 精品视频你懂的 |