容器開啓數據服務之旅系列(一):Kubernetes如何解自建PostgreSQL運維之痛

摘要: 經過阿里雲Kubernetes容器服務,開啓你的數據服務之旅 (一)雲上運維自建數據庫之痛,使用容器服務自動恢復數據庫postgresql實例 概述 本文爲你們介紹一種容器化的數據服務 posgresql db on ACK,經過使用雲盤自動掛載實現的塊存儲PVC來作到數據庫的免運維恢復。html

 

容器開啓數據服務之旅系列(一):Kubernetes如何解自建PostgreSQL運維之痛node

 

概述sql

 

本文爲你們介紹一種容器化的數據服務 posgresql db on ACK,經過使用雲盤自動掛載實現的塊存儲PVC來作到數據庫的免運維恢復。藉助阿里雲Kubernetes服務與阿里雲存儲資源的深度整合,打造數據庫實例的免運維異地(ECS)恢復的不死神話。數據庫

 

先決條件json

 

1.你已經經過阿里雲容器服務建立了一個Kubernetes集羣,詳細步驟參見建立Kubernetes集羣app

2.阿里雲容器服務的存儲插件(默認狀況存儲插件已經自動部署在阿里雲Kubernetes容器服務)運維

 

從容器服務控制檯建立一個posgresql實例ssh

 

使用三次點擊來建立一個postgresql的不死實例ide

1.登陸 https://cs.console.aliyun.com/post

2.點擊 「應用目錄」

3.選擇 "postgresql"

4 (可選)選擇你的Kubernetes集羣. e.g. k8s-gpu

5 (可選)選擇你的應用的命名空間。默認: default

6 給你的數據庫應用取個容易記住的名字。 e.g. postgresql-online

 

7 (可選) 點擊 「參數」 來定製你的數據庫實例

 

1.修改 persistence.size: 20Gi 增長數據庫雲盤的容量 2.修改 persistence.storageClass: alicloud-disk-efficiency 調整數據卷所在雲盤的性能。好比改成alicloud-disk-ssd 掛載ssd類型的

 

## Persist data to a persitent volume persistence: enabled: true ## A manually managed Persistent Volume and Claim ## Requires persistence.enabled: true ## If defined, PVC must be created manually before volume will be bound # existingClaim: ## database data Persistent Volume Storage Class ## if defined, user has to define storageClassName: alicloud-disk to support dynamic provision of alicloud-disk ## If defined, storageClassName: <storageClass> ## If set to "-", storageClassName: "", which disables dynamic provisioning ## If undefined (the default) or set to null, no storageClassName spec is ## set, choosing the default provisioner. (gp2 on AWS, standard on ## GKE, AWS & OpenStack) ## #storageClass: "alicloud-disk-ssd" storageClass: "alicloud-disk-efficiency" accessMode: ReadWriteOnce size: 20Gi subPath: "postgresql-db"

8 點擊 「部署」, 完成數據發佈

9 點擊 「Kubernetes 控制檯」,查看部署實例

 

10 點擊容器組,點擊 postgresql-online-postgresql 查看數據庫實例密碼。容器實例啓動在節點:cn-hangzhou.i-bp1fazljd8u2ylk2otdo

 

11 測試postgresql數據庫的異地(ECS)恢復

 

1.添加測試數據

 

ssh <public ip of kubernetes master node >` # kubectl run my-pg-postgresql-client --rm --tty -i --image postgres \ --env "PGPASSWORD=$PGPASSWORD" \ --command -- psql -U postgres \ -h postgresql-online-postgresql postgres If you don't see a command prompt, try pressing enter. postgres=# create table t1 (id int); CREATE TABLE postgres=# insert into t1 values(10); INSERT 0 1 postgres=# select * from t1; id ---- 10 (1 row)

 

1.驅逐數據庫實例從ECS節點 i-bp1fazljd8u2ylk2otdo 到 i-bp1fazljd8u2ylk2otdp

 

#kubectl get pod -o wide | grep postgresql-online-postgresql postgresql-online-postgresql-78884fbcf6-6mfzz 1/1 Running 0 36m 172.30.4.4 cn-hangzhou.i-bp1fazljd8u2ylk2otdo #kubectl cordon cn-hangzhou.i-bp1fazljd8u2ylk2otdo #kubectl delete pod postgresql-online-postgresql-78884fbcf6-6mfzz pod "postgresql-online-postgresql-78884fbcf6-6mfzz" deleted # kubectl get pod -o wide|grep postgresql-online-postgresql #postgresql-online-postgresql-78884fbcf6-87ttg 0/1 Running 0 15s 172.30.3.5 cn-hangzhou.i-bp1fazljd8u2ylk2otdp

 

1.檢驗數據,實例遷移, 數據庫實例自動化恢復, 數據不丟失。

 

# kubectl get pod -o wide|grep postgresql-online-postgresql #postgresql-online-postgresql-78884fbcf6-87ttg 0/1 Running 0 15s 172.30.3.5 cn-hangzhou.i-bp1fazljd8u2ylk2otdp kubectl run my-pg-postgresql-client --rm --tty -i --image postgres \ > --env "PGPASSWORD=$PGPASSWORD" \ > --command -- psql -U postgres \ > -h postgresql-online-postgresql postgres If you don't see a command prompt, try pressing enter. postgres=# select * from t1; id ---- 10 (1 row)

 

CLI控: 使用命令行完成postgresql實例的建立,遷移驗證

 

login k8s master and deploy an postgresql db in seconds.

 

ssh <public ip of kubernetes master node > helm install -n postgresql-online --set 'persistence.size=30Gi,persistence.storageClass=alicloud-disk-ssd' stable/postgresql

 

To get your user password run:

 

PGPASSWORD=$(kubectl get secret --namespace default my-pg-postgresql -o jsonpath="{.data.postgres-password}" | base64 --decode; echo)

To connect to your database run the following command (using the env variable from above):

kubectl run my-pg-postgresql-client --rm --tty -i --image postgres \ --env "PGPASSWORD=$PGPASSWORD" \ --command -- psql -U postgres \ -h postgresql-online-postgresql postgres

 

To connect to your database directly from outside the K8s cluster:

 

PGHOST=127.0.0.1 PGPORT=5432 # Execute the following commands to route the connection: export POD_NAME=$(kubectl get pods --namespace default -l "app=my-pg-postgresql" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward $POD_NAME 5432:5432 #kubectl get pod -o wide | grep postgresql-online-postgresql postgresql-online-postgresql-78884fbcf6-6mfzz 1/1 Running 0 36m 172.30.4.4 cn-hangzhou.i-bp1fazljd8u2ylk2otdo #kubectl cordon cn-hangzhou.i-bp1fazljd8u2ylk2otdo #kubectl delete pod postgresql-online-postgresql-78884fbcf6-6mfzz pod "postgresql-online-postgresql-78884fbcf6-6mfzz" deleted # kubectl get pod -o wide|grep postgresql-online-postgresql #postgresql-online-postgresql-78884fbcf6-87ttg 0/1 Running 0 15s 172.30.3.5 cn-hangzhou.i-bp1fazljd8u2ylk2otdp

 

Test original postgresql db could be recovered on different node.

 

#kubectl get pod -o wide|grep postgresql-online-postgresql #postgresql-online-postgresql-78884fbcf6-87ttg 0/1 Running 0 15s 172.30.3.5 cn-hangzhou.i-bp1fazljd8u2ylk2otdp kubectl run my-pg-postgresql-client --rm --tty -i --image postgres \ > --env "PGPASSWORD=$PGPASSWORD" \ > --command -- psql -U postgres \ > -h postgresql-online-postgresql postgres If you don't see a command prompt, try pressing enter. postgres=# select * from t1; id ---- 10 (1 row)

 

原文連接

閱讀更多幹貨好文,請關注掃描如下二維碼: 

相關文章
相關標籤/搜索