0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

CockroachDBでのデータベースとユーザーの作成

では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

無事データベースとユーザーが作られているのが確認できました。


明日はこのデータベースにアプリからアクセスしてみたいと思います。ではまた明日。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?