Развертывание приложения 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 .
Есть проект:
называется Docker Kompose, который помогает пользователям, у которых уже есть файлы docker-compose, максимально легко развернуть свои приложения в Kubernetes, автоматически преобразовав их существующий файл docker-compose во многие файлы yaml.
Я столкнулся с той же проблемой при следовании официальной инструкции.
Чтобы обойти эту проблему, я выбрал использование kubectl
для развертывания образов докера на локальный k8s вместо использования docker stack
(кажется, коренной причиной может быть --orchestrator kubernetes
флаг, это не работает).
Вот шаги:
Использование реестра докеров Kubernetes для каждого терминала (важно):
бежать
& minikube docker-env | iex
под Windows Powershell (iex
это псевдонимInvoke-Expression
)или же
бежать
eval $(minikube docker-env)
в среде bash.После этого беги
docker image ls
убедитесь, что в вашем реестре докеров задано окружение Кубернетеса. (Вы должны увидеть некоторые изображения по умолчанию в домене 'k8s.gcr.io'.)Вам может потребоваться сделать это в каждом терминале, если открыто несколько терминалов.
Восстановите ваш образ докера:
бежать
docker-compose -f /path/to/your/docker-compose.yml build
Ваше изображение должно появиться в локальном реестре K8s.
Запустите ваше изображение с помощью '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>
Он может создавать соответствующие развертывания, службы, входящие данные и т. Д., Которые потребуются для развертывания вашего приложения.