PostgreSQL Operator on Kubernetes
業務でKubernetes環境にPostgreSQLをインストールする機会がありました。
色々調べてみると、Operator(以下参考)というものを利用すると学習コストの高い
scaling, failover, backup等を自動化できるとのことなので試してみました。
- Kubernetes Operator
PostgreSQL Operator
今回はcrunchyDataのPostgreSQL Operatorを採用しました。
構成
- Kubernetes:v1.15
- crunchyData PostgreSQL Operator:v4.2.2
- 作業端末(クライアント)のOS:
centOS7.5
- ansible:v2.9.2
- git:https://github.com/CrunchyData/postgres-operator.git
前提条件
-
clusterRole
の追加権限をもつKubernetes環境(クラスタ管理者であればOK)
- ansible2.5以上インストール済
- gitインストール済
設定
centOS7.5
-
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'
kubectl config current-context
<clustername>
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コマンドで簡単に実行できます。
ぜひ試してみてください。
Author And Source
この問題について(PostgreSQL Operator on Kubernetes), 我々は、より多くの情報をここで見つけました https://qiita.com/guile/items/466b05fb4f053fb19602著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .