如何在Kubernetes上创build时初始化mysql容器?

我想在容器的MySQL上设置初始数据。 在docker-compose.yml中,这样的代码可以在运行容器时创build初始数据。

volumes: - db:/var/lib/mysql - "./docker/mysql/conf.d:/etc/mysql/conf.d" - "./docker/mysql/init.d:/docker-entrypoint-initdb.d" 

但是,如何在运行时在Kubernetes上创build初始数据?

根据MySQL Docker镜像README ,与容器启动时数据初始化相关的部分是确保所有初始化文件都装载到容器的/docker-entrypoint-initdb.d文件夹中。

您可以在ConfigMap定义初始数据,并将相应的卷挂载到您的容器中,如下所示:

 apiVersion: extensions/v1beta1 kind: Pod metadata: name: mysql spec: containers: - name: mysql image: mysql ports: - containerPort: 3306 volumeMounts: - name: mysql-initdb mountPath: /docker-entrypoint-initdb.d volumes: - name: mysql-initdb configMap: name: mysql-initdb-config --- apiVersion: v1 kind: ConfigMap metadata: name: mysql-initdb-config data: initdb.sql: | CREATE TABLE friends (id INT, name VARCHAR(256), age INT, gender VARCHAR(3)); INSERT INTO friends VALUES (1, 'John Smith', 32, 'm'); INSERT INTO friends VALUES (2, 'Lilian Worksmith', 29, 'f'); INSERT INTO friends VALUES (3, 'Michael Rupert', 27, 'm'); 

你需要像这样创buildpv和pvclaim,然后部署mysql数据库

 kind: PersistentVolume apiVersion: v1 metadata: name: sfg-dev-mysql-pv-volume labels: type: local spec: storageClassName: manual capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: "/tmp/data" --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: sfg-dev-mysql-pv-claim spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 1Gi 

创造秘诀:

 kubectl create secret generic mysql-secret --from-literal=mysql-root-password=kube1234 --from-literal=mysql-user=testadm --from-literal=mysql-password=kube1234 kubectl create configmap db --from-literal=mysql-database: database 

mysql部署:

 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: sfg-dev-mysql-db labels: app: sfg-dev-mysql spec: strategy: type: Recreate template: metadata: labels: app: sfg-dev-mysql tier: db spec: containers: - image: mysql:8.0.2 name: mysql env: - name: MYSQL_DATABASE valueFrom: configMapKeyRef: name: db key: mysql-database - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql-root-password - name: MYSQL_USER valueFrom: secretKeyRef: name: mysql-secret key: mysql-user - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql-password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: sfg-dev-mysql-pv-claim