摘要: 經過阿里雲Kubernetes容器服務,開啓你的數據服務之旅 (一)雲上運維自建數據庫之痛,使用容器服務自動恢復數據庫postgresql實例 概述 本文爲你們介紹一種容器化的數據服務 posgresql db on ACK,經過使用雲盤自動掛載實現的塊存儲PVC來作到數據庫的免運維恢復。html
容器開啓數據服務之旅系列(一):Kubernetes如何解自建PostgreSQL運維之痛node
概述sql
本文爲你們介紹一種容器化的數據服務 posgresql db on ACK,經過使用雲盤自動掛載實現的塊存儲PVC來作到數據庫的免運維恢復。藉助阿里雲Kubernetes服務與阿里雲存儲資源的深度整合,打造數據庫實例的免運維異地(ECS)恢復的不死神話。數據庫
先決條件json
1. 你已經經過阿里雲容器服務建立了一個Kubernetes集羣,詳細步驟參見建立Kubernetes集羣
2. 阿里雲容器服務的存儲插件(默認狀況存儲插件已經自動部署在阿里雲Kubernetes容器服務)app
從容器服務控制檯建立一個posgresql實例運維
使用三次點擊來建立一個postgresql的不死實例ssh
1. 登陸 https://cs.console.aliyun.com/
2. 點擊 「應用目錄」
3. 選擇 "postgresql"

ide
4.(可選)選擇你的Kubernetes集羣. e.g. k8s-gpu
5.(可選)選擇你的應用的命名空間。默認: default
6. 給你的數據庫應用取個容易記住的名字。 e.g. postgresql-onlinepost

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)
驅逐數據庫實例從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
檢驗數據,實例遷移, 數據庫實例自動化恢復, 數據不丟失。
# 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)
閱讀更多幹貨好文,請關注掃描如下二維碼:
</public></public></storageclass>