我有以下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中删除了一个表(user),当我再次创建部署时,这个表(user)不在那里。这意味着一旦部署重新创建benn,kubernetes就不会重新加载模式。
发布于 2019-02-04 11:59:16
这是预期的行为。仅当数据目录为空时,才会运行/docker-entrypoint-initdb.d/目录下的初始化文件。这意味着只有第一次。
如果您查看MySQL 5.6的入口点脚本,您可以看到此过程。在line 98中,它检查数据目录是否为空。
/docker-entrypoint-initdb.d/目录下的初始化文件。从line 98 - 202 看,在line 190-192
在kubernetes中,当您使用持久卷时,卷将在删除和重新创建pod时持续存在。因此,当pod重启时,数据目录不为空。因此,MySQL跳过了line 98 - 202 中的初始化部分
https://stackoverflow.com/questions/54506716
复制相似问题