簡體   English   中英

如何強制Kubernete加載mysql數據庫?

[英]How to force Kubernete to load mysql db?

我有以下部署yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: iam-mysql
  labels:
    app: iam
    tier: mysql
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: iam
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: iam
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: iam-mysql
        envFrom:
        - configMapRef:
            name: iam-mysql-conf-dev
        - secretRef:
            name: iam-mysql-pass-dev
        ports:
        - containerPort: 3306
          name: iam-mysql
        volumeMounts:
          - name: iam-mysql-persistent-storage
            mountPath: /var/lib/mysql
          - name: mysql-initdb
            mountPath: /docker-entrypoint-initdb.d
      restartPolicy: Always
      volumes:
        - name: iam-mysql-persistent-storage
          persistentVolumeClaim:
            claimName: iam-mysql-pv-claim
        - name: mysql-initdb
          configMap:
            name: iam-mysql-initdb-dev

創建新架構后,我無法使用新架構重新加載“ iam-mysql-initdb-dev”。 實際上,我刪除了Pod內的一個表(用戶),並且當我再次創建部署時,該表(用戶)不存在。 這意味着一旦重新創建部署,kubernetes就不會重新加載架構。

這是預期的行為。 /docker-entrypoint-initdb.d/目錄下的初始化文件僅在數據目錄為空時運行。 這意味着只有第一次。

如果查看MySQL 5.6的入口點腳本,則可以看到此過程。 第98行中 ,它檢查數據目錄是否為空。

  • 如果為空,該腳本將運行/docker-entrypoint-initdb.d/目錄的初始化文件。 參見190-192行
  • 如果不為空,則將忽略整個入口點腳本,從98-202 行開始

在kubernetes中,當您使用持久卷時,這些卷在刪除和重新創建Pod時仍然存在。 因此,當pod重新啟動時,數據目錄不為空。 因此,MySQL跳過了第98-202 的init部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM