Не могу исправить ошибку при монтировании конфигурационного файла nginx в kubernetes - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь использовать обратный прокси-сервер nginx и использовать простой default.conf.Вот мой файл docker-compose:

version: '3'
services:
  authorizationmicroservice:
    image: gcr.io/root-booking-245613/authorizationmicroservice:v1
    container_name: authorizationmicroservice
    restart: always
    labels:
      - "kompose.service.type=LoadBalancer"
    ports:
      - "3002:${PORT:-3002}"
    networks:
      - backend
  musicmicroservice:
    image: gcr.io/root-booking-245613/musicmicroservice:v1
    container_name: musicmicroservice
    restart: always
    ports:
      - "3001:${PORT:-3001}"
    networks:
      - backend
    labels:
      - "kompose.service.type=LoadBalancer"
  nginx:
    image: nginx:latest
    networks:
      - backend
    ports:
      - "8080:${PORT:-8080}"
    volumes:
      - ./nginxProxy:/etc/nginx/conf.d
    depends_on:
      - authorizationmicroservice
      - musicmicroservice
    labels:
      - "kompose.service.type=LoadBalancer"
networks:
    backend:

Все работает нормально, если я создаю docker-compose, но когда я пытаюсь развернуть его с помощью kubernetes, я получаю следующий журнал ошибок в модуле nginx:

Warning  Failed     
34m
                   kubelet, gke-hello-cluster-default-pool-8c57f061-7hd8 

Error: failed to start container "nginx": Error response from daemon:
 OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:424: container init caused \"rootfs_linux.go:58: mounting \\\"/home/artemda4/kubernetes-engine-samples/muniverse/home/artemda4/kubernetes-engine-samples/muniverse/nginxProxy/default.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/751acda10027acdcca21d16df3be48197170c04dd3520cd7fa8aeb083b5b6bc1/merged\\\" at \\\"/var/lib/docker/overlay2/751acda10027acdcca21d16df3be48197170c04dd3520cd7fa8aeb083b5b6bc1/merged/etc/nginx/conf.d/default.conf\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

Как мне подключать тома в Kubernetes?Это мой конфиг nginx, он находится в nginxProxy

server {
  listen 8080;
  client_max_body_size 50m;
  fastcgi_send_timeout 600;
  fastcgi_read_timeout 600;
  proxy_connect_timeout 600;
  proxy_send_timeout 600;
  proxy_read_timeout 600;
  send_timeout 600;
  root /srv/www/static;
  location /api/authorization {
    proxy_pass http://authorizationmicroservice:3002;
  }
  location /api/music {
    proxy_pass http://musicmicroservice:3001;
  }
  location /api/playlist {
    proxy_pass http://musicmicroservice:3001;
  }
  #this where socket io will be handling the request
  location /socket.io {
    proxy_pass http://musicmicroservice:3001/socket.io/;
  }
}

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Обычно в Kubernetes данные конфигурации хранятся в ConfigMap .Похоже, Kompose не будет автоматически создавать ConfigMap для вас , поэтому вам нужно создать его вручную.

Я бы предложил преобразовать файл YAML Docker Compose в Kubernetes YAMLfiles

kompose convert

Здесь проще всего создать ConfigMap из существующего файла конфигурации.(Для более длительного использования я бы упаковал его в файл YAML рядом с другими файлами, созданными Kompose.)

kubectl create configmap nginx --from-file=./nginxProxy/

В сгенерированном файле nginx-deployment.yaml вы ищете две вещи, одну длясделайте ConfigMap доступным в модуле и один для монтирования полученного хранилища в контейнер.

# Inside the deployment template
spec:
  volumes:
    - name: nginx-config
      configMap:
        name: nginx # matches `kubectl create` command
  containers:
    - name: nginx
      # other standard container settings
      volumeMounts:
        - name: nginx-config # matches `volumes:` above
          mountPath: /etc/nginx/conf.d

Затем, когда вы запустите kubectl apply -f . для установки этих объектов в кластер, он будет считывать конфигурацию из-cluster ConfigMap и не зависит от каких-либо специфичных для хоста путей (которые Kompose не генерирует в любом случае).

0 голосов
/ 23 сентября 2019

Так как вы указали, что nginx config находится в ./nginxProxy каталоге

 volumes:
      - ./nginxProxy:/etc/nginx/conf.d

Итак, k8s пытается найти nginx config default.conf файл в каталоге /home/artemda4/kubernetes-engine-samples/muniverse/home/artemda4/kubernetes-engine-samples/muniverse/nginxProxy:

mounting \\\"/home/artemda4/kubernetes-engine-samples/muniverse/home/artemda4/kubernetes-engine-samples/muniverse/nginxProxy/default.conf\\\" to rootfs

Это текущий (т. Е. ./) каталог для k8s

Я бы предложил сохранить nginx config в месте по умолчанию, например: /etc/nginx/conf.d

Итак, ваша конфигурация будет выглядеть так:

version: '3'
services:
  authorizationmicroservice:
    image: gcr.io/root-booking-245613/authorizationmicroservice:v1
    container_name: authorizationmicroservice
    restart: always
    labels:
      - "kompose.service.type=LoadBalancer"
    ports:
      - "3002:${PORT:-3002}"
    networks:
      - backend
  musicmicroservice:
    image: gcr.io/root-booking-245613/musicmicroservice:v1
    container_name: musicmicroservice
    restart: always
    ports:
      - "3001:${PORT:-3001}"
    networks:
      - backend
    labels:
      - "kompose.service.type=LoadBalancer"
  nginx:
    image: nginx:latest
    networks:
      - backend
    ports:
      - "8080:${PORT:-8080}"
    volumes:
      - /etc/nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - authorizationmicroservice
      - musicmicroservice
    labels:
      - "kompose.service.type=LoadBalancer"
networks:
    backend:
...