我是Kubernetes / Openshift中的新手。
我正在尝试使用configmap更新MySQL配置。我有下面的yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: slave-replcmap
data:
my.conf: |
[mysqld]
server-id=2
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-slave
spec:
selector:
matchLabels:
app: mysql-slave
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql-slave
spec:
volumes:
- name: slave-mysql-persistent-storage
persistentVolumeClaim:
claimName: slave-nfs-claim1
- name: slave-replcmap-vol
configMap:
name: slave-replcmap
- name: slave-mysqlinitconf-vol
configMap:
name: slave-mysqlinitcmap
containers:
- image: mysql:5.7
name: mysql-slave
env:
- name: MYSQL_SERVER_CONTAINER
value: mysql
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_ROOT_PASSWORD
- name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_DATABASE
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_USER
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_PASSWORD
ports:
- containerPort: 3306
name: mysql-slave
volumeMounts:
- name: slave-mysql-persistent-storage
mountPath: /var/lib/mysql
- name: slave-mysqlinitconf-vol
mountPath: /docker-entrypoint-initdb.d
- name: slave-replcmap-vol
mountPath: /etc/mysql/my.cnf
subPath: my.conf
它正在更新配置文件,没有任何问题。
但是问题是它从my.cnf文件中删除了现有内容并添加了configmap数据。我需要将此configmap数据附加到my.cnf文件,而不删除现有数据。
请让我知道如何修改yml文件以实现该目标。
谢谢。
答案 0 :(得分:1)
您当前的配置安装卷直接存储到my.cnf
文件-mountPath: /etc/mysql/my.cnf
中。当您这样做时,您正在更换它。 subPath
属性用于按键引用文件。可以找到类似的示例here。
我已将此映像部署在本地环境中。默认情况下,my.cnf
内仅包含一些注释文本,并且:
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
这意味着两个文件夹中的所有配置文件都包含在主配置中。
您可以将该配置安装到其中一个文件夹,而不是安装主配置。例如:
...
mountPath: /etc/mysql/conf.d/new.conf
subPath: my.conf
描述here的另一种方式来传递ConfigMaps
。
我还建议您检查MySQL
中有关配置文件的MySQL HELM Chart。
答案 1 :(得分:0)
我认为现有my.cnf文件的内容是固定的。因此,您可以将my.cnf文件的现有内容添加到configmap中。
答案 2 :(得分:0)
幸运的是,默认/etc/mysql/my.cnf
包含以下文件夹:/etc/mysql/conf.d/
。因此,如果将自定义配置放在该文件夹中的文件中,那就很好了。
您可以按照建议使用ConfigMap来实现。
首先创建一个ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-custom-config
data:
my.custom.conf: |
[mysqld]
server-id=2
从示例中可以看到,该ConfigMap包含一个名为my.custom.conf
的文件。
接下来,将此文件映射到/etc/mysql/conf.d/
下的文件:
spec:
containers:
- image: mysql:5.7
name: mysql
...
volumeMounts:
- name: mysql-custom-config
mountPath: /etc/mysql/conf.d/custom.my.cnf
subPath: custom.my.cnf #should be the name used in the ConfigMap
volumes:
- name: mysql-custom-config
configMap:
name: mysql-custom-config