如何将Kubernetes配置图复制到Pod的可写区域?

时间:2019-05-15 18:21:35

标签: docker kubernetes redis configmap

我正在尝试在Kubernetes中部署Redis哨兵部署。我已经做到了,但是想要使用ConfigMaps允许我们更改sentinel.conf文件中的主服务器的IP地址。我开始进行此操作,但是redis无法写入配置文件,因为configMaps的安装点为readOnly。

我希望运行一个初始化容器,并将redis conf复制到Pod中的另一个目录中。但是init容器找不到conf文件。

我有什么选择?初始化容器? ConfigMap以外的东西?

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: redis-sentinel
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: redis-sentinel
    spec:
      hostNetwork: true
      containers:
      - name: redis-sentinel
        image: IP/redis-sentinel
        ports:
          - containerPort: 63790
          - containerPort: 26379
        volumeMounts:
          - mountPath: /redis-master-data
            name: data
          - mountPath: /usr/local/etc/redis/conf
            name: config
      volumes:
        - name: data
          emptyDir: {}
        - name: config
          configMap:
            name: sentinel-redis-config
            items:
            - key: redis-config-sentinel
              path: sentinel.conf

2 个答案:

答案 0 :(得分:0)

创建启动脚本。在该副本中,将安装在卷中的configMap文件写入可写位置。然后运行容器过程。

答案 1 :(得分:0)

根据@P Ekambaram的建议,您可以尝试以下一种方法:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: redis-sentinel
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: redis-sentinel
    spec:
      hostNetwork: true
      containers:
      - name: redis-sentinel
        image: redis:5.0.4
        ports:
          - containerPort: 63790
          - containerPort: 26379
        volumeMounts:
          - mountPath: /redis-master-data
            name: data
          - mountPath: /usr/local/etc/redis/conf
            name: config
      initContainers:
      - name: copy
        image: redis:5.0.4
        command: ["bash", "-c", "cp /redis-master/redis.conf /redis-master-data/"]
        volumeMounts:
        - mountPath: /redis-master
          name: config
        - mountPath: /redis-master-data
          name: data
     volumes:
     - name: data
       emptyDir: {}
     - name: config
       configMap:
         name: example-redis-config
         items:
         - key: redis-config
           path: redis.conf

在此示例中,initContainer将文件从ConfigMap复制到可写目录。

注意:

  

emptyDir卷是在将Pod分配给节点时首先创建的,并且只要该Pod在该节点上运行就存在。顾名思义,它最初是空的。 Pod中的容器都可以在emptyDir卷中读取和写入相同的文件,尽管该卷可以安装在每个Container中的相同或不同路径上。如果出于任何原因将Pod从节点中删除,则emptyDir中的数据将被永久删除。