Развертывание приложения docker-compose в Kubernetes в Docker для Windows

Я пытаюсь следовать инструкциям на https://docs.docker.com/docker-for-windows/kubernetes/ для запуска файла docker-compose.yml против kubernetes в Docker для Windows.

Я использую версию Edge Docker для Windows - 18.03.0-ce-rc4 - и у меня включен kubernetes.

Я использую пример приложения docker-compose по адресу https://docs.docker.com/compose/gettingstarted/, т.е.

version: '3.3'
services:
  web:
    build: .
    ports:
      - '5000:5000'
  redis:
    image: redis

Этот пример отлично работает с docker-compose build а также docker-compose up

Но следуя документации, указанной выше для docker stackЯ получаю следующее:

PS C:\dev\projects\python\kubetest> docker stack deploy --compose-file .\docker-compose.yml mystack
Ignoring unsupported options: build

Stack mystack was created
Waiting for the stack to be stable and running...
 - Service redis has one container running
PS C:\dev\projects\python\kubetest> kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP     5d
redis        ClusterIP   None         <none>        55555/TCP   8s

Обратите внимание, что он не создает веб-сервис, наряду с ошибкой "игнорирование неподдерживаемых параметров: сборка".

Я также попытался использовать пример файла docker-compose.yml в документации, указанной выше, и он тоже не работал, с совершенно другой ошибкой.

Короче говоря, следуя документации, я не могу получить что-либо развернутое в kubernetes на Docker для Windows.

Заранее спасибо за руководство

1 ответ

Решение

Из-за отсутствия поддержки build не было бы image бежать за web сервисные контейнеры.

Compose может управлять сборкой для вас на одном хосте Docker. Поскольку Swarm и Kubernetes обычно работают на нескольких узлах, image должен ссылаться на реестр, доступный в сети, чтобы все узлы могли получить доступ к одному и тому же образу.

Dockers stack deploy Пример включает в себя этап настройки личного реестра и его использования в качестве источника изображения:

services:
  web:
    image: 127.0.0.1:5000/stackdemo

Временное решение

В этом случае, возможно, удастся избежать ручного создания образа и ссылки на это имя образа из-за всего, что выполняется под одним экземпляром Docker, это зависит от того, как настроен Kubernetes.

version: '3.3'
services:
  web:
    build: .
    image: me/web
    ports:
      - '5000:5000'
  redis:
    image: redis

Создайте изображение внешне

docker-compose build web

или непосредственно с docker:

docker build -t me/web .

Есть проект:

https://github.com/kubernetes/kompose

называется Docker Kompose, который помогает пользователям, у которых уже есть файлы docker-compose, максимально легко развернуть свои приложения в Kubernetes, автоматически преобразовав их существующий файл docker-compose во многие файлы yaml.

Я столкнулся с той же проблемой при следовании официальной инструкции.

Чтобы обойти эту проблему, я выбрал использование kubectl для развертывания образов докера на локальный k8s вместо использования docker stack (кажется, коренной причиной может быть --orchestrator kubernetes флаг, это не работает).

Вот шаги:

  1. Использование реестра докеров Kubernetes для каждого терминала (важно):

    бежать & minikube docker-env | iex под Windows Powershell (iex это псевдоним Invoke-Expression)

    или же

    бежать eval $(minikube docker-env) в среде bash.

    После этого беги docker image lsубедитесь, что в вашем реестре докеров задано окружение Кубернетеса. (Вы должны увидеть некоторые изображения по умолчанию в домене 'k8s.gcr.io'.)

    Вам может потребоваться сделать это в каждом терминале, если открыто несколько терминалов.

  2. Восстановите ваш образ докера:

    бежать docker-compose -f /path/to/your/docker-compose.yml build

    Ваше изображение должно появиться в локальном реестре K8s.

  3. Запустите ваше изображение с помощью 'kubectl':

    бежать kubectl run hello-world --image=myimage --image-pull-policy=Never

Рекомендации:

/questions/34135293/kak-ispolzovat-lokalnyie-obrazyi-dokerov-s-minikube/34135315#34135315

Хотя можно было бы развернуть docker compose yamls в кубернетах, как предлагается. Лучше создать правильные kubernetes yamls для развертывания в вашем конкретном кластере.

Есть несколько инструментов, которые могут упростить вашу жизнь.

Одним из таких инструментов является Move2Kube (https://github.com/konveyor/move2kube). Ты можешь сделать

move2kube translate -s <folder containing the dockerfiles>

Он может создавать соответствующие развертывания, службы, входящие данные и т. Д., Которые потребуются для развертывания вашего приложения.

Другие вопросы по тегам