附009.Kubernetes永久存儲之GlusterFS獨立部署

来源:https://www.cnblogs.com/itzgr/archive/2019/11/22/11913342.html
-Advertisement-
Play Games

一 前期準備 1.1 基礎知識 Heketi提供了一個RESTful管理界面,可以用來管理GlusterFS捲的生命周期。Heketi會動態在集群內選擇bricks構建所需的volumes,從而確保數據的副本會分散到集群不同的故障域內。同時Heketi還支持任意數量的ClusterFS集群。 提示: ...


一 前期準備

1.1 基礎知識

Heketi提供了一個RESTful管理界面,可以用來管理GlusterFS捲的生命周期。Heketi會動態在集群內選擇bricks構建所需的volumes,從而確保數據的副本會分散到集群不同的故障域內。同時Heketi還支持任意數量的ClusterFS集群。 提示:本實驗基於glusterfs和Kubernetes分開部署,heketi管理glusterfs,Kubernetes使用heketi提供的API,從而實現glusterfs的永久存儲,,而非Kubernetes部署glusterfs。

1.2 架構示意


clipboard 提示:本實驗Heketi僅管理單zone的glusterfs集群。

1.3 相關規劃

主機 IP 磁碟 備註
servera 172.24.8.41 sdb glusterfs節點
serverb 172.24.8.42 sdb glusterfs節點
serverc 172.24.8.43 sdb glusterfs節點
heketi 172.24.8.44 Heketi主機

servera serverb serverc
PV sdb1 sdb1 sdb1
VG vg0 vg0 vg0
LV datalv datalv datalv
bricks目錄 /bricks/data /bricks/data /bricks/data

1.4 其他準備

所有節點NTP配置; 所有節點添加相應主機名解析: 172.24.8.41 servera 172.24.8.42 serverb 172.24.8.43 serverc 172.24.8.44 heketi 註意:若非必要,建議關閉防火牆和SELinux。

二 規劃相應存儲捲

2.1 劃分LVM

  1 [root@servera ~]# fdisk /dev/sdb				#創建lvm的sdb1,過程略
  2 [root@servera ~]# pvcreate /dev/sdb1			#使用/dev/vdb1創建PV
  3 [root@servera ~]# vgcreate vg0 /dev/sdb1			#創建vg
  4 [root@servera ~]# lvcreate -L 15G -T vg0/thinpool		#創建支持thin的lv池
  5 [root@servera ~]# lvcreate -V 10G -T vg0/thinpool -n datalv	#創建相應brick的lv
  6 [root@servera ~]# vgdisplay					#驗證確認vg信息
  7 [root@servera ~]# pvdisplay					#驗證確認pv信息
  8 [root@servera ~]# lvdisplay					#驗證確認lv信息
提示:serverb、serverc類似操作,根據規劃需求創建完所有基於LVM的brick。

三 安裝glusterfs

3.1 安裝相應RPM源

  1 [root@servera ~]# yum -y install centos-release-gluster
提示:serverb、serverc、client類似操作,安裝相應glusterfs源; 安裝相應源之後,會在/etc/yum.repos.d/目錄多出文件CentOS-Storage-common.repo,內容如下:
  1 # CentOS-Storage.repo
  2 #
  3 # Please see http://wiki.centos.org/SpecialInterestGroup/Storage for more
  4 # information
  5 
  6 [centos-storage-debuginfo]
  7 name=CentOS-$releasever - Storage SIG - debuginfo
  8 baseurl=http://debuginfo.centos.org/$contentdir/$releasever/storage/$basearch/
  9 gpgcheck=1
 10 enabled=0
 11 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage

3.2 安裝glusterfs

  1 [root@servera ~]# yum -y install glusterfs-server
提示:serverb、serverc類似操作,安裝glusterfs服務端。

3.3 啟動glusterfs

  1 [root@servera ~]# systemctl start glusterd
  2 [root@servera ~]# systemctl enable glusterd
提示:serverb、serverc類似操作,所有節點啟動glusterfs服務端; 安裝完glusterfs之後建議exit退出終端重新登錄,從而可以補全glusterfs相關命令。

3.4 添加信任池

  1 [root@servera ~]# gluster peer probe serverb
  2 peer probe: success.
  3 [root@servera ~]# gluster peer probe serverc
  4 peer probe: success.
  5 [root@servera ~]# gluster peer status		#查看信任池狀態
  6 [root@servera ~]# gluster pool list			#查看信任池列表
clipboard 提示:加信任池的操作,只需要在servera、serverb、serverc所有集群節點主機中的任意一臺上面執行添加其他三個節點的操作即可。 提示:若未關閉防火牆,在添加信任池之前必須放通防火牆相應規則,操作如下:
  1 [root@servera ~]# firewall­cmd ­­permanent ­­add­service=glusterfs
  2 [root@servera ~]# firewall­cmd ­­permanent ­­add­service=nfs
  3 [root@servera ~]# firewall­cmd ­­permanent ­­add­service=rpc­bind
  4 [root@servera ~]# firewall­cmd ­­permanent ­­add­service=mountd
  5 [root@servera ~]# firewall­cmd ­­permanent ­­add­port=5666/tcp
  6 [root@servera ~]# firewall­cmd ­­reload

四 部署Heketi

4.1 安裝heketi服務

  1 [root@heketi ~]# yum -y install centos-release-gluster
  2 [root@heketi ~]# yum -y install heketi heketi-client

4.2 配置heketi

  1 [root@heketi ~]# vi /etc/heketi/heketi.json
  2 {
  3   "_port_comment": "Heketi Server Port Number",
  4   "port": "8080",					#預設埠
  5 
  6   "_use_auth": "Enable JWT authorization. Please enable for deployment",
  7   "use_auth": true,					#基於安全考慮開啟認證
  8 
  9   "_jwt": "Private keys for access",
 10   "jwt": {
 11     "_admin": "Admin has access to all APIs",
 12     "admin": {
 13       "key": "admin123"					#管理員密碼
 14     },
 15     "_user": "User only has access to /volumes endpoint",
 16     "user": {
 17       "key": "xianghy"					#普通用戶
 18     }
 19   },
 20 
 21   "_glusterfs_comment": "GlusterFS Configuration",
 22   "glusterfs": {
 23     "_executor_comment": [
 24       "Execute plugin. Possible choices: mock, ssh",
 25       "mock: This setting is used for testing and development.",	#用於測試
 26       "      It will not send commands to any node.",
 27       "ssh:  This setting will notify Heketi to ssh to the nodes.",	#ssh方式
 28       "      It will need the values in sshexec to be configured.",
 29       "kubernetes: Communicate with GlusterFS containers over",		#在GlusterFS由kubernetes創建時採用
 30       "            Kubernetes exec api."
 31     ],
 32     "executor": "ssh",
 33 
 34     "_sshexec_comment": "SSH username and private key file information",
 35     "sshexec": {
 36       "keyfile": "/etc/heketi/heketi_key",
 37       "user": "root",
 38       "port": "22",
 39       "fstab": "/etc/fstab"
 40     },
 41 ……
 42 ……
 43     "loglevel" : "warning"
 44   }
 45 }

4.3 配置免秘鑰

  1 [root@heketi ~]# ssh-keygen -t rsa -q -f /etc/heketi/heketi_key -N ""
  2 [root@heketi ~]# chown heketi:heketi /etc/heketi/heketi_key
  3 [root@heketi ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@servera
  4 [root@heketi ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@serverb
  5 [root@heketi ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@serverc

4.4 啟動heketi

  1 [root@heketi ~]# systemctl enable heketi.service
  2 [root@heketi ~]# systemctl start heketi.service
  3 [root@heketi ~]# systemctl status heketi.service
  4 [root@heketi ~]# curl http://localhost:8080/hello		#測試訪問
  5 Hello from Heketi

4.5 配置Heketi拓撲

       拓撲信息用於讓Heketi確認可以使用的存儲節點、磁碟和集群,必須自行確定節點的故障域。故障域是賦予一組節點的整數值,這組節點共用相同的交換機、電源或其他任何會導致它們同時失效的組件。必須確認哪些節點構成一個集群,Heketi使用這些信息來確保跨故障域中創建副本,從而提供數據冗餘能力,Heketi支持多個Gluster存儲集群。 配置Heketi拓撲註意以下幾點:
  • 可以通過topology.json文件定義組建的GlusterFS集群;
  • topology指定了層級關係:clusters --> nodes --> node/devices --> hostnames/zone;
  • node/hostnames欄位的manage建議填寫主機ip,指管理通道,註意當heketi伺服器不能通過hostname訪問GlusterFS節點時不能填寫hostname;
  • node/hostnames欄位的storage建議填寫主機ip,指存儲數據通道,與manage可以不一樣,生產環境管理網路和存儲網路建議分離;
  • node/zone欄位指定了node所處的故障域,heketi通過跨故障域創建副本,提高數據高可用性質,如可以通過rack的不同區分zone值,創建跨機架的故障域;
  • devices欄位指定GlusterFS各節點的盤符(可以是多塊盤),必須是未創建文件系統的裸設備。
  1 [root@heketi ~]# vi /etc/heketi/topology.json
  2 {
  3     "clusters": [
  4         {
  5             "nodes": [
  6                 {
  7                     "node": {
  8                         "hostnames": {
  9                             "manage": [
 10                                 "172.24.8.41"
 11                             ],
 12                             "storage": [
 13                                 "172.24.8.41"
 14                             ]
 15                         },
 16                         "zone": 1
 17                     },
 18                     "devices": [
 19                         "/dev/mapper/vg0-datalv"
 20                     ]
 21                 },
 22                 {
 23                     "node": {
 24                         "hostnames": {
 25                             "manage": [
 26                                 "172.24.8.42"
 27                             ],
 28                             "storage": [
 29                                 "172.24.8.42"
 30                             ]
 31                         },
 32                         "zone": 1
 33                     },
 34                     "devices": [
 35                         "/dev/mapper/vg0-datalv"
 36                     ]
 37                 },
 38                 {
 39                     "node": {
 40                         "hostnames": {
 41                             "manage": [
 42                                 "172.24.8.43"
 43                             ],
 44                             "storage": [
 45                                 "172.24.8.43"
 46                             ]
 47                         },
 48                         "zone": 1
 49                     },
 50                     "devices": [
 51                         "/dev/mapper/vg0-datalv"
 52                     ]
 53                 }
 54             ]
 55         }
 56     ]
 57 }
 58 
 59 [root@heketi ~]# echo "export HEKETI_CLI_SERVER=http://heketi:8080" >> /etc/profile.d/heketi.sh
 60 [root@heketi ~]# echo "alias heketi-cli='heketi-cli --user admin --secret admin123'" >> .bashrc
 61 [root@heketi ~]# source /etc/profile.d/heketi.sh
 62 [root@heketi ~]# source .bashrc
 63 [root@heketi ~]# echo $HEKETI_CLI_SERVER
 64 http://heketi:8080
 65 [root@heketi ~]# heketi-cli --server $HEKETI_CLI_SERVER --user admin --secret admin123 topology load --json=/etc/heketi/topology.json
clipboard

4.6 集群管理

  1 [root@heketi ~]# heketi-cli cluster list					#集群列表
  2 [root@heketi ~]# heketi-cli cluster info aa83b0045fafa362bfc7a8bfee0c24ad	#集群詳細信息
  3 Cluster id: aa83b0045fafa362bfc7a8bfee0c24ad
  4 Nodes:
  5 189ee41572ebf0bf1e297de2302cfb39
  6 46429de5666fc4c6cc570da4b100465d
  7 be0209387384299db34aaf8377c3964c
  8 Volumes:
  9 
 10 Block: true
 11 
 12 File: true
 13 [root@heketi ~]# heketi-cli topology info aa83b0045fafa362bfc7a8bfee0c24ad	#查看拓撲信息
clipboard
  1 [root@heketi ~]# heketi-cli node list						#捲信息
  2 Id:189ee41572ebf0bf1e297de2302cfb39     Cluster:aa83b0045fafa362bfc7a8bfee0c24ad
  3 Id:46429de5666fc4c6cc570da4b100465d     Cluster:aa83b0045fafa362bfc7a8bfee0c24ad
  4 Id:be0209387384299db34aaf8377c3964c     Cluster:aa83b0045fafa362bfc7a8bfee0c24ad
  5 [root@heketi ~]# heketi-cli node info 189ee41572ebf0bf1e297de2302cfb39		#節點信息
  6 [root@heketi ~]# heketi-cli volume create --size=2 --replica=2			#預設為3副本的replica模式
clipboard
  1 [root@heketi ~]# heketi-cli volume list						#捲信息
  2 [root@heketi ~]# heketi-cli volume info 7da55685ebeeaaca60708cd797a5e391
  3 [root@servera ~]# gluster volume info						#通過glusterfs節點查看

4.7 測試驗證

  1 [root@heketi ~]# yum -y install centos-release-gluster
  2 [root@heketi ~]# yum -y install glusterfs-fuse					#安裝glusterfs-fuse
  3 [root@heketi ~]# mount -t glusterfs 172.24.8.41:vol_7da55685ebeeaaca60708cd797a5e391 /mnt
clipboard
  1 [root@heketi ~]# umount /mnt
  2 [root@heketi ~]# heketi-cli volume delete 7da55685ebeeaaca60708cd797a5e391	#驗證完畢刪除
參考:https://www.jianshu.com/p/1069ddaaea78 https://www.cnblogs.com/panwenbin-logs/p/10231859.html

五 Kubernetes動態掛載glusterfs

5.1 StorageClass動態存儲

kubernetes共用存儲provider模式: 靜態模式(Static):集群管理員手工創建PV,在定義PV時設置後端存儲的特性; 動態模式(Dynamic):集群管理員不需要手工創建PV,而是通過StorageClass的設置對後端存儲進行描述,標記為某種"類型(Class)";此時要求PVC對存儲的類型進行說明,系統將自動完成PV的創建及與PVC的綁定;PVC可以聲明Class為"",說明PVC禁止使用動態模式。 基於StorageClass的動態存儲供應整體過程如下圖所示: clipboard
  1. 集群管理員預先創建存儲類(StorageClass);
  2. 用戶創建使用存儲類的持久化存儲聲明(PVC:PersistentVolumeClaim);
  3. 存儲持久化聲明通知系統,它需要一個持久化存儲(PV: PersistentVolume);
  4. 系統讀取存儲類的信息;
  5. 系統基於存儲類的信息,在後臺自動創建PVC需要的PV;
  6. 用戶創建一個使用PVC的Pod;
  7. Pod中的應用通過PVC進行數據的持久化;
  8. 而PVC使用PV進行數據的最終持久化處理。
提示:關於Kubernetes的部署參考《附003.Kubeadm部署Kubernetes》。

5.2 定義StorageClass

關鍵字說明:
  • provisioner:表示存儲分配器,需要根據後端存儲的不同而變更;
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • asp.net 使用NPOI讀取excel文件內容 NPOI下載地址:NPOI public class ExcelHelper { /// <summary> /// 讀取Excel文件數據到DataSet,一個Sheet對應一個DataTable /// </summary> /// <para ...
  • asp.net 根據html模板導出excel public class ExcelHelper { /// <summary> /// 根據html模板文件生成excel文件 /// </summary> /// <param name="ds">數據源</param> /// <param na ...
  • 場景 在Winfom中可以在頁面上多個按鈕或者右鍵的點擊事件中觸發同一個自定義的委托事件。 實現 在位置一按鈕點擊事件中觸發 string parentPath = System.IO.Directory.GetParent("指定路徑").ToString(); //獲取指定路徑的父級目錄並作為參 ...
  • 下載安裝並啟動apache服務 apache伺服器的目錄及存放文件的作用 /etc/httpd/conf:該目錄存放Apache伺服器的配置文件 /var/www/html:該目錄是Apache伺服器的預設站點根目錄 /etc/httpd/logs:Apache伺服器的日誌文件目錄 測試apache ...
  • 打開vim編輯器 vim編輯器的工作模式 游標的移動 翻頁 行內快速跳轉 行間快速跳轉 行號顯示 複製/粘貼/刪除 複製 粘貼 刪除 文件內容查找 撤銷編輯 保存文件及退出vim編輯器 保存文件 退出編輯器 保存文件退出編輯器 文件內容替換 ...
  • 用戶與用戶組的概念 超級用戶 擁有對系統的最高管理許可權,預設是 root 用戶 普通用戶 只能對自己目錄下的文件進行訪問和修改,具有登錄系統的許可權。 虛擬用戶 也叫“偽”用戶,這類用戶最大的特點是不能登錄系統,它們的存在主要是 方便系統管理,滿足相應的系統進程對文件屬主的要求。 主要組 每個用戶有且 ...
  • 最近的項目中,有一個編寫linux shell腳本的任務。由於之前不是很熟悉,在這個過程中遇到了很多困難,查找了很多資料,也收穫了很多。下麵是linux shell腳本中常用的知識總結。 1基礎語法 1.1變數 使用一個定義過的變數,只要在變數名前面加美元符號即可 `echo $your_name` ...
  • 需求是統計某個業務的訪問個數日誌伺服器上的目錄結構是如下,搜索最近7天的指定關鍵字數據,併排重統計個數: for迴圈的一行表示形式for ((i=15;i<=21;i++));do xxx;donewhile迴圈的一行表示 while true;do xxx;done獲取當前年月`date +%Y- ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...