中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何通過Rancher在K8S上運行PostgreSQL數據庫

發布時間:2021-11-26 14:54:37 來源:億速云 閱讀:229 作者:柒染 欄目:開發技術

這篇文章將為大家詳細講解有關如何通過Rancher在K8S上運行PostgreSQL數據庫,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

通過Rancher Kubernetes Engine運行高可用 PostgreSQL

Rancher Kubernetes Engine (RKE)是一個輕量級的Kubernetes 安裝程序,支持在裸金屬和虛擬機上安裝Kubernetes。RKE解決了Kubernetes安裝的復雜性問題。通過RKE安裝是比較簡單的,而跟下層的操作系統無關。

Portworx是一個云原生的存儲和數據管理平臺,來支撐Kubernetes上持久性的工作負載。通過Portworx,用戶能夠管理不同基礎架構上的、不同容器調度器上的數據庫。它為所有的有狀態服務(Stateful Service)提供了一個單一的數據管理層。

小編列出了操作步驟:通過RancherKubernetes Engine (RKE),在AWS的Kubernetes集群上,部署和管理高可用PostgreSQL集群。

總結來說,在Amazon上運行高可用PostgreSQL,需要:

  1.   通過Rancher KubernetesEngine安裝一個Kubernetes集群

  2.  安裝云原生存儲解決方案Portworx,作為Kubernetes的一個DaemonSet。

  3.   建立一個存儲類來定義你的存儲要求,比如,復制因子,快照策略和性能情況

  4.  使用Kubernetes部署PostgreSQL

  5.  通過killing或者cordoning集群中的節點,來測試故障恢復

  6. 可能的話,動態的調整PG Volume的大小,快照和備份Postgres到S3

如何通過RKE來創建一個Kubernetes集群

RKE是一個安裝和配置Kubernetes的工具。可以支持的環境包括裸金屬,虛擬機或者IaaS。我們會在AWS EC2上創建一個3節點的Kubernetes集群。

更為詳細的步驟,可以參考這篇tutorial from The New Stack. (https://thenewstack.io/run-stateful-containerized-workloads-with-rancher-kubernetes-engine-and-portworx/)

做完這些操作,我們會創建一個1 master 和 3 worker 節點的集群。

如何通過Rancher在K8S上運行PostgreSQL數據庫

在Kubernetes上安裝Portworx

在RKE的Kubernetes 上安裝Portworx,跟在Kubernetes集群上通過Kops安裝沒什么不同。Portworx有詳細的文檔,列出每步的操作 (https://docs.portworx.com/portworx-install-with-kubernetes/cloud/aws/),來完成在AWS環境的Kubernetes上運行Portworx集群。

The New Stacktutorial(https://thenewstack.io/run-stateful-containerized-workloads-with-rancher-kubernetes-engine-and-portworx/) 也包含了在Kubernetes部署Portworx DaemonSet的所有操作步驟。

如何通過Rancher在K8S上運行PostgreSQL數據庫

Kubernetes集群運行起來,Portworx安裝和配置完成,我們就開始部署一個高可用的PostgreSQL數據庫。

創建一個Postgres 存儲類

通過存儲類對象,一個Admin可以定義集群中不同的Portworx卷的類。這些類在動態的卷的部署過程中會被用到。存儲類本身定義了復制因子,IO情況(例如數據庫或者CMS),以及優先級(比如SSD或者HDD)。這些參數影響著工作負載的可用性和輸出,因此參數可以被根據每個卷分別設置。這很重要,因為對生產系統的數據庫的要求,跟研發測試系統是完全不一樣的。

在下面的例子里,我們部署的存儲類,它的復制因子是3,IO情況設定成“db”,優先級設定成“high”。這意味著存儲會被優化為適合低傳輸速率的數據庫負載(Postgres),并且自動的部署在集群具備最高性能的存儲里。

$ kubectl create -f https://raw.githubusercontent.com/fmrtl73/katacoda-scenarios-1/master/px-k8s-postgres-all-in-one/assets/px-repl3-sc.yamlstorageclass "px-repl3-sc" created

創建一個Postgres PVC

我們現在可以基于存儲類創建一個PersistentVolume Claim (PVC)。動態部署的優勢就在于,claims能夠在不需要顯性部署持久卷Persistent Volume (PV)的情況下被創建。

$ kubectl create -f https://raw.githubusercontent.com/fmrtl73/katacoda-scenarios-1/master/px-k8s-postgres-all-in-one/assets/px-postgres-pvc.yamlpersistentvolumeclaim "px-postgres-pvc" created

PostgreSQL的密碼會被創建成Secret。運行下面的命令來用正確的格式創建Secret。

$ echo postgres123 > password.txt
$ tr -d '\n' .strippedpassword.txt && mv .strippedpassword.txt password.txt
$ kubectl create secret generic postgres-pass --from-file=password.txt
secret "postgres-pass" created

在Kubernetes上部署PostgreSQL

最后,讓我們創建一個PostgreSQL實例,作為一個Kubernetes部署對象。為了簡單起見,我們只部署一個單獨的Postgres Pod。因為Portworx提供同步復制來達到高可用。因此一個單獨的Postgres實例,是Postgres數據庫的最佳部署方式。Portworx也支持多節點的Postgres部署方式,看你的需要。

$ kubectl create -f https://raw.githubusercontent.com/fmrtl73/katacoda-scenarios-1/master/px-k8s-postgres-all-in-one/assets/postgres-app.yamldeployment "postgres" created

確保Postgres的Pods是在運行的狀態。

$ kubectl get pods -l app=postgres -o wide --watch

如何通過Rancher在K8S上運行PostgreSQL數據庫

等候直到Postgres pod變成運行狀態。

如何通過Rancher在K8S上運行PostgreSQL數據庫

我們可以通過使用與PostgresPod一起運行的pxctl工具,來檢查Portworx卷。

$ VOL=`kubectl get pvc | grep px-postgres-pvc | awk '{print $3}'`$ PX_POD=$(kubectl get pods -l name=portworx -n kube-system -o jsonpath='{.items[0].metadata.name}')$ kubectl exec -it $PX_POD -n kube-system -- /opt/pwx/bin/pxctl volume inspect ${VOL}

如何通過Rancher在K8S上運行PostgreSQL數據庫

命令的輸出信息,確認了支撐PostgreSQL數據庫實例的卷已經被創建完成了。

PostgreSQL的錯誤恢復

讓我們為數據庫填充5百萬行的樣例數據。

我們首先找到運行PostgreSQL的Pod,來訪問shell。

$ POD=`kubectl get pods -l app=postgres | grep Running | grep 1/1 | awk '{print $1}'`$ kubectl exec -it $POD bash

現在我們進入了Pod,我們能夠連接到Postgres并且創建數據庫。

# psqlpgbench=# create database pxdemo;pgbench=# \lpgbench=# \q

如何通過Rancher在K8S上運行PostgreSQL數據庫

默認狀態下,Pgbench會創建4張表:(pgbench_branches,pgbench_tellers,pgbench_accounts,pgbench_history),在主pgbench_accounts表里會有10萬行。這樣我們創建了一個簡單的16MB大小的數據庫。

使用-s選項, 我們可以增加在每張表中的行的數量。在上面的命令中,我們在“scaling”上填寫了50,這樣pgbench就會創建一個50倍默認大小的數據庫。

我們的pgbench_accounts現在有5百萬行了。這樣我們的數據庫變成了800MB (50*16MB)

# pgbench -i -s 50 pxdemo;

等待直到pgbench完成表的創建。我們接著來確認一下

pgbench_accounts現在有500萬行的填充。

# psql pxdemo\dtselect count(*) from pgbench_accounts;\qexit

如何通過Rancher在K8S上運行PostgreSQL數據庫

如何通過Rancher在K8S上運行PostgreSQL數據庫

現在,我們來模擬PostgreSQL正在運行的節點的失效,

$ NODE=`kubectl get pods -l app=postgres -o wide | grep -v NAME | awk '{print $7}'`$ kubectl cordon ${NODE}node "ip-172-20-57-55.ap-southeast-1.compute.internal" cordoned

執行kubectl get nods, 確認了其中一個節點的排程已經失效了。

$ kubectl get nodes

如何通過Rancher在K8S上運行PostgreSQL數據庫

我們繼續刪除這個PostgreSQLpod。

$ POD=`kubectl get pods -l app=postgres -o wide | grep -v NAME | awk '{print $1}'`$ kubectl delete pod ${POD}pod "postgres-556994cbd4-b6ghn" deleted

一旦刪除完成。Portworx STorageORchestrator for Kubernetes (STORK)(https://portworx.com/stork-storage-orchestration-kubernetes/),會把pod重置來創建有數據復制集的節點。

一旦Pod被刪除,它會被重置到有數據復制集的節點上。Portworx STorageORchestrator for Kubernetes (STORK) https://portworx.com/stork-storage-orchestration-kubernetes/)- Portworx的客戶存儲排程器,允許在數據所在節點上放置多個pod,并且確保正確的節點能夠被選擇來用來排程Pod。

讓我們運行下面的命令驗證一下。我們會發現一個新的pod被創建了,并且被排程在了一個不同的節點上。

$ kubectl get pods -l app=postgres

如何通過Rancher在K8S上運行PostgreSQL數據庫

讓我們把之前的節點重新部署回來。

$ kubectl uncordon ${NODE}node "ip-172-20-57-55.ap-southeast-1.compute.internal" uncordoned

最后,我們驗證一下數據仍然是可用的。

我們來看下容器里的pod名稱和exec。

$ POD=`kubectl get pods -l app=postgres | grep Running | grep 1/1 | awk '{print $1}'`$ kubectl exec -it $POD bash

現在用psql來確保我們的數據還在。

# psql pxdemopxdemo=# \dtpxdemo=# select count(*) from pgbench_accounts;pxdemo=# \qpxdemo=# exit

如何通過Rancher在K8S上運行PostgreSQL數據庫

我們看到數據庫表都還在,并且所有的內容都是正確的。

在Postgres進行存儲管理

測試了端到端的數據庫錯誤恢復后,我們在Kubernetes集群上來運行StorageOps。

完全無停機下,擴充卷

我們現在來演示一下,在空間將滿的情況下,如何簡單的、動態的為卷添加空間。

在容器內打開一個shell,

$ POD=`kubectl get pods -l app=postgres | grep Running | awk '{print $1}'`$ kubectl exec -it $POD bash

讓我們來用pgbench來運行一個baseline transaction benchmark,它將嘗試增加卷容量到1Gib,并且沒能成功。

$ pgbench -c 10 -j 2 -t 10000 pxdemo
$ exit

如何通過Rancher在K8S上運行PostgreSQL數據庫

在運行上面命令的時候,可能會有多種錯誤產生。第一個錯誤提示Pod已經沒有空間了。

PANIC: could not write to file "pg_xlog/xlogtemp.73": No space left on device

Kubernetes并不支持在PVC創建后進行修改。我們在Portworx上用pxctl CLI工具來進行操作。

我們來獲取卷的名稱,用pxctl工具來查看。

SSH到節點里,運行下面的命令

POD=`/opt/pwx/bin/pxctl volume list --label pvc=px-postgres-pvc | grep -v ID | awk '{print $1}'`$ /opt/pwx/bin/pxctl v i $POD

如何通過Rancher在K8S上運行PostgreSQL數據庫

注意到卷還有10%就要滿了。讓我們用下面的命令來擴充。

$ /opt/pwx/bin/pxctl volume update $POD --size=2Update Volume: Volume update successful for volume 834897770479704521

如何通過Rancher在K8S上運行PostgreSQL數據庫

為卷做快照,并且恢復數據庫

Portworx支持為Kubernetes PVCs創建快照。讓我們為之前創建的Postgres PVC來創建一個快照。

$ kubectl create -f https://github.com/fmrtl73/katacoda-scenarios-1/raw/master/px-k8s-postgres-all-in-one/assets/px-snap.yamlvolumesnapshot "px-postgres-snapshot" created

可以通過下面的命令來看所有的快照。

$ kubectl get volumesnapshot,volumesnapshotdata

如何通過Rancher在K8S上運行PostgreSQL數據庫

如何通過Rancher在K8S上運行PostgreSQL數據庫

有了快照,我們來刪掉數據庫。

$ POD=`kubectl get pods -l app=postgres | grep Running | grep 1/1 | awk '{print $1}'`$ kubectl exec -it $POD bash
$ psql
drop database pxdemo;\l
\qexit

快照就跟卷是一樣的,我們可以使用它來創建一個新的PostgreSQL實例。讓我們恢復快照數據,來創建一個新的PostgreSQL實例。

$ kubectl create -f https://raw.githubusercontent.com/fmrtl73/katacoda-scenarios-1/master/px-k8s-postgres-all-in-one/assets/px-snap-pvc.yamlpersistentvolumeclaim "px-postgres-snap-clone" created

從新的PVC,我們創建一個PostgreSQL Pod,

$ kubectl create -f https://raw.githubusercontent.com/fmrtl73/katacoda-scenarios-1/master/px-k8s-postgres-all-in-one/assets/postgres-app-restore.yamldeployment "postgres-snap" created

確認這個pod是在運行狀態。

$ kubectl get pods -l app=postgres-snap

如何通過Rancher在K8S上運行PostgreSQL數據庫

最后,讓我們訪問由benchmark工具創建的數據。

$ POD=`kubectl get pods -l app=postgres-snap | grep Running | grep 1/1 | awk '{print $1}'`$ kubectl exec -it $POD bash
$ psql pxdemo
\dtselect count(*) from pgbench_accounts;\qexit

如何通過Rancher在K8S上運行PostgreSQL數據庫

我們發現表和數據都是正常的。如果我們想要在另一個Amazon區域創建一個容災備份,我們可以把快照推送到Amazon S3。Portworx快照支持所有的S3兼容存儲對象,所以備份也可以是其他的云或者是本地部署的數據中心。

Portworx可以通過RKE很容易的部署,用來運行Kubernetes上生產系統中有狀態的工作負載。通過跟STORK的整合,DevOps和StorageOps團隊能夠無縫的在Kubernetes上運行數據庫集群。他們也可以為云原生應用運行傳統的操作,比如擴充卷,快照,備份,容災恢復。

關于如何通過Rancher在K8S上運行PostgreSQL數據庫就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐都县| 乐亭县| 江山市| 高碑店市| 柘城县| 陆丰市| 望谟县| 会理县| 江山市| 资中县| 龙里县| 顺昌县| 南涧| 定南县| 乳源| 大悟县| 东乡| 甘南县| 郓城县| 周至县| 柳林县| 蒙山县| 惠东县| 定安县| 永泰县| 莱西市| 达拉特旗| 西乌珠穆沁旗| 昌图县| 汪清县| 乡宁县| 富川| 达州市| 班戈县| 利川市| 吉林市| 同德县| 丰都县| 固镇县| 江孜县| 万安县|