PostgreSQL Operator(Zalando)をKubernetesで使う手順

PostgreSQL Operator(Zalando)をKubernetesで使う手順

 

★悩み★
・Kubernetes上で容易にPostgreSQLを使うことはできないだろうか。
・PostgreSQL Operator(Zalando)をKubernetesで使う手順を知りたい。
・そもそも、PostgreSQL Operator(Zalando)とは?



こういった「悩み」に答えます。
 

★本記事の内容★
① PostgreSQL Operator(Zalando)とは何か?をご紹介
② PostgreSQL Operator(Zalando)をKubernetesで使うための準備をご紹介
③ PostgreSQL Operator(Zalando)をKubernetesで使う手順をご紹介



これからご紹介する「PostgreSQL Operator(Zalando)をKubernetesで使う手順」を実践したことで、2時間以内で「Kubernetes上で起動したPostgreSQLにデータを格納」できました。

記事の前半では「PostgreSQL Operator(Zalando)とは何か?」を解説しつつ、記事の後半では「PostgreSQL Operator(Zalando)をKubernetesで使う手順」を紹介します。

この記事を読み終えることで、「Kubernetes上でPostgreSQLを使える」状態になります。
 

★Kubernetesとは★
Kubernetesを利用することで、マイクロサービスなシステムを構築できます。Kubernetesを利用したマイクロサービスに関して知りたい方は、以下の記事をご覧ください。
 
Kubernetesとマイクロサービスについて



ちなみに、「Kubernetesを体系的に学習したい」方には、以下の記事がお勧めです。
 


 

【PR】この記事には広告を含む場合があります

PostgreSQL Operator(Zalando)とは、何か?

PostgreSQL Operator(Zalando)とは、何か?


「PostgreSQL Operator(Zalando)とは、何か?」に関してご紹介します。

★PostgreSQL Operator(Zalando)に関するご紹介事項★
・KubernetesのOperatorとは?
・PostgreSQL Operator(Zalando)とは?



以降で、上記「PostgreSQL Operator(Zalando)に関するご紹介事項」の各項目に関してご説明します。
 

KubernetesのOperatorとは?

「KubernetesのOperatorとは?」に関してご説明します。
 

Kubernetesの機能の一つとして、Operatorという機能があります。



KubernetesのOperatorを利用することで、「運用管理の手順(例えば、配備したアプリケーションのバックアップ手順)をコードとして記述」できます。KubernetesのOperatorで運用をコード化することで、運用の自動化ができます。
 

アプリに障害が発生した際の復旧手順をコード化しておくことで、手動でアプリを復旧する必要がなくなります。



ちなみに、「KubernetesのOperatorを詳しく知りたい」方は、以下の公式サイトをご覧ください。
KubernetesのOperatorとは(公式サイト)

以上が、「KubernetesのOperatorとは?」となります。
 

PostgreSQL Operator(Zalando)とは?

「PostgreSQL Operator(Zalando)とは?」に関してご説明します。
 

PostgreSQL Operatorを使うことで、PostgreSQLの運用(例えば、スケールアウトなど)をKubernetesで自動化できます。



PostgreSQL Operator(Zalando)を使うことで、Kubernetes上にHA構成のPostgreSQLを容易に構成できます。

また、PostgreSQL Operator(Zalando)は、以下の機能を有します。

★PostgreSQL Operator(Zalando)の機能★
・PostgreSQLのクラスタをローリングアップデートできる
・PostgreSQLが利用するディスクを自動で拡張できる
・PostgreSQLのクラスタをすぐに複製/リストアできる
・Web UI経由でPostgreSQLのクラスタを作成できる



PostgreSQL Operator(Zalando)の詳しい機能や構成を知りたい方は、以下の公式サイトをご覧ください。
PostgreSQL Operator(Zalando)の公式サイト

以上が、「PostgreSQL Operator(Zalando)とは?」となります。
 

PostgreSQLの運用(バックアップやスケールアウトなど)を自動化したい場合、PostgreSQL Operator(Zalando)の利用を検討しましょう。


 

PostgreSQL Operator(Zalando)をKubernetesで使うための準備

PostgreSQL Operator(Zalando)をKubernetesで使うための準備


「PostgreSQL Operator(Zalando)をKubernetesで使うための準備」に関してご紹介します。

★PostgreSQL Operator(Zalando)をKubernetesで使うための準備★
手順1:Kubernetesクラスタを構築
手順2:構築したKubernetesクラスタの状態確認



上記の流れで、「PostgreSQL Operator(Zalando)をKubernetesで使うための準備」ができます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年6月20日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)



以降で、上記「PostgreSQL Operator(Zalando)をKubernetesで使うための準備」の各手順に関してご説明します。
 

手順1:Kubernetesクラスタを構築

「手順1:Kubernetesクラスタを構築」に関してご説明します。
 

PostgreSQL Operator(Zalando)使うために、Kubernetesクラスタを構築しましょう。



「Kubernetesクラスタの構築手順」に関しては、以下の記事をご覧ください。
 



上記手順を実施することで、以下のKubernetesクラスタを構築できます。
 

手順1:Kubernetesクラスタを構築



以降の手順では、上図のKubernetesクラスタを想定として手順を解説します。
  

既にKubernetesクラスタを構築済みである場合、本手順を省略してください。



以上で、「手順1:Kubernetesクラスタを構築」は完了です。
 

手順2:構築したKubernetesクラスタの状態確認

「手順2:構築したKubernetesクラスタの状態確認」に関してご説明します。
 

構築したKubernetesにおいて、PostgreSQL Operator(Zalando)を使える状態になっているかを確認しましょう。



「構築したKubernetesクラスタの状態確認」に関しては、以下の記事「手順2:構築したKubernetesクラスタの状態確認」をご覧ください。
 



以上で、「手順2:構築したKubernetesクラスタの状態確認」は完了です。
 

上記の流れで、PostgreSQL Operator(Zalando)をKubernetesで使うための準備ができました。

 
 

PostgreSQL Operator(Zalando)をKubernetesで使う手順

PostgreSQL Operator(Zalando)をKubernetesで使う手順


「PostgreSQL Operator(Zalando)をKubernetesで使う手順」に関してご紹介します。

★PostgreSQL Operator(Zalando)をKubernetesで使うまでの流れ★
手順1:PostgreSQL Operator(Zalando)をダウンロード
手順2:PostgreSQL Operator(Zalando)の設定ファイルを修正
手順3:PostgreSQL Operator(Zalando)用の永続ボリュームを作成
手順4:PostgreSQL Operator(Zalando)をKubernetesに配備(デプロイ)
手順5:PostgreSQL Operator(Zalando)で作成したPostgreSQLの動作確認



上記手順を実施することで、PostgreSQL Operator(Zalando)経由でKubernetes上にPostgreSQLクラスタを作成できます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年6月20日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)



以降で、上記「PostgreSQL Operator(Zalando)をKubernetesで使うまでの流れ」の各手順に関してご説明します。
 

手順1:PostgreSQL Operator(Zalando)をダウンロード

「手順1:PostgreSQL Operator(Zalando)をダウンロード」に関してご説明します。
 

PostgreSQL Operator(Zalando)の資材は、GitHubに格納されています。



PostgreSQL Operator(Zalando)の資材をGitHubからダウンロードするために、マスターで以下のコマンドを順に実行してください。

# git clone https://github.com/zalando/postgres-operator.git
# cd postgres-operator/
# ls
CODEOWNERS       LICENSE      Makefile   SECURITY.md  charts  delivery.yaml  docs  go.mod  hack        manifests   mocks  run_operator_locally.sh
CONTRIBUTING.md  MAINTAINERS  README.md  build-ci.sh  cmd     docker         e2e   go.sum  kubectl-pg  mkdocs.yml  pkg    ui



コマンド実行後、「postgres-operator」のディレクトリが存在する場合、「正常にGitHubからPostgreSQL Operator(Zalando)をダウンロードできた」と判断できます。

以上で、「手順1:PostgreSQL Operator(Zalando)をダウンロード」は完了です。
 

手順2:PostgreSQL Operator(Zalando)の設定ファイルを修正

「手順2:PostgreSQL Operator(Zalando)の設定ファイルを修正」に関してご説明します。
 

作成したいPostgreSQLクラスタに合わせて、PostgreSQL Operator(Zalando)の設定ファイルを修正しましょう。



PostgreSQL Operator(Zalando)の設定ファイルを修正するために、マスターで以下のコマンドを順に実行してください。具体的には、各定義ファイルのnamespaceを「postgres」に修正しましょう。

# cat manifests/operator-service-account-rbac.yaml | grep postgres
  name: postgres-operator
  namespace: postgres # ← postgresに変更
  name: postgres-operator
  - postgresqls
  - postgresqls/status
  - postgresteams
  name: postgres-operator
  name: postgres-operator
  name: postgres-operator
  namespace: postgres
  name: postgres-pod

# cat ui/manifests/ui-service-account-rbac.yaml | grep postgres
  name: postgres-operator-ui
  namespace: postgres # ← postgresに変更
  name: postgres-operator-ui
  - postgresqls
  name: postgres-operator-ui
  name: postgres-operator-ui
  name: postgres-operator-ui
  namespace: postgres # ← postgresに変更

# cat ui/manifests/deployment.yaml | grep postgres
  name: "postgres-operator-ui"
  namespace: "postgres" # ← postgresに変更
    name: "postgres-operator-ui"
      name: "postgres-operator-ui"
        name: "postgres-operator-ui"
      serviceAccountName: postgres-operator-ui
          image: registry.opensource.zalan.do/acid/postgres-operator-ui:v1.6.0
              value: "http://postgres-operator:8080"
                  "docs_link":"https://postgres-operator.readthedocs.io/en/latest/",
                  "postgresql_versions": [

# cat ui/manifests/service.yaml
apiVersion: "v1"
kind: "Service"
metadata:
  name: "postgres-operator-ui"
  namespace: "postgres" # ← postgresに変更
  labels:
    application: "postgres-operator-ui"
spec:
  type: "LoadBalancer"
  selector:
    application: "postgres-operator-ui"
  ports:
    - port: 80
      protocol: "TCP"
      targetPort: 8081

# cat postgres-manifest.yaml
kind: "postgresql"
apiVersion: "acid.zalan.do/v1"
metadata:
  name: "acid-my-cluster"
  namespace: postgres
  labels:
    team: acid
spec:
  teamId: "acid"
  postgresql:
    version: "13"
  numberOfInstances: 1
  enableMasterLoadBalancer: false
  volume:
    size: "3Gi"
  resources:
    requests:
      cpu: 100m
      memory: 100Mi
    limits:
      cpu: 500m
      memory: 500Mi



以上で、「手順2:PostgreSQL Operator(Zalando)の設定ファイルを修正」は完了です。
 

手順3:PostgreSQL Operator(Zalando)用の永続ボリュームを作成

「手順3:PostgreSQL Operator(Zalando)用の永続ボリュームを作成」に関してご説明します。
 

PostgreSQL Operator(Zalando)経由で作成するPostgreSQLクラスタは、データ格納先として永続ボリュームを利用します。



永続ボリュームを作成するために、マスターで以下の定義ファイルを作成しましょう。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pgdata-acid-my-cluster-0
spec:
  capacity:
    storage: 10Gi
  persistentVolumeReclaimPolicy: Retain
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/pgo"
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pgdata-acid-my-cluster-1
spec:
  capacity:
    storage: 10Gi
  persistentVolumeReclaimPolicy: Retain
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/pgo1"



上記の定義を「pvc.yaml」というファイル名で保存しましょう。ファイル保存後、PostgreSQL Operator(Zalando)用の永続ボリューム(PV/PVC)を作成するために、マスターで以下のコマンドを実行してください。

# kubectl apply -f pvc.yaml
persistentvolume/pgdata-acid-my-cluster-0 created
persistentvolume/pgdata-acid-my-cluster-1 created



コマンド実行後、「created」が出力された場合、「正常にPostgreSQL Operator(Zalando)用の永続ボリューム(PV/PVC)を作成できた」と判断できます。

以上で、「手順3:PostgreSQL Operator(Zalando)用の永続ボリュームを作成」は完了です。
 

手順4:PostgreSQL Operator(Zalando)をKubernetesに配備(デプロイ)

「手順4:PostgreSQL Operator(Zalando)をKubernetesに配備(デプロイ)」に関してご説明します。
 

PostgreSQL Operator(Zalando)経由でKubernetes上にPostgreSQLクラスタを作成しましょう。



Kubernetes上にPostgreSQLを作成するために、マスターで以下のコマンドを順に実行してください。

# kubectl create ns postgres
# kubectl create -f manifests/configmap.yaml -n postgres
# kubectl create -f manifests/operator-service-account-rbac.yaml
# kubectl create -f manifests/postgres-operator.yaml -n postgres
# kubectl create -f manifests/api-service.yaml -n postgres
# kubectl apply -f ui/manifests/ui-service-account-rbac.yaml
# kubectl apply -f ui/manifests/deployment.yaml
# kubectl apply -f ui/manifests/service.yaml
# kubectl apply -f postgres-manifest.yaml
# kubectl get pods,svc -n postgres
NAME                                        READY   STATUS    RESTARTS   AGE
pod/acid-my-cluster-0                       1/1     Running   0          45s
pod/postgres-operator-6cc989d674-mkfzz      1/1     Running   0          96m
pod/postgres-operator-ui-6bdc49fd6c-jh5fr   1/1     Running   0          91m

NAME                             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/acid-my-cluster          ClusterIP      10.233.18.194   <none>        5432/TCP       45s
service/acid-my-cluster-config   ClusterIP      None            <none>        <none>         40s
service/acid-my-cluster-repl     ClusterIP      10.233.20.60    <none>        5432/TCP       45s
service/postgres-operator        ClusterIP      10.233.3.104    <none>        8080/TCP       96m
service/postgres-operator-ui     LoadBalancer   10.233.31.78    <pending>     80:31762/TCP   89m



コマンド実行後、「Runningが3つ」表示された場合、「正常にPostgreSQL Operator(Zalando)経由でKubernetes上にPostgreSQLクラスタを作成できた」と判断できます。

以上で、「手順4:PostgreSQL Operator(Zalando)をKubernetesに配備(デプロイ)」は完了です。
 

手順5:PostgreSQL Operator(Zalando)で作成したPostgreSQLの動作確認

「手順5:PostgreSQL Operator(Zalando)で作成したPostgreSQLの動作確認」に関してご説明します。
 

PostgreSQL Operator(Zalando)経由で作成したPostgreSQLにデータを挿入してみましょう。



PostgreSQLにデータを格納するために、マスターで以下のコマンドを順に実行してください。

# kubectl exec -n postgres -it pod/acid-my-cluster-0 -- psql -U postgres
psql (13.2 (Ubuntu 13.2-1.pgdg18.04+1))
Type "help" for help.

postgres=# create database kakedashi;
CREATE DATABASE
postgres=# create table meibo (name text);
CREATE TABLE
postgres=# insert into meibo values ('hero');
INSERT 0 1
postgres=# select * from meibo;
 name
------
 hero
(1 row)

postgres=# exit



上記のように「selectで挿入したデータが表示された」場合、「PostgreSQL Operator(Zalando)で作成したPostgreSQLは正常に起動している」と判断できます。

以上で、「手順5:PostgreSQL Operator(Zalando)で作成したPostgreSQLの動作確認」は完了です。
 

上記の流れで、PostgreSQL Operator(Zalando)経由で作成したKubernetes上のPostgreSQLを使うことができます。



ちなみに、「Kubernetesのアーキテクチャを体系的に学びたい」や「Operatorなどのその他の機能を知りたい」方は、以下の参考書がオススメです。


動画で「Kubernetesのアーキテクチャを体系的に学びたい」や「Operatorなどのその他の機能を知りたい」を学びたいという方には、以下がオススメです。

Kubernetes入門@udemy

 
 

【まとめ】PostgreSQL Operator(Zalando)をKubernetesで使う手順

PostgreSQL Operator(Zalando)をKubernetesで使う手順


今回の記事を通して、「PostgreSQL Operator(Zalando)をKubernetesで使う手順」をご紹介することで、以下の悩みを解消しました。

★悩み★
・Kubernetes上で容易にPostgreSQLを使うことはできないだろうか。
・PostgreSQL Operator(Zalando)をKubernetesで使う手順を知りたい。
・そもそも、PostgreSQL Operator(Zalando)とは?



「Deploymentの書き方やサンプルを知りたい」や「そもそも、PostgreSQL Operator(Zalando)とは?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。

コメント

タイトルとURLをコピーしました