it-swarm.com.ru

Можно ли использовать Kubernetes как Docker Compose?

Я часами копался в документации по Kubernetes. Я понимаю основной дизайн, а также понятие услуг, контроллеров, модулей и т.д.

Что я не понимаю, однако, это процесс, в котором я могу декларативно настроить кластер. То есть способ написать для меня конфигурационный файл (или его набор), чтобы определить структуру и параметры масштабирования развертывания в облаке. Я хочу иметь возможность объявить, какие контейнеры мне нужны, в каких модулях, как они будут взаимодействовать, как они будут масштабироваться и т.д. Без выполнения множества команд cli.

Есть ли docker-compose функциональность для Kubernetes?

Я хочу, чтобы мое приложение определялось в git, чтобы оно контролировалось версией, не полагаясь на ручное взаимодействие с клиентом.

Можно ли это сделать в сжатой форме? Есть ли ссылка, которая более понятна, чем официальная документация?

56
Don Scott

Docker официально объявил о функциональности docker-compose для кластера kubernetes. Таким образом, теперь вы можете составлять ресурсы kubernetes в файле и применять их, используя этот единственный файл.

Сначала нам нужно установить контроллер Compose on Kubernetes в ваш кластер Kubernetes. Этот контроллер использует стандартные точки расширения Kubernetes для представления Stack в API Kubernetes. Посмотрите полную документацию для установки контроллера докера:

https://github.com/docker/compose-on-kubernetes

Давайте напишем простой составной файл yaml:

version: "3.7"
services:
  web:
    image: dockerdemos/lab-web
    ports:
     - "33000:80"
  words:
    image: dockerdemos/lab-words
    deploy:
      replicas: 3
      endpoint_mode: dnsrr
  db:
    image: dockerdemos/lab-db

Затем мы будем использовать докер-клиент для развертывания этого в кластере Kubernetes, на котором работает контроллер:

$ docker stack deploy --orchestrator=kubernetes -c docker-compose.yml words
Waiting for the stack to be stable and running...
db: Ready       [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
web: Ready      [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
words: Ready    [pod status: 1/3 ready, 2/3 pending, 0/3 failed]
Stack words is stable and running

Затем мы можем взаимодействовать с этими объектами через API Kubernetes. Здесь вы можете видеть, что мы автоматически создали объекты нижнего уровня, такие как Services, Pod, Deployments и ReplicaSets:

$ kubectl get deployments
NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/db      1         1         1            1           57s
deployment.apps/web     1         1         1            1           57s
deployment.apps/words   3         3         3            3           57s    

Важно отметить, что это не разовое обращение. Сервер Compose on Kubernetes API представляет ресурс Stack для API Kubernetes. Таким образом, мы можем запрашивать и управлять всем на том же уровне абстракции, что и при создании приложения. Это делает углубление в детали выше полезными для понимания того, как все работает, или отладки проблем, но не требуется в большинстве случаев:

$ kubectl get stack
NAME      STATUS      PUBLISHED PORTS   PODS     AGE      
words     Running     33000             5/5      4m
9
Prafull Ladha

Если вы все еще ищете, может быть, этот инструмент может помочь: https://github.com/kelseyhightower/compose2kube

Вы можете создать составной файл:

# sample compose file with 3 services
web:
  image: nginx
  ports:
    - "80"
    - "443"
database:
  image: postgres
  ports:
    - "5432"
cache:
  image: memcached
  ports:
    - "11211"

Затем используйте инструмент, чтобы преобразовать его в объекты kubernetes:

compose2kube -compose-file docker-compose.yml -output-dir output

Который создаст эти файлы:

output/cache-rc.yaml
output/database-rc.yaml
output/web-rc.yaml

Затем вы можете использовать kubectl, чтобы применить их к kubernetes.

32
Ahmad Aabed

Если у вас есть файлы Docker Composer, вы можете взглянуть на проект Kompose .

kompose - это инструмент, помогающий пользователям, знакомым с docker-compose, перейти в Kubernetes. kompose берет файл Docker Compose и переводит его в ресурсы Kubernetes.

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

Чтобы запустить docker-compose.yaml файл или свой собственный, запустите:

kompose up

Чтобы преобразовать docker-compose.yaml в развертывания и службы Kubernetes с помощью одной простой команды:

$ kompose convert -f docker-compose.yaml
INFO Kubernetes file "frontend-service.yaml" created         
INFO Kubernetes file "redis-master-service.yaml" created     
INFO Kubernetes file "redis-slave-service.yaml" created      
INFO Kubernetes file "frontend-deployment.yaml" created      
INFO Kubernetes file "redis-master-deployment.yaml" created  
INFO Kubernetes file "redis-slave-deployment.yaml" created

Для получения дополнительной информации, проверьте: http://kompose.io/

15
JoaoCC

Kubernetes, безусловно, имеет свой собственный yaml (как показано в " Развертывание приложений ")

Но как " Сравнение инструментов кластеризации Docker: Kubernetes vs Docker Swarm ", он не был написан (просто) для Docker и имеет свою собственную систему.

Вы можете использовать docker-compose для запуска Kubernetes, как показано в " vyshane/kid ": это маскирует некоторые из kubectl команд cli в скриптах (которые могут быть версионными).

7
VonC