Запустить консул агента с config-dir вызвало не найденное исключение - PullRequest
0 голосов
/ 15 января 2020

В нашем docker -compose.yaml у нас есть:

version: "3.5"
services:
  consul-server:
    image: consul:latest
    command: "agent -server -bootstrap -ui -enable-script-checks=true -client=0.0.0.0 -config-dir=./usr/src/app/consul.d/"
    volumes:
      - ./consul.d/:/usr/src/app/consul.d

В папке consul.d мы статически определили наши сервисы. Он отлично работает с docker -compose.

Но при попытке запустить его на Kubernetes с этим configmap:

ahmad@ahmad-pc:~$ kubectl describe configmap consul-config -n staging
Name:         consul-config
Namespace:    staging
Labels:       <none>
Annotations:  <none>

Data
====
trip.json:
----
... omitted for clarity ...

и consul.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    io.kompose.service: consul-server
  name: consul-server
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: consul-server
  template:
    metadata:
      labels:
        io.kompose.service: consul-server
    spec:
      containers:
      - image: quay.io/bitnami/consul:latest
        name: consul-server
        ports:
        - containerPort: 8500
        #env:
        #- name: CONSUL_CONF_DIR # Consul seems not respecting this env variable
        #  value: /consul/conf/
        volumeMounts:
        - name: config-volume
          mountPath: /consul/conf/
        command: ["agent -server -bootstrap -ui -enable-script-checks=true -client=0.0.0.0 -config-dir=/consul/conf/"]
      volumes:
        - name: config-volume
          configMap:
            name: consul-config

Я получил следующую ошибку:

ahmad@ahmad-pc:~$ kubectl describe pod consul-server-7489787fc7-8qzhh -n staging
...

Error: failed to start container "consul-server": Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"agent -server -bootstrap -ui -enable-script-checks=true -client=0.0.0.0 -config-dir=/consul/conf/\": 
stat agent -server -bootstrap -ui -enable-script-checks=true -client=0.0.0.0 -config-dir=/consul/conf/: 
no such file or directory": unknown

Но когда я запускаю контейнер без command: agent... и bash, я могу отобразить файлы, смонтированные в нужном месте. Почему консул дает мне не найденную ошибку, несмотря на то, что папка существует?

1 Ответ

1 голос
/ 15 января 2020

Кому выполнить команду в модуле, вам необходимо определить команду в поле command и аргументы для команды в поле args. Поле command совпадает с ENTRYPOINT в Docker, а поле args совпадает с CMD.
В этом случае вы определяете /bin/sh как ENTRYPOINT и "-c, "consul agent -server -bootstrap -ui -enable-script-checks=true -client=0.0.0.0 -data-dir=/bitnami/consul/data/ -config-dir=/consul/conf/" в качестве аргументов, чтобы оно могло выполнить consul agent ...:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    io.kompose.service: consul-server
  name: consul-server
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: consul-server
  template:
    metadata:
      labels:
        io.kompose.service: consul-server
    spec:
      containers:
      - image: quay.io/bitnami/consul:latest
        name: consul-server
        ports:
        - containerPort: 8500
        env:
        - name: CONSUL_CONF_DIR # Consul seems not respecting this env variable
          value: /consul/conf/  
        volumeMounts:
        - name: config-volume
          mountPath: /consul/conf/
        command: ["bin/sh"]
        args: ["-c", "consul agent -server -bootstrap -ui -enable-script-checks=true -client=0.0.0.0 -data-dir=/bitnami/consul/data/ -config-dir=/consul/conf/"] 
      volumes:
        - name: config-volume
          configMap:
            name: consul-config
...