Как мне переписать docker -compose.yaml для Kubernetes? - PullRequest
2 голосов
/ 01 мая 2020

Я очень плохо знаком с K8s, поэтому никогда не использовал его. Но я ознакомился с концепцией узлов / стручков. Я знаю, что minikube - это локальный движок k8s для debug / et c, и что я должен взаимодействовать с любым движком k8s с помощью инструмента kubectl. Теперь мои вопросы:

  1. Гарантирует ли запуск одинаковой конфигурации на моем локальном экземпляре мини-куба и производственном экземпляре AWS / et c, что результатом будет identi c?

  2. Как настроить непрерывное развертывание для моего проекта? Теперь я настроил CI, который отправляет образы тестируемого кода в концентратор docker с тегом :latest. Но я хочу, чтобы они автоматически развертывались в режиме непрерывного обновления без прерывания работы.

  3. Было бы здорово получить правильные конфигурации с шагами, которые я должен выполнить, чтобы заставить его работать на любом кластере ? Я не хочу сохранять нотацию docker -compose и использовать kompose. Я хочу сделать это правильно в контексте k8s.

Мой текущий docker -compose.yml равен (django, и сервисы реагирования теперь доступны из dockerhub):

version: "3.5"
services:
  nginx:
    build:
      context: .
      dockerfile: Dockerfile.nginx
    restart: always
    command: bash -c "service nginx start && tail -f /dev/null"
    ports:
      - 80:80
      - 443:443
    volumes:
      - /mnt/wts_new_data_volume/static:/data/django/static
      - /mnt/wts_new_data_volume/media:/data/django/media
      - ./certs:/etc/letsencrypt/
      - ./misc/ssl/server.crt:/etc/ssl/certs/server.crt
      - ./misc/ssl/server.key:/etc/ssl/private/server.key
      - ./misc/conf/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./misc/conf/passports.htaccess:/etc/passports.htaccess:ro
    depends_on:
      - react
  redis:
    restart: always
    image: redis:latest
    privileged: true
    command: redis-server
  celery:
    build:
      context: backend
    command: bash -c "celery -A project worker -B -l info"
    env_file:
      - ./misc/.env
    depends_on:
      - redis
  django:
    build:
      context: backend
    command: bash -c "/code/manage.py collectstatic --no-input && echo donecollectstatic && /code/manage.py migrate && bash /code/run/daphne.sh"
    volumes:
      - /mnt/wts_new_data_volume/static:/data/django/static
      - /mnt/wts_new_data_volume/media:/data/django/media
    env_file:
      - ./misc/.env
    depends_on:
      - redis
  react:
    build:
      context: frontend
    depends_on:
      - django

1 Ответ

2 голосов
/ 01 мая 2020

Короткий ответ - да, вы можете повторить то, что у вас есть, с docker -композицией с K8s.

  1. Это зависит от вашей инфраструктуры. Например, если у вас есть внешний LoadBalancer в вашем AWS развертывании, он не будет таким же в вашем локальном.

  2. Вы можете сделать обновляемые обновления (обычно это работает со службами без сохранения состояния). Вы также можете воспользоваться преимуществом подхода GitOps .

  3. Компоновка docker отличается от K8, так что да, вам придется переводить это для объектов Kubernetes: Pod, Deployments, Secrets, ConfigMaps, Volumes и т. д. c, и по большей части объекты basi c будут работать на любом кластере, но всегда будут некоторые специфические c объекты, связанные с физические характеристики вашего кластера (т. е. объемы хранения, балансировщик нагрузки и т. д. c). Документы Kubernetes очень полны и очень полезны.

...