2017-08-14 69 views
0

我想在容器的MySQL上設置初始數據。 在docker-compose.yml中,這樣的代碼可以在運行容器時創建初始數據。如何在Kubernetes上創建時初始化mysql容器?

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

但是,如何在運行時在Kubernetes上創建初始數據?

回答

1

根據MySQL的泊塢窗圖像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'); 
+0

雖然我設置了hostPath,但似乎需要絕對路徑。 但是我遇到了這個錯誤。 錯誤:代碼= 2 DESC =未能啓動容器「ae00a8dc51d8895506881960a310c447b67643ccd088d164891a68f32f124634」:從後臺程序錯誤響應命令mkdir/gcptmp:只讀文件系統 – Harry

+0

@Harry我已經更新我的答案使用帶有'ConfigMap'量。使用'hostPath'要求您將容器作爲特權容器運行,或者修改主機上的文件權限以便寫入'hostPath'卷,在大多數情況下這是不必要的。 –

+0

這似乎是可能的配置yaml文件bacome凌亂,如果sql很大。 在我目前的情況下,我創建了包含初始sql文件的擴展mysql映像。 但是,我從你身上學到了很多東西。謝謝!! – Harry

0

您需要創建PV和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 
+0

我有一些SQL文件來創建表和插入數據。 我想在創建容器時用於初始化。 這段代碼似乎沒有什麼可做的。 – Harry

+0

由於ivan的迴應,您需要使用PV安裝sql文件文件系統,PVC – sfgroups

+0

感謝您的幫助! – Harry

相關問題