Как скопировать конфигурационный файл Kubernetes в область записи для модуля? - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь развернуть дозорное развертывание redis в Kubernetes.Я достиг этого, но хочу использовать ConfigMaps, чтобы позволить нам изменить IP-адрес мастера в файле sentinel.conf.Я начал это, но Redis не может записать в файл конфигурации, потому что точка монтирования для configMaps только для чтения.

Я надеялся запустить контейнер init и скопировать файл redis conf в другой каталог прямо в модуле.Но контейнер 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 ]

1 голос
/ 17 мая 2019

Согласно предложению @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 работает на этом узле. Как следует из названия, он изначально пуст. Все контейнеры в модуле могут читать и записывать одни и те же файлы на томе emptyDir, хотя этот том можно монтировать по одному или разным путям в каждом контейнере. Когда Pod удаляется из узла по какой-либо причине, данные в emptyDir удаляются навсегда.

0 голосов
/ 15 мая 2019

Создать скрипт запуска.В этом скопируйте файл configMap, который смонтирован на томе, в доступное для записи место.Затем запустите процесс контейнера.

...