minikube 上でちょっと PostgreSQL を動したいと思ったときに、 Kubegres というシンプルな Operator があったので、 試してみました。

動作確認環境

  • macOS Sequoia 15.3
  • colima 0.8.1 で動かしている docker 環境
  • minikube v1.35.0
  • kubegres v1.19

インストール

Kubegres の Getting started の通りです。

kubectl apply -f https://raw.githubusercontent.com/reactive-tech/kubegres/v1.19/kubegres.yaml
kubectl get all -n kubegres-system

Secret 作成

Secret は base64 で設定すると思っていたのですが、 data の代わりに stringData を使えばそのまま書けるようです。

apiVersion: v1
kind: Secret
metadata:
  name: mypostgres-secret
  namespace: default
type: Opaque
stringData:
  superUserPassword: postgresSuperUserPsw
  replicationUserPassword: postgresReplicaPsw

PostgreSQL インスタンスのクラスタ作成

最初に replicas: 3 で試したときに2個目以降が affinity 関係のエラーで動かなかったのと、 とりあえず動かしたいだけだったので、 replicas: 1 にしました。 (この記事を書きながら 3 で試したら問題なく動いてしまったので、エラーの原因は追求できませんでした。)

apiVersion: kubegres.reactive-tech.io/v1
kind: Kubegres
metadata:
  name: mypostgres
  namespace: default

spec:

   replicas: 1
   image: postgres:17.2

   database:
	  size: 200Mi

   env:
	  - name: POSTGRES_PASSWORD
		valueFrom:
		   secretKeyRef:
			  name: mypostgres-secret
			  key: superUserPassword

	  - name: POSTGRES_REPLICATION_PASSWORD
		valueFrom:
		   secretKeyRef:
			  name: mypostgres-secret
			  key: replicationUserPassword

接続確認

適当に postgres のコンテナを起動して接続できるのを確認しました。

Kubegres では普通の postgres のイメージを使うときと同じように、 ユーザーやデータベースは自分で自由に作成できます。

kubectl run -i psql --rm --image=postgres:17.2 --restart=Never -- env PGPASSWORD=postgresSuperUserPsw psql -U postgres -h mypostgres -l

kubectl run -it psql --rm --image=postgres:17.2 --restart=Never -- /bin/bash
env PGPASSWORD=postgresSuperUserPsw psql -U postgres -h mypostgres -l
env PGPASSWORD=postgresSuperUserPsw createuser -U postgres -h mypostgres --echo --createdb --no-createrole --no-superuser --pwprompt test_app

実行例:

% kubectl run -i psql --rm --image=postgres:17.2 --restart=Never -- env PGPASSWORD=postgresSuperUserPsw psql -U postgres -h mypostgres -l
													List of databases
   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | Locale | ICU Rules |   Access privileges
-----------+----------+----------+-----------------+------------+------------+--------+-----------+-----------------------
 postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           |
 template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c/postgres          +
		   |          |          |                 |            |            |        |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c/postgres          +
		   |          |          |                 |            |            |        |           | postgres=CTc/postgres
(3 rows)

pod "psql" deleted

設定変更

以下のように ConfigMap を作成してから kind: Kubegres の方の speccustomConfig: mypostgres-conf を追加すると、 postgres.conf を変更できます。

この例ではまず kubectl exec -it pods/mypostgres-1-0 -- /bin/bash で入って、 cat /etc/postgres.conf でデフォルトの postgres.conf を確認しました。 それをコピペして max_connections を増やしています。

apiVersion: v1
kind: ConfigMap
metadata:
  name: mypostgres-conf
  namespace: default
data:
  postgres.conf: |
	# Replication configs
	listen_addresses = '*'
	max_wal_senders = 10
	max_connections = 200
	shared_buffers = 128MB

	# Logging
	#log_destination = 'stderr,csvlog'
	#logging_collector = on
	#log_directory = 'pg_log'
	#log_filename= 'postgresql-%Y-%m-%d_%H%M%S.log'

設定を変更するときは ConfigMap だけ変更しても反映されないなど、 いくつか注意点があるので、 Override the default configurations をみておく必要があるようです。

とりあえず開発環境やテスト環境なら、ダミーの無意味な環境変数の設定を追加や変更して、 pod を作り直させるのが楽そうです。

デフォルト設定は namespace ごとの base-kubegres-config にあるようで、 kubectl get cm base-kubegres-config -o yaml で確認できました。 namespace 内のデータベースをまとめて設定変更するなら、 kubectl edit などで base-kubegres-config を直接変更すれば良いようです。

まとめ

とりあえず postgresKubernetes で動かすために Kubegres を使ってみました。

postgres イメージをそのまま使えるのは docker compose からの移行が楽で良さそうでした。 (他の PostgreSQL Operator だと独自イメージを使うようになっていることが多そう。)

設定の変更に癖があるなど、 Kubernetes との組み合わせの使い勝手はあまりよくないので、 次は CloudNativePG を試します。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published