0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

とある英国企業におけるマイクロサービス実践例Advent Calendar 2019

Day 9

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

Last updated at Posted at 2019-12-08

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

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


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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?