目录
article
K8S 中部署 MySQL 时通过 ConfigMap 设置自定义配置
K8S 中部署 MySQL 时通过 ConfigMap 设置自定义配置
添加一个 ConfigMap 并添加一个名为 my.cnf 的 Key :
apiVersion: v1
data:
my.cnf: |
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
default-time-zone='+08:00'
kind: ConfigMap
metadata:
labels:
app: jiajia-mysql
name: jiajia-mysql-test
namespace: jiajia-test
在部署清单文件中,在 spec.volumes 中定义一个 configMap 类型的 volume ,然后在 containers.volumeMounts 将这个 volume 挂载到 MySQL 自定义配置文件的目录(/etc/mysql/conf.d/)。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: jiajia-mysql
name: jiajia-mysql
namespace: jiajia-test
spec:
progressDeadlineSeconds: 600
replicas: 1
selector:
matchLabels:
app: jiajia-mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: jiajia-mysql
spec:
affinity:
nodeAffinity: {}
containers:
- env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: mysql-root-password
name: jiajia-mysql
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
key: mysql-password
name: jiajia-mysql
optional: true
- name: MYSQL_USER
- name: MYSQL_DATABASE
image: mysql:5.7.30
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /var/lib/mysql
name: data
- mountPath: /etc/mysql/conf.d/
name: my-conf-volume
readOnly: true
volumes:
- name: data
persistentVolumeClaim:
claimName: jiajia-mysql
- configMap:
defaultMode: 420
items:
- key: my.cnf
path: my.cnf
name: jiajia-mysql-test
name: my-conf-volume
完整的 yaml 文件
apiVersion: v1
data:
my.cnf: |-
[mysqld]
character-set-server=utf8
run.sh: ""
kind: ConfigMap
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: jiajia-mysql
name: jiajia-mysql
namespace: jiajia-test
spec:
progressDeadlineSeconds: 600
replicas: 1
selector:
matchLabels:
app: jiajia-mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: jiajia-mysql
spec:
affinity:
nodeAffinity: {}
containers:
- env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: mysql-root-password
name: jiajia-mysql
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
key: mysql-password
name: jiajia-mysql
optional: true
- name: MYSQL_USER
- name: MYSQL_DATABASE
image: mysql:5.7.30
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- sh
- -c
- mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}
failureThreshold: 3
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: jiajia-mysql
ports:
- containerPort: 3306
name: mysql
protocol: TCP
readinessProbe:
exec:
command:
- sh
- -c
- mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}
failureThreshold: 3
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
requests:
cpu: 100m
memory: 256Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/mysql
name: data
- mountPath: /etc/mysql/conf.d/
name: my-conf-volume
readOnly: true
dnsPolicy: ClusterFirst
initContainers:
- command:
- rm
- -fr
- /var/lib/mysql/lost+found
image: busybox:1.32
imagePullPolicy: IfNotPresent
name: remove-lost-found
resources:
requests:
cpu: 10m
memory: 10Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/mysql
name: data
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
volumes:
- name: data
persistentVolumeClaim:
claimName: jiajia-mysql
- configMap:
defaultMode: 420
items:
- key: my.cnf
path: my.cnf
name: jiajia-mysql-test
name: my-conf-volume