<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-21 11:14

          本文詳細(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)獲?。?/p>

          $?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

          將以上獲取的信息寫(xiě)入?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 專(zhuān)門(mén)用來(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í)候需要按一下回車(chē)鍵,在下一行繼續(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.yaml?和?csi-rbdplugin.yaml?中的 kms 部分配置:

          部署?csi-rbdplugin-provisioner

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

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

          部署 RBD CSI driver

          最后部署?RBD CSI Driver

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

          Pod 中包含兩個(gè)容器:CSI node-driver-registrar?和?CSI 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è)試讀寫(xiě)數(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


          更多關(guān)于云原生的最新信息

          關(guān)注下方公眾號(hào)?



          往期推薦

          如何優(yōu)雅的實(shí)現(xiàn) try/catch 異常塊?

          阿里云發(fā)布云電腦“無(wú)影”,「?jìng)鹘y(tǒng)桌面云」市場(chǎng)將被顛覆?

          :: 是什么語(yǔ)法?

          黑客使用合法工具接管 Docker 和 Kubernetes 平臺(tái)

          推薦一個(gè)學(xué)算法的 GitHub 項(xiàng)目

          瀏覽 56
          點(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>
                  国产精品九九九九九九九九九 | 亚洲1区无码 | 国产国语对白 | 操学生妹在线播放 | 精品三级国产 |