では9日目やっと三分の一ってとこですね。
今日は昨日やり残したデータベースとユーザーの作成を行います。
Jobの定義
クラスターのセットアップと同様に、一回だけ実行するJobリソースとして定義します。
app-db-init.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: qiita-advent-calendar-2019
namespace: qiita
labels:
app: qiita-advent-calendar-2019-db-init
spec:
template:
spec:
containers:
- name: db-init
image: cockroachdb/cockroach:v2.1.4
imagePullPolicy: IfNotPresent
command:
- "/bin/bash"
- "/opt/scripts/user-schema-bootstrap.sh"
env:
- name: COCKROACH_HOST
value: "cockroachdb-proxy"
- name: COCKROACH_PORT
value: "26257"
- name: DB_NAME
value: "qiita_advent_calendar_2019_db"
- name: DB_USER
value: "qiita_advent_calendar_2019"
volumeMounts:
- name: cockroachdb-scripts
mountPath: /opt/scripts
readOnly: true
restartPolicy: OnFailure
volumes:
- name: cockroachdb-scripts
configMap:
name: cockroachdb-scripts
CockroachDBのコンテナ上でスクリプトを実行するだけのシンプルなJobです。
そして走らせるスクリプト本体は以下のようにConfigMapを使って渡します。
cockroach-scripts.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cockroachdb-scripts
namespace: qiita
data:
user-schema-bootstrap.sh: |
#!/bin/bash
set -e
if [ -z "$DB_USER" ]; then
echo "DB_USER envvar is not set"
exit 1
fi
if [ -z "$DB_NAME" ]; then
echo "DB_NAME envvar not set"
exit 1
fi
SQL_CMD="/cockroach/cockroach -d system sql" > /dev/null
$SQL_CMD << EOF
CREATE USER IF NOT EXISTS $DB_USER;
CREATE DATABASE IF NOT EXISTS $DB_NAME;
GRANT ALL ON DATABASE $DB_NAME TO $DB_USER;
EOF
Jobの実行
では、ConfigMapを作成してJobを実行してみましょう。
$ kubectl apply -f kubernetes/cockroach-scripts.yaml
configmap/cockroachdb-scripts created
$ kubectl -n qiita get configmaps
NAME DATA AGE
cockroachdb-scripts 1 9s
$ kubectl apply -f kubernetes/app-db-init.yaml
job.batch/qiita-advent-calendar-2019 created
$ kubectl -n qiita get jobs.batch qiita-advent-calendar-2019
NAME COMPLETIONS DURATION AGE
qiita-advent-calendar-2019 1/1 6s 55s
$ kubectl -n qiita get pods qiita-advent-calendar-2019-n7hq7
NAME READY STATUS RESTARTS AGE
qiita-advent-calendar-2019-n7hq7 0/1 Completed 0 38s
どうやらJobの実行は完了したようです。
kubectl exec
コマンドを使ってCockroachにアクセスし、実際にDBとユーザーが作られたか確認してみましょう。
$ kubectl -n qiita exec -it cockroachdb-0 -- /cockroach/cockroach sql --url postgres://root@localhost:26257 --insecure
...
root@localhost:26257/defaultdb> show users;
user_name
+----------------------------+
qiita_advent_calendar_2019
root
(2 rows)
Time: 16.6267ms
root@localhost:26257/defaultdb> show databases;
database_name
+-------------------------------+
defaultdb
postgres
qiita_advent_calendar_2019_db
system
(4 rows)
Time: 10.7199ms
無事データベースとユーザーが作られているのが確認できました。
明日はこのデータベースにアプリからアクセスしてみたいと思います。ではまた明日。