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

          使用 OpenEBS 實現(xiàn) Local PV 動態(tài)持久化存儲

          共 9151字,需瀏覽 19分鐘

           ·

          2021-01-11 23:15

          OpenEBS(https://openebs.io) 是一種模擬了 AWS 的 EBS、阿里云的云盤等塊存儲實現(xiàn)的基于容器的存儲開源軟件。OpenEBS 是一種基于 CAS(Container Attached Storage)?理念的容器解決方案,其核心理念是存儲和應(yīng)用一樣采用微服務(wù)架構(gòu),并通過 Kubernetes 來做資源編排。其架構(gòu)實現(xiàn)上,每個卷的 Controller 都是一個單獨的 Pod,且與應(yīng)用 Pod 在同一個節(jié)點,卷的數(shù)據(jù)使用多個 Pod 進行管理。

          OpenEBS 有很多組件,可以分為以下幾類:

          • 控制平面組件 - 管理 OpenEBS 卷容器,通常會用到容器編排軟件的功能
          • 數(shù)據(jù)平面組件 - 為應(yīng)用程序提供數(shù)據(jù)存儲,包含 Jiva 和 cStor 兩個存儲后端
          • 節(jié)點磁盤管理器 - 發(fā)現(xiàn)、監(jiān)控和管理連接到 Kubernetes 節(jié)點的媒體
          • 與云原生工具的整合 - 與 Prometheus、Grafana、Fluentd 和 Jaeger 進行整合。

          控制平面

          OpenEBS 集群的控制平面通常被稱為 Maya,控制平面負責供應(yīng)卷、相關(guān)的卷操作,如快照、制作克隆、創(chuàng)建存儲策略、執(zhí)行存儲策略、導(dǎo)出卷指標供 Prometheus/grafana 消費等。

          OpenEBS 控制平面 Maya 實現(xiàn)了創(chuàng)建超融合的 OpenEBS,并將其掛載到如 Kubernetes 調(diào)度引擎上,用來擴展特定的容器編排系統(tǒng)提供的存儲功能;OpenEBS 的控制平面也是基于微服務(wù)的,通過不同的組件實現(xiàn)存儲管理功能、監(jiān)控、容器編排插件等功能。

          OpenEBS 提供了一個動態(tài)供應(yīng)器,它是標準的 Kubernetes 外部存儲插件。OpenEBS PV 供應(yīng)器的主要任務(wù)是向應(yīng)用 Pod 發(fā)起卷供應(yīng),并實現(xiàn)Kubernetes 的 PV 規(guī)范。

          m-apiserver 暴露了存儲 REST API,并承擔了大部分的卷策略處理和管理。

          控制平面和數(shù)據(jù)平面之間的連接采用 Kubernetes sidecar 模式。有如下幾個場景,控制平面需要與數(shù)據(jù)平面進行通信。

          • 對于 IOPS、吞吐量、延遲等卷統(tǒng)計 - 通過 volume-exporter sidecar實現(xiàn)
          • 用于通過卷控制器 Pod 執(zhí)行卷策略,以及通過卷復(fù)制 Pod 進行磁盤/池管理 - 通過卷管理 sidecar 實現(xiàn)。

          下面對上述控制平面的組成進行詳細說明。

          OpenEBS PV Provisioner

          該組件作為一個 Pod 運行,并做出供應(yīng)決策。它的使用方式是開發(fā)者用所需的卷參數(shù)構(gòu)建一個請求,選擇合適的存儲類,并在 YAML 規(guī)范上調(diào)用 kubelet。OpenEBS PV 動態(tài)供應(yīng)器與maya-apiserver 交互,在適當?shù)墓?jié)點上為卷控制器 Pod 和卷復(fù)制 Pod 創(chuàng)建部署規(guī)范。可以使用 PVC 規(guī)范中的注解來控制容量 Pod(控制器/副本)的調(diào)度。

          目前,OpenEBS 供應(yīng)器只支持一種類型的綁定,即 iSCSI

          Maya-ApiServer

          m-apiserver 作為一個 Pod 運行,主要是用來暴露 OpenEBS REST APIs。

          m-apiserver 還負責創(chuàng)建創(chuàng)建卷 Pod 所需的部署規(guī)范文件,在生成這些規(guī)范文件后,它調(diào)用 kube-apiserver 來相應(yīng)地調(diào)度Pods。在 OpenEBS PV 供應(yīng)器的卷供應(yīng)結(jié)束時,會創(chuàng)建一個Kubernetes 對象 PV,并掛載在應(yīng)用 Pod 上,PV由控制器 Pod 托管,控制器 Pod 由一組位于不同節(jié)點的副本 Pod 支持,控制器 Pod和副本 Pod 是數(shù)據(jù)平面的一部分,。

          m-apiserver 的另一個重要任務(wù)是卷策略管理。OpenEBS 提供了非常細化的規(guī)范來表達策略,m-apiserver 解釋這些 YAML 規(guī)范,將其轉(zhuǎn)換為可執(zhí)行的組件,并通過卷管理 sidecar 來執(zhí)行。

          Maya Volume Exporter

          Maya Volume Exporter 是每個存儲控制器 Pod(cStor/Jiva)的 sidecar。這些 sidecars 將控制平面與數(shù)據(jù)平面連接起來,以獲取統(tǒng)計數(shù)據(jù),比如:

          • volume 讀/寫延遲
          • 讀/寫 IOPS
          • 讀/寫塊大小
          • 容量統(tǒng)計
          • OpenEBS volume exporter 數(shù)據(jù)流

          Volume 管理 Sidecars

          Sidecars 還用于將控制器配置參數(shù)和卷策略傳遞給作為數(shù)據(jù)平面的卷控制器 Pod,以及將副本配置參數(shù)和副本數(shù)據(jù)保護參數(shù)傳遞給卷副本 Pod。

          數(shù)據(jù)平面

          OpenEBS 持久化存儲卷通過 Kubernetes 的 PV 來創(chuàng)建,使用 iSCSI 來實現(xiàn),數(shù)據(jù)保存在節(jié)點上或者云存儲中。OpenEBS 的卷完全獨立于用戶的應(yīng)用的生命周期來管理,和 Kuberentes 中 PV 的思路一致。OpenEBS 卷為容器提供持久化存儲,具有針對系統(tǒng)故障的彈性,更快地訪問存儲,快照和備份功能。同時還提供了監(jiān)控使用情況和執(zhí)行 QoS 策略的機制。

          目前,OpenEBS 提供了兩個可以輕松插入的存儲引擎。這兩個引擎分別叫做 JivacStor。這兩個存儲引擎都完全運行在Linux 用戶空間中,并且基于微服務(wù)架構(gòu)。

          Jiva

          Jiva 存儲引擎是基于 Rancher 的 LongHorn 和 gotgt 開發(fā)的,采用 GO 語言編寫,運行在用戶空間。LongHorn 控制器將傳入的 IO 同步復(fù)制到 LongHorn 復(fù)制器上。復(fù)制器考慮以 Linux 稀疏文件為基礎(chǔ),進行動態(tài)供應(yīng)、快照、重建等存儲功能。

          cStor

          cStor 數(shù)據(jù)引擎是用C語言編寫的,具有高性能的 iSCSI 目標和Copy-On-Write 塊系統(tǒng),可提供數(shù)據(jù)完整性、數(shù)據(jù)彈性和時間點快照和克隆。cStor 具有池功能,可將節(jié)點上的磁盤以鏡像式或 RAIDZ 模式聚合,以提供更大的容量和性能單位。

          Local PV

          對于那些不需要存儲級復(fù)制的應(yīng)用,Local PV 可能是不錯的選擇,因為它能提供更高的性能。OpenEBS LocalPV 與 Kubernetes LocalPV 類似,只不過它是由 OpenEBS 控制平面動態(tài)調(diào)配的,就像其他常規(guī) PV 一樣。OpenEBS LocalPV 有兩種類型--主機路徑 LocalPV 或設(shè)備 LocalPV,主機路徑 LocalPV 指的是主機上的一個子目錄,設(shè)備 LocalPV 指的是節(jié)點上的一個被發(fā)現(xiàn)的磁盤(直接連接或網(wǎng)絡(luò)連接)。OpenEBS 引入了一個LocalPV 供應(yīng)器,用于根據(jù) PVC 和存儲類規(guī)范中的一些標準選擇匹配的磁盤或主機路徑。

          節(jié)點磁盤管理器

          Node Disk Manager (NDM)填補了使用 Kubernetes 管理有狀態(tài)應(yīng)用的持久性存儲所需的工具鏈中的空白。容器時代的 DevOps 架構(gòu)師必須以自動化的方式服務(wù)于應(yīng)用和應(yīng)用開發(fā)者的基礎(chǔ)設(shè)施需求,以提供跨環(huán)境的彈性和一致性。這些要求意味著存儲棧本身必須非常靈活,以便 Kubernetes 和云原生生態(tài)系統(tǒng)中的其他軟件可以輕松使用這個棧。NDM 在 Kubernetes 的存儲棧中起到了基礎(chǔ)性的作用,它將不同的磁盤統(tǒng)一起來,并通過將它們識別為 Kubernetes 對象來提供部分池化的能力。同時, NDM 還可以發(fā)現(xiàn)、供應(yīng)、監(jiān)控和管理底層磁盤,這樣Kubernetes PV 供應(yīng)器(如 OpenEBS 和其他存儲系統(tǒng)和Prometheus)可以管理磁盤子系統(tǒng)。

          安裝

          由于 OpenEBS 通過 iSCSI 協(xié)議提供存儲支持,因此,需要在所有 Kubernetes 節(jié)點上都安裝 iSCSI 客戶端(啟動器)。

          比如我們這里使用的是 CentOS 的系統(tǒng),執(zhí)行下面的命令安裝啟動 iSCSI 啟動器:

          #?安裝?iscsi
          $?yum?install?iscsi-initiator-utils?-y

          #
          ?查看?InitiatorName?是否正常配置
          $?cat?/etc/iscsi/initiatorname.iscsi

          #
          ?啟動查看狀態(tài)
          $?systemctl?enable?--now?iscsid
          $?systemctl?start?iscsid.service
          $?systemctl?status?iscsid.service

          iSCSI 客戶端啟動完成后就可以開始安裝 OpenEBS 了。

          直接使用下面的命令安裝 OpenEBS 即可:

          $?kubectl?apply?-f?https://openebs.github.io/charts/openebs-operator.yaml

          該命令會將應(yīng)用安裝到名為 openebs 的命名空間中,安裝成功后正常可以看到如下所示的 Pod:

          $?kubectl?get?pods?-n?openebs???????????????????????????????
          NAME???????????????????????????????????????????READY???STATUS????RESTARTS???AGE
          maya-apiserver-5db4c7f9bc-fv9sc????????????????1/1?????Running???0??????????19h
          openebs-admission-server-6c64d9ff64-sklvp??????1/1?????Running???0??????????19h
          openebs-localpv-provisioner-784d8f9b56-9mphk???1/1?????Running???1??????????19h
          openebs-ndm-fdlpx??????????????????????????????1/1?????Running???0??????????19h
          openebs-ndm-jfxbj??????????????????????????????1/1?????Running???0??????????19h
          openebs-ndm-operator-6d5978d6fb-swp65??????????1/1?????Running???0??????????19h
          openebs-provisioner-7b99c87dbf-zpxqn???????????1/1?????Running???1??????????19h
          openebs-snapshot-operator-69b9f8cd8b-r6hrn?????2/2?????Running???1??????????19h

          默認情況下 OpenEBS 還會安裝一些內(nèi)置的 StorageClass 對象:

          $?kubectl?get?sc
          NAME????????????????????????PROVISIONER????????????????????????????????????????????????RECLAIMPOLICY???VOLUMEBINDINGMODE??????ALLOWVOLUMEEXPANSION???AGE
          openebs-device??????????????openebs.io/local???????????????????????????????????????????Delete??????????WaitForFirstConsumer???false??????????????????19h
          openebs-hostpath????????????openebs.io/local???????????????????????????????????????????Delete??????????WaitForFirstConsumer???false??????????????????19h
          openebs-jiva-default????????openebs.io/provisioner-iscsi???????????????????????????????Delete??????????Immediate??????????????false??????????????????19h
          openebs-snapshot-promoter???volumesnapshot.external-storage.k8s.io/snapshot-promoter???Delete??????????Immediate??????????????false??????????????????19h

          測試

          接下來我們創(chuàng)建一個 PVC 資源對象,Pods 使用這個 PVC 就可以從 OpenEBS 動態(tài) Local PV Provisioner 中請求 Hostpath Local PV 了。

          直接使用上面自帶的 openebs-hostpath 這個 StorageClass 來創(chuàng)建 PVC:

          #?local-hostpath-pvc.yaml
          apiVersion:?v1
          kind:?PersistentVolumeClaim
          metadata:
          ??name:?local-hostpath-pvc
          spec:
          ??storageClassName:?openebs-hostpath
          ??accessModes:
          ????-?ReadWriteOnce
          ??resources:
          ????requests:
          ??????storage:?5Gi

          直接創(chuàng)建這個 PVC 即可:

          $?kubectl?apply?-f?local-hostpath-pvc.yaml
          $?kubectl?get?pvc?local-hostpath-pvc
          NAME?????????????????STATUS????VOLUME???CAPACITY???ACCESS?MODES???STORAGECLASS???????AGE
          local-hostpath-pvc???Pending??????????????????????????????????????openebs-hostpath???12s

          我們可以看到這個 PVC 的狀態(tài)是 Pending,這是因為對應(yīng)的 StorageClass 是延遲綁定模式,所以需要等到 Pod 消費這個 PVC 后才會去綁定,接下來我們?nèi)?chuàng)建一個 Pod 來使用這個 PVC。

          聲明一個如下所示的 Pod 資源清單:

          #?local-hostpath-pod.yaml
          apiVersion:?v1
          kind:?Pod
          metadata:
          ??name:?hello-local-hostpath-pod
          spec:
          ??volumes:
          ??-?name:?local-storage
          ????persistentVolumeClaim:
          ??????claimName:?local-hostpath-pvc
          ??containers:
          ??-?name:?hello-container
          ????image:?busybox
          ????command:
          ???????-?sh
          ???????-?-c
          ???????-?'while?true;?do?echo?"`date`?[`hostname`]?Hello?from?OpenEBS?Local?PV."?>>?/mnt/store/greet.txt;?sleep?$(($RANDOM?%?5?+?300));?done'
          ????volumeMounts:
          ????-?mountPath:?/mnt/store
          ??????name:?local-storage

          直接創(chuàng)建這個 Pod:

          $?kubectl?apply?-f?local-hostpath-pod.yaml
          $?kubectl?get?pods?hello-local-hostpath-pod??????????
          NAME???????????????????????READY???STATUS????RESTARTS???AGE
          hello-local-hostpath-pod???1/1?????Running???0??????????2m7s
          $?kubectl?get?pvc?local-hostpath-pvc???????????
          NAME?????????????????STATUS???VOLUME?????????????????????????????????????CAPACITY???ACCESS?MODES???STORAGECLASS???????AGE
          local-hostpath-pvc???Bound????pvc-3f4a1a65-6cbc-42bf-a1f8-87ad238c0b88???5Gi????????RWO????????????openebs-hostpath???5m41s

          可以看到 Pod 運行成功后,PVC 也綁定上了一個自動生成的 PV,我們可以查看這個 PV 的詳細信息:

          $?kubectl?get?pv?pvc-3f4a1a65-6cbc-42bf-a1f8-87ad238c0b88?-o?yaml
          apiVersion:?v1
          kind:?PersistentVolume
          metadata:
          ??annotations:
          ????pv.kubernetes.io/provisioned-by:?openebs.io/local
          ??creationTimestamp:?"2021-01-07T02:48:14Z"
          ??finalizers:
          ??-?kubernetes.io/pv-protection
          ??labels:
          ????openebs.io/cas-type:?local-hostpath
          ??......
          ??name:?pvc-3f4a1a65-6cbc-42bf-a1f8-87ad238c0b88
          ??resourceVersion:?"21193802"
          ??selfLink:?/api/v1/persistentvolumes/pvc-3f4a1a65-6cbc-42bf-a1f8-87ad238c0b88
          ??uid:?f7cccdb3-d23a-4831-86c3-4363eb1a8dee
          spec:
          ??accessModes:
          ??-?ReadWriteOnce
          ??capacity:
          ????storage:?5Gi
          ??claimRef:
          ????apiVersion:?v1
          ????kind:?PersistentVolumeClaim
          ????name:?local-hostpath-pvc
          ????namespace:?default
          ????resourceVersion:?"21193645"
          ????uid:?3f4a1a65-6cbc-42bf-a1f8-87ad238c0b88
          ??local:
          ????fsType:?""
          ????path:?/var/openebs/local/pvc-3f4a1a65-6cbc-42bf-a1f8-87ad238c0b88
          ??nodeAffinity:
          ????required:
          ??????nodeSelectorTerms:
          ??????-?matchExpressions:
          ????????-?key:?kubernetes.io/hostname
          ??????????operator:?In
          ??????????values:
          ??????????-?node2
          ??persistentVolumeReclaimPolicy:?Delete
          ??storageClassName:?openebs-hostpath
          ??volumeMode:?Filesystem
          status:
          ??phase:?Bound

          我們可以看到這個自動生成的 PV 和我們前面自己手動創(chuàng)建的 Local PV 基本上是一致的,和 node2 節(jié)點是親和關(guān)系,本地數(shù)據(jù)目錄位于 /var/openebs/local/pvc-3f4a1a65-6cbc-42bf-a1f8-87ad238c0b88 下面。

          接著我們來驗證下 volume 數(shù)據(jù),前往 node2 節(jié)點查看下上面的數(shù)據(jù)目錄中的數(shù)據(jù):

          [root@node2?~]#?ls?/var/openebs/local/pvc-3f4a1a65-6cbc-42bf-a1f8-87ad238c0b88
          greet.txt
          [root@node2?~]#?cat?/var/openebs/local/pvc-3f4a1a65-6cbc-42bf-a1f8-87ad238c0b88/greet.txt
          Thu?Jan??7?10:48:49?CST?2021?[hello-local-hostpath-pod]?Hello?from?OpenEBS?Local?PV.
          Thu?Jan??7?10:53:50?CST?2021?[hello-local-hostpath-pod]?Hello?from?OpenEBS?Local?PV.

          可以看到 Pod 容器中的數(shù)據(jù)已經(jīng)持久化到 Local PV 對應(yīng)的目錄中去了。但是需要注意的是 StorageClass 默認的數(shù)據(jù)回收策略是 Delete,所以如果將 PVC 刪掉后數(shù)據(jù)會自動刪除,我們可以 Velero 這樣的工具來進行備份還原。


          進階訓(xùn)練營第二期

          本次訓(xùn)練營采用線上直播的形式,基于1.19.x版本,根據(jù)第1期課程的打磨,我們總結(jié)出了 Docker 基礎(chǔ) + Kubernetes 基礎(chǔ) + 原理 + 基本使用 + 進階技能 + 完整項目實踐?的課程體系。加強系統(tǒng)知識吸收夯實基礎(chǔ)的同時,并在實際操作過程中去了解排查問題的方式方法,更為重要的是我們的老師非常負責任,隨時幫你答疑解惑,我們認為不只是課堂上講授知識,更重要的是售后支持,完全不用擔心學習不到知識。


          ?點擊屏末?|??|?即刻學習

          瀏覽 235
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  五月丁香一区 | 操逼A片 中文字幕乱妇无码Av在线 | 亚洲AV成人无码久久精品毛片 | 美女被艹视频网站 | 性一交一乱一A片久久99蜜桃 |