我有以下部署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-entrypoint-initdb.d/
目录下的文件初始化,都跑了,只有当数据目录是空的。这意味着只有第1次。
如果你看看到MySQL 5.6的入口点的脚本,你可以看到这个过程。在line 98,它会检查,如果数据目录是空的。
/docker-entrypoint-initdb.d/
目录的初始化文件。见line 190-192在kubernetes,当你使用一个持久卷,卷仍然存在关于缺失和豆荚的娱乐。所以,荚重新启动时,数据目录不是空的。因此,MySQL是跳过INIT部分,从line 98 - 202