1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PostgreSQL Operator on Kubernetes

Posted at

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

PostgreSQL Operator

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

構成

前提条件

  • 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コマンドで簡単に実行できます。
ぜひ試してみてください。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?