Kubernetes上PostgreSQL集羣的管理

基於Kubernetes部署PostgreSQL能夠得到快速伸縮、故障轉移、在線修復等優勢。在《Kubernetes快速部署高可用PostgreSQL》中介紹了使用Stolon項目進行部署的方法和步驟。集羣安裝完畢後,能夠經過pgsql命令行工具進行操做。咱們更但願有一個WebUI的圖形化工具,這裏介紹pgAdmin4的安裝和使用(以Ubuntu 18.04LTS爲例)。python

一、安裝pgadm4

得到 repository key,在 https://www.postgresql.org/media/keys/ACCC4CF8.asc,以下:git

sudo apt-get install curl ca-certificates
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

建立安裝源描述文件 /etc/apt/sources.list.d/pgdg.list。操做系統分發版名稱爲 codename-pgdg。在下面的例子中,須要將 stretch 替換爲你所用的deb/ubuntu版本(能夠使用命令 lsb_release -c來肯定版本號),以下:github

deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main

自動獲取版本號並建立安裝源的元文件,以下:web

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

而後,更新軟件包的列表,並安裝:sql

sudo apt-get update 

# 安裝postgresql服務器,這裏我使用K8s的集羣,不須要安裝。
#sudo apt-get install postgresql-11

# 安裝pgadmin4,用於管理postgresql服務器。
sudo apt-get install pgadmin4

二、使用pgadmin4

輸入命令pgadmin4,啓動管理服務:docker

supermap@podc01:~/openthings/stolon-chart$ pgadmin4
Python path:  "/usr/lib/python3/dist-packages" 
Python Home:  ""
Webapp path:  "/usr/share/pgadmin4/web/pgAdmin4.py"
NOTE: Configuring authentication for DESKTOP mode.
pgAdmin 4 - Application Initialisation
======================================

將會自動打開瀏覽器,並啓動管理頁面。數據庫

在管理頁面添加以前在《Kubernetes快速部署高可用PostgreSQL》設置的服務器10.1.1.201,端口30900,數據庫postgres。json

  • 用戶名stolon,登陸口令經過下面方法獲取。
PGPASSWORD=$(kubectl get secret --namespace stolon waxen-seal-stolon -o jsonpath="{.data.pg_su_password}" | base64 --decode; echo)

echo $PGPASSWORD

而後登陸到該PostgreSQL服務,打開頁面:ubuntu

選中Databases/postgres,而後在菜單tool選擇Query tool,打開查詢頁面,輸入:瀏覽器

select * from test

三、在容器中運行pgadmin4

容器鏡像位於:

拉取容器鏡像:

# https://hub.docker.com/r/dpage/pgadmin4

docker pull dpage/pgadmin4

運行容器實例,注意將管理端口映射出來。

docker pull dpage/pgadmin4 docker run -p 980:80 \ -e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \ -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \ -d dpage/pgadmin4

運行加密的TLS容器,使用配置 config/storage 目錄在 /private/var/lib/pgadmin(宿主機),以下:

docker pull dpage/pgadmin4 docker run -p 9443:443 \ -v "/private/var/lib/pgadmin:/var/lib/pgadmin" \ -v "/path/to/certificate.cert:/certs/server.cert" \ -v "/path/to/certificate.key:/certs/server.key" \ -e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \ -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \ -e "PGADMIN_ENABLE_TLS=True" \ -d dpage/pgadmin4

注意:

  • 爲了減小端口衝突,我將端口80和443分別映射到了980和9443,由於這兩個端口常常被其餘的服務所佔用。

參考:

四、在kubernetes中運行pgadmin4

4.1 準備helm chart

經過 helm chart來進行安裝,得到模版:

git clone https://github.com/jjcollinge/pgadmin-chart

缺省配置文件values.yaml 將使pgAdmin部署能夠經過IP地址和plaintext HTTP進行訪問。

http訪問

爲了使pgAdmin 實例使用域名進行plaintext HTTP訪問,須要:

  1. 設置 service.typeNodePort
  2. 設置 ingress.enabledtrue
  3. 保留靜態 IP 在 Kubernetes cluster (使用 e.g. gcloud compute addresses create my-pgadmin-static-ip --global for GCP)
  4. 設置 ingress.staticIPReservation 爲靜態IP address,爲上面第三步建立。
  5. 在域名註冊服務中,建立一條記錄指向該靜態IP地址,爲上面第三步建立。

https訪問

爲了訪問 pgAdmin 實例,經過域名和HTTPS,,則須要以下的設置:

  1. Set ingress.tls.enabled to true
  2. Set ingress.tls.clusterIssuer to the name of a cert-manager ClusterIssuer deployed in your Kubernetes cluster
  3. Set ingress.tls.externalDNSName to the (fully-qualified) domain name you registered in step 5

4.2 安裝helm chart

使用helm的命令進行安裝,這裏安裝到命名空間stolon裏,與以前的postgreSQL安裝到了一個命名空間。

helm install --name pgadmin4 --namespace stolon

缺省的登陸帳號:

  • username: pgadmin4@pgadmin.org
  • password: admin

這個能夠在value.yaml中修改,或者經過以下方式在安裝時進行設置:

helm install --set pgadmin.username=myuser,pgadmin.password=mypassword  --name pgadmin4 --namespace stolon

 

更多參考:

相關文章
相關標籤/搜索