Kubernetesを勉強しているものです。
StatefulSetを使ってMariaDBリソースを作成しているのですが、作成時の初期化処理としてCREATE TABLE構文が記述されたsqlファイルを実行
させたいのですが、うまくいきません。MariaDBリソースの作成は成功するのですが、podに入ってshow tablesとしてもテーブルが作成できていません。
実施した手順は以下です。
1.secrets.yamlを作成する
yaml
1apiVersion: v1 2kind: Secret 3data: 4 root-password: cm9vdA== 5 database-name: dGVzdA== 6 user-username: aG9nZXVzZXI= 7 user-password: cGFzc3dvcmQ= 8metadata: 9 name: mysql-secret 10 namespace: sample-namespace
2.Secretリソースを作成する。
kubectl apply -f secrets.yaml.yaml
3.mariadb-initdb-config.yamlを作成する
yaml
1apiVersion: v1 2kind: ConfigMap 3metadata: 4 name: mariadb-server-initdb-config 5 namespace: sample-namespace 6data: 7 createdb.sql: | 8 DROP DATABASE IF EXISTS test; 9 CREATE DATABASE test; 10 DROP TABLE IF EXISTS test.users; 11 CREATE TABLE test.users (id int, name varchar(36) NOT NULL, email varchar(36) NOT NULL)DEFAULT CHARACTER SET=utf8; 12 GRANT ALL ON test.* TO hogeuser; 13 INSERT INTO users VALUES (1,"user1","test1@co.jp");
4.ConfigMapリソースを作成する
kubectl apply -f mariadb-initdb-config.yaml
5.mariadb-service.yamlを作成する
yaml
1apiVersion: v1 2kind: Service 3metadata: 4 name: sample-mariadb 5 namespace: sample-namespace 6 labels: 7 db: mariadb 8spec: 9 clusterIP: None 10 selector: 11 db: mariadb 12 ports: 13 - name: maria-database 14 port: 3306 15--- 16apiVersion: apps/v1 17kind: StatefulSet 18metadata: 19 name: maria-database 20 namespace: sample-namespace 21spec: 22 selector: 23 matchLabels: 24 db: mariadb 25 serviceName: "nginx" 26 replicas: 2 27 template: 28 metadata: 29 labels: 30 db: mariadb 31 spec: 32 containers: 33 - name: sample-mariadb 34 image: mariadb:10.2 35 ports: 36 - containerPort: 3306 37 name: maria-database 38 env: 39 - name: MYSQL_ROOT_PASSWORD 40 valueFrom: 41 secretKeyRef: 42 name: mysql-secret 43 key: root-password 44 - name: MYSQL_DATABASE 45 valueFrom: 46 secretKeyRef: 47 name: mysql-secret 48 key: database-name 49 - name: MYSQL_USER 50 valueFrom: 51 secretKeyRef: 52 name: mysql-secret 53 key: user-username 54 - name: MYSQL_PASSWORD 55 valueFrom: 56 secretKeyRef: 57 name: mysql-secret 58 key: user-password 59 volumeMounts: 60 - name: mariadb-data 61 mountPath: /var/lib/mysql 62 - name: mariadb-init-data 63 mountPath: /docker-entrypoint-initdb.d 64 volumes: 65 - name: mariadb-init-data 66 configMap: 67 name: mariadb-server-initdb-config 68 volumeClaimTemplates: 69 - metadata: 70 name: mariadb-data 71 namespace: sample-namespace 72 spec: 73 accessModes: ["ReadWriteOnce"] 74 resources: 75 requests: 76 storage: 1Gi
6.ServiceとPodリソースを作成する
kubectl apply -f mariadb-service.yaml
7.podの状態を確認する
>kubectl get pods -n sample-namespace NAME READY STATUS RESTARTS AGE maria-database-0 1/1 Running 0 9m8s maria-database-1 1/1 Running 0 9m6s
8.MariaDBのpodにアクセスする
kubectl exec --namespace=sample-namespace -it maria-database-0 /bin/bash
9.usersテーブルが作成されているか確認したがusersテーブルが作成されていない
>kubectl exec --namespace=sample-namespace -it maria-database-0 /bin/bash kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. root@maria-database-0:/# root@maria-database-0:/# mysql -h 127.0.0.1 -uhogeuser -ppassword -P 3306 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.2.41-MariaDB-1:10.2.41+maria~bionic mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> use test; Database changed MariaDB [test]> show tables; Empty set (0.00 sec) MariaDB [test]>
mariadb-service.yamlのvolumeMountsの設定がうまくいっていないため、テーブルが作成されていないと思われるため
Statefulset create tableやStatefulSet volumeMount create tableといったキーワードで解決策を探していますが、いまのところ解決できていません。
KubernetesのStatefulSetにお詳しい方がいましたらご回答いただけないでしょうか?
あなたの回答
tips
プレビュー