挂载ConfigMap从MySQL my.cnf文件中删除旧数据

时间:2019-11-20 10:53:35

标签: kubernetes yaml openshift

我是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文件以实现该目标。

谢谢。

3 个答案:

答案 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