如何强制Kubernete加载MySQL数据库?

问题描述 投票:0回答:1

我有以下部署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的”新模式。事实上,我删除了一个表(用户)的吊舱内,当我创建的部署再次表(用户)是不存在。这意味着kubernetes不重装模式一旦部署重建鸭舌。

docker kubernetes
1个回答
1
投票

这是预期的行为。 /docker-entrypoint-initdb.d/目录下的文件初始化,都跑了,只有当数据目录是空的。这意味着只有第1次。

如果你看看到MySQL 5.6的入口点的脚本,你可以看到这个过程。在line 98,它会检查,如果数据目录是空的。

  • 如果是空的,该脚本将运行/docker-entrypoint-initdb.d/目录的初始化文件。见line 190-192
  • 如果不是空的,整个入口点脚本将被忽略,从line 98 - 202

在kubernetes,当你使用一个持久卷,卷仍然存在关于缺失和豆荚的娱乐。所以,荚重新启动时,数据目录不是空的。因此,MySQL是跳过INIT部分,从line 98 - 202

© www.soinside.com 2019 - 2024. All rights reserved.