附013.Kubernetes永久存儲Rook部署

来源:https://www.cnblogs.com/itzgr/archive/2020/03/18/12516141.html
-Advertisement-
Play Games

一 Rook概述 1.1 Ceph簡介 Ceph是一種高度可擴展的分散式存儲解決方案,提供對象、文件和塊存儲。在每個存儲節點上,將找到Ceph存儲對象的文件系統和Ceph OSD(對象存儲守護程式)進程。在Ceph集群上,還存在Ceph MON(監控)守護程式,它們確保Ceph集群保持高可用性。 更 ...


一 Rook概述

1.1 Ceph簡介

Ceph是一種高度可擴展的分散式存儲解決方案,提供對象、文件和塊存儲。在每個存儲節點上,將找到Ceph存儲對象的文件系統和Ceph OSD(對象存儲守護程式)進程。在Ceph集群上,還存在Ceph MON(監控)守護程式,它們確保Ceph集群保持高可用性。 更多Ceph介紹參考:https://www.cnblogs.com/itzgr/category/1382602.html

1.2 Rook簡介

Rook 是一個開源的cloud-native storage編排, 提供平臺和框架;為各種存儲解決方案提供平臺、框架和支持,以便與雲原生環境本地集成。目前主要專用於Cloud-Native環境的文件、塊、對象存儲服務。它實現了一個自我管理的、自我擴容的、自我修複的分散式存儲服務。 Rook支持自動部署、啟動、配置、分配(provisioning)、擴容/縮容、升級、遷移、災難恢復、監控,以及資源管理。為了實現所有這些功能,Rook依賴底層的容器編排平臺,例如 kubernetes、CoreOS 等。。 Rook 目前支持Ceph、NFS、Minio Object Store、Edegefs、Cassandra、CockroachDB 存儲的搭建。 Rook機制:
  • Rook 提供了捲插件,來擴展了 K8S 的存儲系統,使用 Kubelet 代理程式 Pod 可以掛載 Rook 管理的塊設備和文件系統。
  • Rook Operator 負責啟動並監控整個底層存儲系統,例如 Ceph Pod、Ceph OSD 等,同時它還管理 CRD、對象存儲、文件系統。
  • Rook Agent 代理部署在 K8S 每個節點上以 Pod 容器運行,每個代理 Pod 都配置一個 Flexvolume 驅動,該驅動主要用來跟 K8S 的捲控制框架集成起來,每個節點上的相關的操作,例如添加存儲設備、掛載、格式化、刪除存儲等操作,都有該代理來完成。
更多參考如下官網: https://rook.io https://ceph.com/

1.3 Rook架構

Rook架構如下: clipboard Kubernetes集成Rook架構如下: clipboard

二 Rook部署

2.1 前期規劃

提示:本實驗不涉及Kubernetes部署,Kubernetes部署參考《附012.Kubeadm部署高可用Kubernetes》。
主機 IP 磁碟 備註
k8smaster01 172.24.8.71 Kubernetes master節點
k8smaster02 172.24.8.72 Kubernetes master節點
k8smaster03 172.24.8.73 Kubernetes master節點
k8snode01 172.24.8.74 sdb Kubernetes node節點 Ceph節點
k8snode02 172.24.8.75 sdb Kubernetes node節點 Ceph節點
k8snode03 172.24.8.76 sdb Kubernetes node節點 Ceph節點
裸磁碟規劃
k8snode01 k8snode02 k8snode03
Disk sdb sdb sdb

2.2 獲取YAML

[root@k8smaster01 ~]# git clone https://github.com/rook/rook.git

2.3 部署Rook Operator

本實驗使用k8snode01——k8snode03三個節點,因此需要如下修改: [root@k8smaster01 ceph]# kubectl taint node k8smaster01 node-role.kubernetes.io/master="":NoSchedule [root@k8smaster01 ceph]# kubectl taint node k8smaster02 node-role.kubernetes.io/master="":NoSchedule [root@k8smaster01 ceph]# kubectl taint node k8smaster03 node-role.kubernetes.io/master="":NoSchedule [root@k8smaster01 ceph]# kubectl label nodes {k8snode01,k8snode02,k8snode03} ceph-osd=enabled [root@k8smaster01 ceph]# kubectl label nodes {k8snode01,k8snode02,k8snode03} ceph-mon=enabled [root@k8smaster01 ceph]# kubectl label nodes k8snode01 ceph-mgr=enabled 提示:當前版本rook中mgr只能支持一個節點運行。
[root@k8smaster01 ~]# cd /root/rook/cluster/examples/kubernetes/ceph/ [root@k8smaster01 ceph]# kubectl create -f common.yaml [root@k8smaster01 ceph]# kubectl create -f operator.yaml 解讀:如上創建了相應的基礎服務(如serviceaccounts),同時rook-ceph-operator會在每個節點創建 rook-ceph-agent 和 rook-discover。

2.4 配置cluster

[root@k8smaster01 ceph]# vi cluster.yaml
  1 apiVersion: ceph.rook.io/v1
  2 kind: CephCluster
  3 metadata:
  4   name: rook-ceph
  5   namespace: rook-ceph
  6 spec:
  7   cephVersion:
  8     image: ceph/ceph:v14.2.4-20190917
  9     allowUnsupported: false
 10   dataDirHostPath: /var/lib/rook
 11   skipUpgradeChecks: false
 12   mon:
 13     count: 3
 14     allowMultiplePerNode: false
 15   dashboard:
 16     enabled: true
 17     ssl: true
 18   monitoring:
 19     enabled: false
 20     rulesNamespace: rook-ceph
 21   network:
 22     hostNetwork: false
 23   rbdMirroring:
 24     workers: 0
 25   placement:				#配置特定節點親和力保證Node作為存儲節點
 26 #    all:
 27 #      nodeAffinity:
 28 #        requiredDuringSchedulingIgnoredDuringExecution:
 29 #          nodeSelectorTerms:
 30 #          - matchExpressions:
 31 #            - key: role
 32 #              operator: In
 33 #              values:
 34 #              - storage-node
 35 #      tolerations:
 36 #      - key: storage-node
 37 #        operator: Exists
 38     mon:
 39       nodeAffinity:
 40         requiredDuringSchedulingIgnoredDuringExecution:
 41           nodeSelectorTerms:
 42           - matchExpressions:
 43             - key: ceph-mon
 44               operator: In
 45               values:
 46               - enabled
 47       tolerations:
 48       - key: ceph-mon
 49         operator: Exists
 50     ods:
 51       nodeAffinity:
 52         requiredDuringSchedulingIgnoredDuringExecution:
 53           nodeSelectorTerms:
 54           - matchExpressions:
 55             - key: ceph-osd
 56               operator: In
 57               values:
 58               - enabled
 59       tolerations:
 60       - key: ceph-osd
 61         operator: Exists
 62     mgr:
 63       nodeAffinity:
 64         requiredDuringSchedulingIgnoredDuringExecution:
 65           nodeSelectorTerms:
 66           - matchExpressions:
 67             - key: ceph-mgr
 68               operator: In
 69               values:
 70               - enabled
 71       tolerations:
 72       - key: ceph-mgr
 73         operator: Exists
 74   annotations:
 75   resources:
 76   removeOSDsIfOutAndSafeToRemove: false
 77   storage:
 78     useAllNodes: false			#關閉使用所有Node
 79     useAllDevices: false		#關閉使用所有設備
 80     deviceFilter: sdb
 81     config:
 82         metadataDevice:
 83         databaseSizeMB: "1024"
 84         journalSizeMB: "1024"
 85     nodes:
 86     - name: "k8snode01"			#指定存儲節點主機
 87       config:
 88         storeType: bluestore	#指定類型為裸磁碟
 89       devices:
 90       - name: "sdb"			    #指定磁碟為sdb
 91     - name: "k8snode02"
 92       config:
 93         storeType: bluestore
 94       devices:
 95       - name: "sdb"
 96     - name: "k8snode03"
 97       config:
 98         storeType: bluestore
 99       devices:
100       - name: "sdb"
101   disruptionManagement:
102     managePodBudgets: false
103     osdMaintenanceTimeout: 30
104     manageMachineDisruptionBudgets: false
105     machineDisruptionBudgetNamespace: openshift-machine-api
提示:更多cluster的CRD配置參考:https://github.com/rook/rook/blob/master/Documentation/ceph-cluster-crd.md。 https://blog.gmem.cc/rook-based-k8s-storage-solution

2.5 獲取鏡像

可能由於國內環境無法Pull鏡像,建議提前pull如下鏡像: docker pull rook/ceph:master docker pull quay.azk8s.cn/cephcsi/cephcsi:v1.2.2 docker pull quay.azk8s.cn/k8scsi/csi-node-driver-registrar:v1.1.0 docker pull quay.azk8s.cn/k8scsi/csi-provisioner:v1.4.0 docker pull quay.azk8s.cn/k8scsi/csi-attacher:v1.2.0 docker pull quay.azk8s.cn/k8scsi/csi-snapshotter:v1.2.2
docker tag quay.azk8s.cn/cephcsi/cephcsi:v1.2.2 quay.io/cephcsi/cephcsi:v1.2.2 docker tag quay.azk8s.cn/k8scsi/csi-node-driver-registrar:v1.1.0 quay.io/k8scsi/csi-node-driver-registrar:v1.1.0 docker tag quay.azk8s.cn/k8scsi/csi-provisioner:v1.4.0 quay.io/k8scsi/csi-provisioner:v1.4.0 docker tag quay.azk8s.cn/k8scsi/csi-attacher:v1.2.0 quay.io/k8scsi/csi-attacher:v1.2.0 docker tag quay.azk8s.cn/k8scsi/csi-snapshotter:v1.2.2 quay.io/k8scsi/csi-snapshotter:v1.2.2

docker rmi quay.azk8s.cn/cephcsi/cephcsi:v1.2.2 docker rmi quay.azk8s.cn/k8scsi/csi-node-driver-registrar:v1.1.0 docker rmi quay.azk8s.cn/k8scsi/csi-provisioner:v1.4.0 docker rmi quay.azk8s.cn/k8scsi/csi-attacher:v1.2.0 docker rmi quay.azk8s.cn/k8scsi/csi-snapshotter:v1.2.2

2.6 部署cluster

[root@k8smaster01 ceph]# kubectl create -f cluster.yaml [root@k8smaster01 ceph]# kubectl logs -f -n rook-ceph rook-ceph-operator-cb47c46bc-pszfh #可查看部署log [root@k8smaster01 ceph]# kubectl get pods -n rook-ceph -o wide #需要等待一定時間,部分中間態容器可能會波動 clipboard 提示:若部署失敗,master節點執行[root@k8smaster01 ceph]# kubectl delete -f ./ 所有node節點執行如下清理操作: rm -rf /var/lib/rook /dev/mapper/ceph-* dmsetup ls dmsetup remove_all dd if=/dev/zero of=/dev/sdb bs=512k count=1 wipefs -af /dev/sdb

2.7 部署Toolbox

toolbox是一個rook的工具集容器,該容器中的命令可以用來調試、測試Rook,對Ceph臨時測試的操作一般在這個容器內執行。 [root@k8smaster01 ceph]# kubectl create -f toolbox.yaml [root@k8smaster01 ceph]# kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" NAME READY STATUS RESTARTS AGE rook-ceph-tools-59b8cccb95-9rl5l 1/1 Running 0 15s

2.8 測試Rook

[root@k8smaster01 ceph]# kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash [root@rook-ceph-tools-59b8cccb95-9rl5l /]# ceph status #查看Ceph狀態 clipboard [root@rook-ceph-tools-59b8cccb95-9rl5l /]# ceph osd status clipboard [root@rook-ceph-tools-59b8cccb95-9rl5l /]# ceph df clipboard [root@rook-ceph-tools-59b8cccb95-9rl5l /]# rados df clipboard [root@rook-ceph-tools-59b8cccb95-9rl5l /]# ceph auth ls #查看Ceph所有keyring [root@rook-ceph-tools-59b8cccb95-9rl5l /]# ceph version ceph version 14.2.4 (75f4de193b3ea58512f204623e6c5a16e6c1e1ba) nautilus (stable) 提示:更多Ceph管理參考《008.RHCS-管理Ceph存儲集群》,如上工具中也支持使用獨立的ceph命令ceph osd pool create ceph-test 512創建相關pool,實際Kubernetes rook中,不建議直接操作底層Ceph,以防止上層Kubernetes而言數據不一致性。

2.10 複製key和config

為方便管理,可將Ceph的keyring和config在master節點也創建一份,從而實現在Kubernetes外部宿主機對rook Ceph集群的簡單查看。 [root@k8smaster01 ~]# kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') cat /etc/ceph/ceph.conf > /etc/ceph/ceph.conf [root@k8smaster01 ~]# kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') cat /etc/ceph/keyring > /etc/ceph/keyring
[root@k8smaster01 ceph]# tee /etc/yum.repos.d/ceph.repo <<-'EOF' [Ceph] name=Ceph packages for $basearch baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/$basearch enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1
[Ceph-noarch] name=Ceph noarch packages baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1
[ceph-source] name=Ceph source packages baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 EOF [root@k8smaster01 ceph]# yum -y install ceph-common ceph-fuse #安裝客戶端 [root@k8smaster01 ~]# ceph status
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、進程描述符 進程式控制制塊PCB:是OS控制進程運行用的數據結構,是一個task_struct結構體。 PCB包括:進程標識信息(進程標識符PID等)、執行現場信息(CPU現場,進程切換時需要保存現場信息)、進程映像信息(進程地址空間,即進程在運行時代碼、數據、棧放在什麼位置,方便OS對地址空間進行 ...
  • 最近使用了parallels desktop 安裝了win10,啟動後發現會導致mac無聲音。後來百度到重啟coreaudiod進程可解決(在活動監視器里直接結束該進程後會自動重啟) 參考鏈接:MAC技巧:兩個方法,輕鬆解決蘋果電腦沒聲音! https://baijiahao.baidu.com/s ...
  • 命令幾乎是每個程式員都會用到的Linux命令。這個命令用來查看Linux系統的綜合性能,比如CPU使用情況,記憶體使用情況。這個命令能幫助我快速定位程式的性能問題。 雖然這個命令很重要,但是之前對於這個命令的使用幾乎僅限於查看下哪個進程使用的CPU最高,哪個進程占用的記憶體最高。對於輸出的各個參數的含義 ...
  • 虛擬機沒有VMnet0 橋接模式,你可以試試以下幾種方式,儘量都試試,因為具體情況原因有很多種!! 首先打開虛擬網路編輯器,發現沒有橋接。。。深吸一口氣,說我沒有毒!!! 一、先右擊開始 網路連接 更改網路適配器,查看一下是否有下麵這倆個 如果沒有,試試最靠命運的方法,重啟主機!!!(win10這樣 ...
  • 一 kube-proxy原理 1.1 kube-proxy概述 Kubernetes為了支持集群的水平擴展、高可用性,抽象出了Service的概念。Service是對一組Pod的抽象,它會根據訪問策略(如負載均衡策略)來訪問這組Pod。Kubernetes在創建Service時會為Service分配 ...
  • 一 kubelet概述 1.1 kubelet作用 在Kubernetes集群中,在每個Node(又稱Minion)上都會啟動一個kubelet服務進程。該進程用於處理Master下發到本節點的任務,管理Pod及Pod中的容器。每個kubelet進程都會在API Server上註冊節點自身的信息,定 ...
  • 一 Scheduler原理 1.1 原理解析 Kubernetes Scheduler是負責Pod調度的重要功能模塊,Kubernetes Scheduler在整個系統中承擔了“承上啟下”的重要功能,“承上”是指它負責接收Controller Manager創建的新Pod,為其調度至目標Node;“ ...
  • 從linux系統中獲取的時間戳信息通常為s,將其轉換的公式為: =TEXT((C4/1000+8*3600)/86400+70*365+19,"yyyy-mm-dd hh:mm:ss") 其中C4單元格所存的數據為ms因此需要除以1000 轉換後的結果如下: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...