質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

0回答

555閲覧

KubernetesでMariaDBのStatefulSetリソース作成時にテーブル作成を行いたい。

Linkey

総合スコア77

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2022/01/25 12:43

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にお詳しい方がいましたらご回答いただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問