給小白的 PG 容器化部署教程(下)

作者:王志斌

編輯:鐘華龍

本文來自社區(qū)小伙伴 王志斌 的投稿辨泳。從小白的角度蓖扑,帶你一步步實現(xiàn)將 RadonDB PostgreSQL 集群部署到 Kubernetes 上唉铜。文章分為上下兩部分,《第一部 Kubernetes 環(huán)境準備》已經發(fā)布律杠。第二部分將帶大家部署一個 RadonDB PostgreSQL Operator 和集群打毛。

什么是 RadonDB PostgreSQL Operator柿赊?

RadonDB PostgreSQL 是一款基于 PostgreSQL 使用 Operator 實現(xiàn)的數據庫容器化項目。

  • 被廣泛應用于地理空間和移動領域
  • 具備高可用幻枉、穩(wěn)定性、數據完整性等性能
  • 支持在線水平擴展
  • 支持故障自動轉移 诡蜓,提供 HA 功能
  • 提供 PostgreSQL 常用參數接口熬甫,方便調整參數
  • 提供 PostGIS 插件,具備存儲蔓罚、查詢和修改空間關系的能力
  • 提供實時監(jiān)控椿肩、健康檢查、日志自動清理等功能

RadonDB PostgreSQL Operator 可基于 KubeSphere豺谈、OpenShift郑象、Rancher 等 Kubernetes 容器平臺交付〔缒可自動執(zhí)行與運行 RadonDB PostgreSQL 集群有關的任務厂榛。

RadonDB PostgreSQL Operator基于 https://github.com/CrunchyData/postgres-operator 項目實現(xiàn),進行了改進優(yōu)化丽惭,后續(xù)會持續(xù)回饋給社區(qū)击奶。

倉庫地址:https://github.com/radondb/radondb-postgresql-operator

一、部署 RadonDB PostgreSQL 集群

安裝 Helm

curl  https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

準備本地存儲

本次實驗 RadonDB PostgreSQL 集群數據持久化采用 Local Persistent Volumes责掏,以下的步驟為配置集群所使用的本地持久化存儲卷柜砾,配置一個一主一從的高可用集群,最低需要三個持久化存儲卷:

  1. PostgreSQL Primary 數據卷
  2. PostgreSQL Replica 數據卷
  3. PostgreSQL 備份卷

實際使用可以根據具體的情況换衬,靈活配置存儲卷痰驱。

大體步驟:

  1. 虛擬機添加新硬盤(每臺虛擬機分別添加一塊)
  2. 重啟虛擬機
  3. 查看現(xiàn)磁盤是否正常掛載
fdisk -l

可看到新加的虛擬硬盤,一般名為: Disk /dev/sdb
給新加的硬盤分區(qū)瞳浦。

fdisk /dev/sdb

#按照提示增加新分區(qū) 
/dev/sdb1 /dev/sdb2 /dev/sdb13

格式化磁盤分區(qū)担映。用 ext4 格式對 /dev/sdb1 進入格式化。

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
mkfs.ext4 /dev/sdb3

掛載分區(qū)术幔,創(chuàng)建新的掛載點另萤。

mkdir -p /data/pgdata/pv{1..3}

將新磁盤分區(qū)掛載到 /work 目錄下。

mount -t ext4 /dev/sdb1 /data/pgdata/pv1
mount -t ext4 /dev/sdb3 /data/pgdata/pv2
mount -t ext4 /dev/sdb4 /data/pgdata/pv3

查看掛載

df -h

可以看到新加的硬盤: /dev/sdb1 /dev/sdb2 /dev/sdb3
實現(xiàn)開機自動掛載诅挑。

vim /etc/fstab

在最后一行加入:

/dev/sdb1 /data/pgdata/pv1 ext4 defaults 0 2
/dev/sdb2 /data/pgdata/pv2 ext4 defaults 0 2
/dev/sdb3 /data/pgdata/pv3 ext4 defaults 0 2

創(chuàng)建命名空間

kubectl create namespace pgo

部署 PostgreSQL Operator

kubectl apply -f https://github.com/radondb/radondb-postgresql-operator/blob/main/installers/kubectl/postgres-operator.yml -n pgo

# 查看狀態(tài)
kubectl get all -n pgo --selector=name=postgres-operator
file

安裝靜態(tài)本地盤控制器

Kubernetes 當前支持靜態(tài)分配的本地存儲四敞。可使用 local-static-provisioner[1] 項目中的 local-volume-provisioner 程序創(chuàng)建本地存儲對象拔妥。

git clone https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner.git 
cd sig-storage-local-static-provisioner 

# 主要修改行號
vi helm/provisioner/values.yaml 

66  classes: 
67  - name: fast-disks 
70  hostDir: /data/pgdata 
76  volumeMode: Filesystem 
81  fsType: ext4
116 image: quay.io/external_storage/local-volume-provisioner:v2.4.0 

# 
helm install localprovi . -n kube-system 

# podpv 
kubectl get po -n kube-system -l app.kubernetes.io/name=provisioner
file

部署數據庫集群

啟用 PGO 客戶端忿危,創(chuàng)建數據庫集群。

kubectl exec -it -n pgo  $(kubectl get po -n pgo -l name=pgo-client  -o jsonpath='{range .items[*]}{.metadata.name}{end}')  -- bash
pgo create cluster radondb --storage-config=fast-disks

部分參數可參見下表没龙,并可執(zhí)行 pgo 命令行幫助 pgo --help 獲取更詳細的部署參數幫助铺厨。

命令行 命令說明
--pgbackrest-storage-type="s3" 備份存儲的類型缎玫。支持 posix 、s3解滓、gcs赃磨、posix,s3 和 posix,gcs五種類型。
--replica-count=3 PostgeSQL副本數量洼裤。
--ccp-image=radondb-postgres-ha 使用的鏡像名稱邻辉。 帶 gis 插件的鏡像,例如 radondb-postgres-gis-ha腮鞍。 不帶 gis 插件的鏡像值骇,例如 radondb-postgres-ha。
--ccp-image-prefix=docker.io/radondb 鏡像倉庫移国。
--ccp-image-tag=debian-14.2-2.1.1 dockerhub 上鏡像的標簽吱瘩。
--pgbackrest-s3-endpoint=s3.pek3b.qingstor.com \ --pgbackrest-s3-key=xxxxx \ --pgbackrest-s3-key-secret=xxxx \ --pgbackrest-s3-bucket=xxxx \ --pgbackrest-s3-region=xxx \ --pgbackrest-s3-verify-tls=false 支持 s3 協(xié)議的對象存儲設置,主要用于備份迹缀。若備份存儲選擇了 s3 則需要設置這部分參數使碾。
--metrics 啟用適用于 Prometheus 的指標收集器。
--pgbadger 啟用 pgbadger裹芝。
--debug 調試模式部逮。

執(zhí)行以下命令觀察集群創(chuàng)建過程。待所有 Pod 狀態(tài)切換為 Running嫂易,則集群創(chuàng)建完成兄朋。

kubectl get po -n pgo --watch

檢查 local pv 是否正常綁定

kubectl get pv -n pgo |grep ^local
file

二怜械、連接 RadonDB PostgreSQL 集群

通過執(zhí)行 pgo 命令連接颅和,獲取集群中用戶賬號信息。

pgo show user -n pgo radondb

以下以 RadonDB PostgreSQL 集群為示例缕允,獲取數據庫賬號并連接數據庫峡扩。

 pgo show user -n pgo radondb --show-system-accounts
 CLUSTER  USERNAME    PASSWORD         EXPIRES STATUS ERROR 
--------- -------------- ------------------------ ------- ------ -----
radondb ccp_monitoring Dwpa|MCg,b4M+rY.>ZC0ONz4 never  ok        
radondb postgres    1a4R-d7Po=,PS@R:-=?[gP(9 never  ok      
radondb primaryuser   =B8x*Haf*dCq+V4hkGSfh/.} never  ok      
radondb testuser    yTFeeH1|^DX<Bx4[?:B_/Q;M never  ok 

此外,還可以通過 psql 工具連接障本。

查看服務:

kubectl -n pgo get svc
NAME               TYPE     CLUSTER-IP    EXTERNAL-IP  PORT(S)                 AGE
postgres-operator         ClusterIP  10.96.64.37   <none>     8443/TCP,4171/TCP,4150/TCP       58m
radondb             ClusterIP  10.96.171.227  <none>     10000/TCP,9187/TCP,2022/TCP,5432/TCP  5m42s
radondb-backrest-shared-repo  ClusterIP  10.96.235.247  <none>     2022/TCP                5m42s
radondb-pgbouncer        ClusterIP  10.96.234.49   <none>     5432/TCP                4m16s
radondb-replica         ClusterIP  10.96.67.45   <none>     10000/TCP,9187/TCP,2022/TCP,5432/TCP  3m50s

以 testuser 賬號為示例教届,連接到數據庫。

kubectl -n pgo port-forward svc/radondb 5432:5432 
PGPASSWORD='xxxxxxxxxxxxxxxxxxxxxxxx' psql -h localhost -p 5432 -U testuser radondb

查看集群

kubectl exec -it rp1-65798ccf5c-ftbp9 -n pgo -c database bash
file

可以看到圖中為 3 節(jié)點集群驾霜。至此案训,RadonDB PostgreSQL 容器化數據庫搭建完成。

引用鏈接

1.local-static-provisioner:https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner

致謝

RadonDB 開源社區(qū)向本文的投稿作者表示感謝粪糙!也期待更多的社區(qū)小伙伴的投稿~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末强霎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蓉冈,更是在濱河造成了極大的恐慌城舞,老刑警劉巖轩触,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異家夺,居然都是意外死亡脱柱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進店門拉馋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褐捻,“玉大人,你說我怎么就攤上這事椅邓。” “怎么了昧狮?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵景馁,是天一觀的道長。 經常有香客問我逗鸣,道長合住,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任撒璧,我火速辦了婚禮透葛,結果婚禮上,老公的妹妹穿的比我還像新娘卿樱。我一直安慰自己僚害,他們只是感情好,可當我...
    茶點故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布繁调。 她就那樣靜靜地躺著萨蚕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹄胰。 梳的紋絲不亂的頭發(fā)上岳遥,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天,我揣著相機與錄音裕寨,去河邊找鬼浩蓉。 笑死,一個胖子當著我的面吹牛宾袜,可吹牛的內容都是我干的捻艳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼试和,長吁一口氣:“原來是場噩夢啊……” “哼讯泣!你這毒婦竟也來了?” 一聲冷哼從身側響起阅悍,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤好渠,失蹤者是張志新(化名)和其女友劉穎昨稼,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體拳锚,經...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡假栓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了霍掺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匾荆。...
    茶點故事閱讀 38,563評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖杆烁,靈堂內的尸體忽然破棺而出牙丽,到底是詐尸還是另有隱情邪锌,我是刑警寧澤腺怯,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布拂酣,位于F島的核電站赏迟,受9級特大地震影響轻掩,放射性物質發(fā)生泄漏鳞尔。R本人自食惡果不足惜浅侨,卻給世界環(huán)境...
    茶點故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一溪北、第九天 我趴在偏房一處隱蔽的房頂上張望智玻。 院中可真熱鬧遂唧,春花似錦、人聲如沸吊奢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽事甜。三九已至谬泌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逻谦,已是汗流浹背掌实。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邦马,地道東北人贱鼻。 一個月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像滋将,于是被迫代替她去往敵國和親邻悬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,435評論 2 348

推薦閱讀更多精彩內容