首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >挂载ConfigMap从MySQL my.cnf文件中删除旧数据

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

Stack Overflow用户
提问于 2019-11-20 10:53:35
回答 4查看 1.9K关注 0票数 3

我是Kubernetes/Openshift的一只新蜜蜂。

我正在尝试使用configmap更新MySQL配置。我有下面的yaml

代码语言:javascript
复制
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文件来实现这一点。

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-03 11:58:56

当前的配置将卷直接装入my.cnf文件- mountPath: /etc/mysql/my.cnf。当你这样做的时候,你正在替换它。subPath属性用于按键引用文件。类似的例子可以找到这里

我已经在本地env上部署了这个映像。作为默认的my.cnf,内部只有一些注释文本,并且:

代码语言:javascript
复制
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

这意味着来自两个文件夹的所有配置文件都包含在主配置中。

您可以将此配置挂载到其中一个文件夹中,而不是挂载主配置。例如:

代码语言:javascript
复制
...
          mountPath: /etc/mysql/conf.d/new.conf
          subPath: my.conf

最常见的传递ConfigMaps的方法是描述这里

我还建议您检查这个MySQL舵图关于MySQL中的配置文件。

票数 3
EN

Stack Overflow用户

发布于 2020-02-27 11:10:21

幸运的是,默认的/etc/mysql/my.cnf包括以下文件夹:/etc/mysql/conf.d/。因此,如果您将自定义配置放在该文件夹中的文件中,那么您就很好了。

您可以按照您的建议使用ConfigMap来实现这一点。

首先创建一个ConfigMap:

代码语言:javascript
复制
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/下的文件

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2019-11-21 08:35:22

我相信现有my.cnf文件的内容是固定的,.Thus,您可以将my.cnf文件的现有内容添加到您的configmap中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58952613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档