MySQLをサービスで利用したいのですがGCPのCloud SQLを利用するのは高いため、GKE上でMySQLを実行します。MySQLのデータの保存には永続化ボリュームを利用します。
以下、参考になるドキュメントです。
1 2 3 4 5 6 7 8
| apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization
resources: - statefulset.yaml - service.yaml - myconf.yaml
|
1 2 3 4 5 6 7 8 9 10
| apiVersion: v1 kind: ConfigMap metadata: name: my-cnf data: my.cnf: | [mysqld] default-authentication-plugin = mysql_native_password character-set-server=utf8mb4
|
1 2 3 4 5 6 7 8 9 10 11 12
| apiVersion: v1 kind: Service metadata: name: cocotola-mysql spec: type: ClusterIP ports: - port: 3306 selector: app.kubernetes.io/name: cocotola-mysql app.kubernetes.io/part-of: cocotola
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| --- apiVersion: apps/v1 kind: StatefulSet metadata: name: cocotola-mysql labels: app.kubernetes.io/name: cocotola-mysql app.kubernetes.io/part-of: cocotola spec: serviceName: cocotola-mysql replicas: 1 selector: matchLabels: run: cocotola-mysql app.kubernetes.io/name: cocotola-mysql app.kubernetes.io/part-of: cocotola template: metadata: labels: run: cocotola-mysql app.kubernetes.io/name: cocotola-mysql app.kubernetes.io/part-of: cocotola spec: containers: - name: cocotola-mysql image: mysql:8.0.27 ports: - containerPort: 3306 volumeMounts: - name: mysql-data mountPath: /var/lib/mysql subPath: mysql - name: my-cnf mountPath: /etc/my.cnf subPath: my.cnf readOnly: true volumes: - name: my-cnf configMap: name: my-cnf volumeClaimTemplates: - metadata: name: mysql-data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 20Gi
|
1 2 3 4 5 6 7 8 9 10
| apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: cocotola
resources: - ../../base
patchesStrategicMerge: - statefulset.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| ---
apiVersion: apps/v1 kind: StatefulSet metadata: name: cocotola-mysql spec: replicas: 1 template: spec: containers: - name: cocotola-mysql env: - name: MYSQL_ROOT_PASSWORD value: mysql - name: MYSQL_PORT value: "3306" - name: MYSQL_USER value: user - name: MYSQL_PASSWORD value: password - name: MYSQL_DATABASE value: database
|
適用コマンド:
1
| kustomize build overlays/production | kubectl apply -f -
|