PostgreSQL Operator on Kubernetes


業務でKubernetes環境にPostgreSQLをインストールする機会がありました。
色々調べてみると、Operator(以下参考)というものを利用すると学習コストの高い
scaling, failover, backup等を自動化できるとのことなので試してみました。
- Kubernetes Operator

PostgreSQL Operator

今回はcrunchyDataのPostgreSQL Operatorを採用しました。

構成

前提条件

  • clusterRoleの追加権限をもつKubernetes環境(クラスタ管理者であればOK)
  • ansible2.5以上インストール済
  • gitインストール済

設定

gitからPostgreSQL Operatorをインストールするプレイブックをダウンロード

git clone https://github.com/CrunchyData/postgres-operator.git
cd postgres-operator
git checkout v4.2.2 # 任意のバージョンに変更可能
cd ansible

環境に応じてinventoryファイルを修正

kubernetesクラスタ名を取得

kubectl config current-context
<clustername>

inventoryファイルに追記

vi inventory
--
kubernetes_context="clustername" # Kubernetesクラスタ名
pgo_admin_password="XXXXXXX" # 任意のパスワード
backrest_storage='rook'  # デフォルトのストレージを設定
backup_storage='rook'
primary_storage='rook'
replica_storage='rook'

※ストレージの設定方法については別記事にて設定方法記載します
本環境ではrook-cephによるBlockストレージを採用していましたのでrookと記載しております。

mainファイルの修正(ハマりどころ)

環境によって差異があるかもしれませんが、自分の場合、
インストール実行中にtask:DownLoad PGO Linux Clientにてエラーが発生したため、
~./postgres-operator/ansible/roles/pgo-operator/tasks/main.yamlを下記に修正

~
- name: DownLoad PGO Linux Client
    become: yes
    become_method: sudo
    become_user: <username> # ←この行追加(作業ユーザ名を記載)
~

Operator インストール

ansibleディレクトリにいることを確認して下記コマンドを実行してoperatorをインストール
kubernetesクラスタによっては数分かかる場合があります。

ansible-playbook -i inventory --tags=install main.yml

pgoクライアントの設定

PostgreSQL Operatorのインストール中に、pgoコマンドラインを利用できるようにするため
下記コマンドを実行して環境変数を設定します。

cat <<EOF >> ~/.bashrc
export PGOUSER="${HOME?}/.pgo/pgo/pgouser"
export PGO_CA_CERT="${HOME?}/.pgo/pgo/client.crt"
export PGO_CLIENT_CERT="${HOME?}/.pgo/pgo/client.crt"
export PGO_CLIENT_KEY="${HOME?}/.pgo/pgo/client.pem"
export PGO_APISERVER_URL='https://127.0.0.1:8443'
export PGO_NAMESPACE=pgouser1
EOF

source ~/.bashrc

※macOSの場合、~/.bash_profile

確認

ansibleプレイブックのインストールが完了したら確認します。
下記コマンドでOperatorのpodが立っていることがわかります。

kubectl -n pgo get deployments
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
postgres-operator   1/1     1            1           2m

kubectl -n pgo get pods
NAME                                READY   STATUS    RESTARTS   AGE
postgres-operator-56d6ccb97-tmz7m   4/4     Running   0          3m

pgoコマンドラインが実行できるか確認してみます。
新しいコンソールウィンドウで、次のコマンドを実行して簡易的にAPIアクセスするためポートフォワードします。

kubectl -n pgo port-forward svc/postgres-operator 8443:8443

元のコンソールからバージョン確認コマンドを実行します。

pgo version

次のような結果が出力されれば成功です。

pgo client version 4.2.2
pgo-apiserver version 4.2.2

PostgreSQLクラスタ構築

次のようなコマンドで簡単にkubernetesにPostgreSQLをデプロイすることができます。

pgo create cluster -n pgouser1 hippo

まとめ

今回はKubernetesにPostgretSQL Operatorをインストールする手順について紹介しました。
operatorを利用すれば冗長構成、プーリング、ストレージ容量等コマンドラインで設定も可能ですので、
用途にあったPostgreSQL環境が容易に構築できます。
また、バックアップの作成やリストアもpgoコマンドで簡単に実行できます。
ぜひ試してみてください。