容器開啓數據服務之旅系列(一):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集羣
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>

相關文章
相關標籤/搜索