SUSE CaaS Platform 4 - 使用 Ceph RBD 作為持久存儲(動態)

来源:https://www.cnblogs.com/alfiesuse/archive/2019/10/06/11628774.html
-Advertisement-
Play Games

存儲類 存儲類(storage class)是kubernetes資源類型,它是由管理員為管理PV之便而按需創建的類別 存儲類好處是支持 PV 的動態創建,系統按PVC的需求標準動態創建適配的PV會為存儲管理帶來極大的靈活性。 PV的動態供給,其重點是在存儲類的定義,其分類大概是對存儲的性能進行分類 ...


存儲類

  • 存儲類(storage class)是kubernetes資源類型,它是由管理員為管理PV之便而按需創建的類別
  • 存儲類好處是支持 PV 的動態創建,系統按PVC的需求標準動態創建適配的PV會為存儲管理帶來極大的靈活性。
  • PV的動態供給,其重點是在存儲類的定義,其分類大概是對存儲的性能進行分類的,如圖1:金存儲類、銀存儲類、銅存儲類等。

圖1 基於綜合服務質量的存儲系統分類

一、Provisioner(存儲分配器)

Storage class 有一個分配器,用來決定使用哪個捲插件分配 PV。圖2 中可以看到,目前 Ceph 只有 RBD 介面支持內部分配器。

  圖2 各存儲插件對動態供給方式的支持狀況

 二、實驗環境搭建 - 動態供給

 圖3 實驗環境架構圖

環境設置

1、搭建環境

  • 操作系統版本: SLES15 SP1,無需安裝 swap
  • 內核版本:4.12.14-197.18-default
  • Kubernetes版本:v1.15.2
  • VMware Workstation 14

2、虛擬化環境搭建和系統安裝參考:

安裝部署

 1、所有 CaaS Platform 節點安裝

# zypper install ceph-common

複製 ceph.conf 到 worker 節點上

# scp admin:/etc/ceph/ceph.conf /etc/ceph/ 

2、創建池,並將應用名稱與存儲池關聯

# ceph osd pool create caasp4-dynamic 64
# ceph osd pool application enable caasp4-dynamic rbd 

3、創建 CaaSP4 client user

# cd /etc/ceph
# ceph auth get-or-create client.caasp4-dynamic mon 'allow r' \
    osd 'allow class-read object_prefix rbd_children, allow rwx pool=caasp4-dynamic' \
    -o ceph.client.dynamic.keyring

4、獲取 client.admin 用戶 key 信息,並生成基於 base64 編碼 key

# ceph auth get client.admin
exported keyring for client.admin
[client.admin]
        key = AQA9w4VdAAAAABAAHZr5bVwkALYo6aLVryt7YA==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *
# echo AQA9w4VdAAAAABAAHZr5bVwkALYo6aLVryt7YA== | base64
QVFBOXc0VmRBQUFBQUJBQUhacjViVndrQUxZbzZhTFZyeXQ3WUE9PQo=

5、在Master節點上,為 client.admin,創建 secret 資源

# vim ceph-secret-admin.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret-admin
  namespace: kube-system
data:
  key: QVFBOXc0VmRBQUFBQUJBQUhacjViVndrQUxZbzZhTFZyeXQ3WUE9PQo=
type: kubernetes.io/rbd
# kubectl get secrets -n kube-system
NAME                                       TYPE                                 DATA   AGE
....
ceph-secret-admin                          kubernetes.io/rbd                     1      24s
....

6、獲取 client.caasp4-dynamic 用戶 key 信息,並生成基於 base64編碼的key

# ceph auth get client.caasp4-dynamic
exported keyring for client.caasp4-dynamic
[client.caasp4-dynamic]
        key = AQA29ppdTDmzHhAAET2mSbvovrS67kspPlqmLA==
        caps mon = "allow r"
        caps osd = "allow class-read object_prefix rbd_children, allow rwx pool=caasp4-dynamic"
# echo AQA29ppdTDmzHhAAET2mSbvovrS67kspPlqmLA== | base64
QVFBMjlwcGRURG16SGhBQUVUMm1TYnZvdnJTNjdrc3BQbHFtTEE9PQo=

7、在Master節點上,為 client.caasp4-dynamic 創建 secret

# vim ceph-secret-user.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ceph-user-secret
  namespace: default
data:
  key: QVFBMjlwcGRURG16SGhBQUVUMm1TYnZvdnJTNjdrc3BQbHFtTEE9PQo=
type: kubernetes.io/rbd
# kubectl create -f ceph-secret-user.yaml
secret "ceph-user-secret" created
# kubectl get secrets      
NAME                  TYPE                                  DATA   AGE
ceph-secret-test      Opaque                                1      20h
ceph-user-secret      kubernetes.io/rbd                     1      4s
default-token-4hslq   kubernetes.io/service-account-token   3      24h

8、創建 storage class 存儲類

# vim ceph-storageclass.yaml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  name: dynamic
  annotations:
     storageclass.beta.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/rbd
parameters:
  monitors: 192.168.2.40:6789,192.168.2.41:6789,192.168.2.42:6789
  adminId: admin
  adminSecretName: ceph-secret-admin
  adminSecretNamespace: kube-system
  pool: caasp4-dynamic
  userId: caasp4-dynamic
  userSecretName: ceph-user-secret
# kubectl create -f ceph-storageclass.yaml
storageclass "dynamic" created
# kubectl get storageclasses
NAME                PROVISIONER         AGE
dynamic (default)   kubernetes.io/rbd   10m  

StorageClass SPEC

(1)provisioner(供給方):即提供存儲資源的存儲系統,供給方名字都以“kubernetes.io”為首碼
(2)parameters(參數):使用參數描述要關聯到的存儲捲,不同的provisioner有不同的參數

 kubernetes 官方參數說明

9、創建 PVC

# vim ceph-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ceph-claim-dynamic
spec:
  accessModes:  
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
# kubectl create -f ceph-pvc.yaml
persistentvolumeclaim "ceph-claim-dynamic" created
# kubectl get pvc -o wide
NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODE
ceph-claim-dynamic   Bound    pvc-70b3b3ca-5267-4417-a898-c1f5524de008   3Gi        RWO            dynamic        10m   Filesystem

10、創建 Pod

vim ceph-pod-dynamic.yaml
apiVersion: v1
kind: Pod
metadata:
  name: ceph-pod1-dynamic
spec:
  containers:
  - name: ceph-busybox
    image: busybox
    command: ["sleep", "60000"]
    volumeMounts:
    - name: ceph-vol1-dynamic
      mountPath: /usr/share/busybox
      readOnly: false
  volumes:
  - name: ceph-vol1-dynamic
    persistentVolumeClaim:
      claimName: ceph-claim-dynamic
# kubectl create -f ceph-pod-dynamic.yaml
pod "ceph-pod1-dynamic" created

# kubectl get pods
NAME                READY   STATUS    RESTARTS   AGE
ceph-pod1-dynamic   1/1     Running   0          24m

# kubectl get pods -o wide
NAME                READY   STATUS    RESTARTS   AGE   IP             NODE       NOMINATED NODE   READINESS GATES
ceph-pod1-dynamic   1/1     Running   0          48m   10.244.2.194   worker02   <none>           <none>
# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   REASON   AGE
pvc-70b3b3ca-5267-4417-a898-c1f5524de008   3Gi        RWO            Delete           Bound    default/ceph-claim-dynamic   dynamic                 169m

 11、storage6 分散式存儲上,查看是否創建了鏡像

admin:/etc/ceph # rbd ls -p caasp4-dynamic
kubernetes-dynamic-pvc-e6d98bbf-50e1-4488-a9fc-867d1db810c8
admin:/etc/ceph # rbd info kubernetes-dynamic-pvc-e6d98bbf-50e1-4488-a9fc-867d1db810c8 -p caasp4-dynamic
rbd image 'kubernetes-dynamic-pvc-e6d98bbf-50e1-4488-a9fc-867d1db810c8':
        size 3 GiB in 768 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: cd53f75a03b15
        block_name_prefix: rbd_data.cd53f75a03b15
        format: 2
        features:
        op_features:
        flags:
        create_timestamp: Mon Oct  7 17:14:23 2019
        access_timestamp: Mon Oct  7 17:14:23 2019
        modify_timestamp: Mon Oct  7 17:14:23 2019

12、worker02節點上,查看RBD映射

# rbd showmapped
id pool           namespace image                                                       snap device    
0  caasp4-dynamic           kubernetes-dynamic-pvc-e6d98bbf-50e1-4488-a9fc-867d1db810c8 -    /dev/rbd0

 

# df -h | grep dev/rbd0  
/dev/rbd0                2.9G  9.0M  2.9G   1% /var/lib/kubelet/pods/e7c75785-4533-4fac-b4ab-368c75e16421/volumes/kubernetes.io~rbd/pvc-70b3b3ca-5267-4417-a898-c1f5524de008

排錯

1、搭建的時候,發現創建PVC的時候 pending 狀態。

# kubectl get pvc
NAME                 STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
ceph-claim-dynamic   Pending                                      dynamic        44s

2、通過 event 事件查看,由於忘記創建 admin secret 導致,重新創建 admin secret 即可。

# kubectl get events
LAST SEEN   TYPE      REASON               OBJECT                                     MESSAGE
60s         Warning   ProvisioningFailed   persistentvolumeclaim/ceph-claim-dynamic   Failed to provision volume with StorageClass "dynamic": failed to get admin secret from ["kube-system"/"ceph-secret-admin"]: failed to get secret from ["kube-system"/"ceph-secret-admin"]: secrets "ceph-secret-admin" not found
35s         Warning   FailedScheduling     pod/ceph-pod1-dynamic                      pod has unbound immediate PersistentVolumeClaims (repeated 2 times)

 

 



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設置主從 DNS 的主要是為了冗餘,分擔壓力,防止伺服器宕機後, DNS 無法正常解析。 ...
  • 具體到一個公司的網路環境中,不可能只有一個 VLAN,更不可能對每個 VLAN 都架設一個 DHCP 伺服器,這時就要做一個 DHCP 的中繼,使得 DHCP 的廣播可以通過 VLAN 。 ...
  • 想使用 mongodb 官網提供的YUM安裝方法快速安裝,但官方暫時未提供centos8的安裝包,只需稍作修改則能順利安裝! ...
  • 原理:兩台web伺服器,通過心跳線進行通信,當主節點出現服務異常,備用節點通過探測判斷主節點是否存活,若是不存活,就把服務接管過來。 Web1和Web2中間有一根心跳線,檢查對方的存活狀態。流動IP:也叫vip是對外提供服務的ip,正常情況下是配置在Web1上的,當Web1宕機後,Web2會自動配置 ...
  • Linux 三劍客是(grep,sed,awk)三者的簡稱,熟練使用這三個工具可以提升運維效率。Linux 三劍客以正則表達式作為基礎,而在Linux系統中,支持兩種正則表達式,分別為“標準正則表達式”和“擴展正則表達式”。在掌握好正則表達式後,將具體講解三劍客的用法。 一、正則表達式 可以看到標準 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MX RT學習資源。 ...
  • 前面已經分析了linux記憶體管理演算法(伙伴管理演算法)的準備工作。 具體的演算法初始化則回到start_kernel()函數接著往下走,下一個函數是mm_init(): 乍看僅僅是幾個函數的調用,實際上這裡的事情遠遠沒這麼簡單。其中page_cgroup_init_flatmem()與cgroup相關, ...
  • 前面分析了memblock演算法、內核頁表的建立、記憶體管理框架的構建,這些都是x86處理的setup_arch()函數裡面初始化的,因地制宜,具有明顯處理器的特征。而start_kernel()接下來的初始化則是linux通用的記憶體管理演算法框架了。 build_all_zonelists()用來初始化 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...