本記事はPostgreSQL on Kubernetes Advent Calendar 2018の5日目です。
昨日は「PostgreSQL on Kubernetesのインストール」ということで、Rook上にPostgreSQLを構築し、KubernetesレベルやCephレベルで構築状況を確認しました。
本日は以下のツールを同じKubernetesクラスタ内に構築し、実際にデータベースとしての操作を試していきます。
- pgadmin (PostgreSQLの定番GUIツール)
- pgbench (PostgreSQLのベンチマークツール)
TL;DR
- PostgreSQLの定番管理ツールpgadminをKubernetes内で使ってみよう。
- クラスタ内のPostgreSQLにはサービス名で接続できるよ。
- ユーザとデータベースもGUIで楽々作成。
必要な構成
これまで述べた構成と同様ですが、pgadminとpgbenchを同梱したポッドを以下のツール用サーバに導入します。
- 1台のツール用サーバ。Kubernetes上でラベルとして、type=node.mon.bench が付いていること
pgtoolsの導入
#3でクローンしたものと同じリポジトリを使い、pgtoolsのディレクトリに移動します。
$ cd ./postgres-on-k8s/postgres-install/bench-tools
pgtoolsをデプロイして確認します。
$ kubectl apply -f pgtools.yaml
deployment.apps/pgtools created
service/pgadmin4-nodeport created
$ kubectl get deployment -o wide
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
pgtools 1 1 1 1 2m pgbench,pgadmin4 tzkoba/pgbench:0.1,dpage/pgadmin4:3.3 app=pgtools
pgtoolsの1ポッドにpgbenchとpgadmin4の2つのコンテナが入っていることが分かりますね。
pgadmin4はこちらのDockerイメージを使っています。
pgbenchは今回のためにCentOSのイメージにPostgreSQL 10のクライアントをインストールしたものを利用しています。
pgadminを使ってみる
今回はpgadmin用にNodePortのサービスを構築していますので、まずはそのポートを確認しましょう。
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
pgadmin4-nodeport NodePort 10.43.207.114 <none> 80:32273/TCP 8m
ここでは32273となっているので、http://サーバのグローバルIP:32273 で接続するとログイン画面が表示されます。
ログイン時の「Email Address」と「Passwordはpgtools.yaml内に環境変数として設定されているので、お好みに応じて修正をして下さい(初期値はいずれもpgadmin)。
では、第4回に構築したPostgreSQLのデータベースに接続しましょう。
pgadminログイン後の画面で左上の「Servers」を右クリックし、「Create」-「Server」をクリックします。
DB接続用のプロパティを以下のように入力し、「Save」で設定します。
以下の3つは第4回の構築時に使用したpg-rook-configmap.yamlの値と同じにする必要があります。
- Maintenance daatabase
- Username
- Password
そして、ここではホスト名に pg-rook-sf.default.svc を指定していることにも注目です。
Kubernetes内ではサービス名により名前解決ができるようになっており、[サービス名].[名前空間].[svc]で今回構築したデータベースにアクセスできます。
(今回はStatefulSetを使っており、Headless Serviceによるポッド名での名前解決も出来ますが、その説明は別の機会に。)
ユーザとデータベースを作ってみる
次回以降ではpgbenchを使いますので、その準備として以下を構築しておきます。
- benchユーザ
- benchデータベース
まずはユーザを作ります。
先ほどのpg-rook-sfへの接続をSaveしていれば、そのままデータベースに接続されているはずです。
その状態で「pg-rook-sf」-「Login/Group Roles」-「Create」-「Login/GroupRole...」と辿ってクリックして下さい。
ユーザ作成画面が開きますので、「Name」をbenchとして下さい。「Definition」にパスワード設定欄がありますので、こちらはご自由に。
もう一つ、「Privileges」タブの「Can login?」をONにしておかないとログインできないのでここも設定しておきます。「Save」を忘れずに。
ユーザが出来たら、次はデータベースの作成です。
「pg-rook-sf」-「Databases」-「Create」-「Database...」と辿ってクリックして下さい。
以下の入力画面で「Database」をbench、「Owner」もbenchとしたら「Save」で完了です。
まとめ
今回はpgtoolsを導入し、GUI管理ツールであるpgadmin4をコンテナとしてKubernetesクラスタ内に構築してみました。
このあたりが公開されているDockerイメージから簡単にできるのも、PostgreSQL on Kubernetes構成のメリットといえますね。
次回は本日までの準備を踏まえて、pgbenchの使い方を紹介しようと思います。
よろしくお願いします。