Поиск по сайту:

Как развернуть стеки Docker Compose в Kubernetes с помощью Kompose


Docker Compose позволяет вам определять стеки контейнеров, которыми вы можете управлять коллективно. Это относительно простой инструмент, изначально предназначенный для локальных установок Docker.

Kubernetes — это оркестратор контейнеров, который поставляется с собственным набором инструментов и файлами манифеста. Обычно он считается более сложным, чем обычный рабочий процесс Docker, но его возможности облегчают масштабируемое развертывание контейнеров в рабочей среде.

Kompose — это инструмент, который позволяет вам брать файлы Docker Compose и развертывать их в кластерах Kubernetes. Он разработан в рамках проекта Kubernetes.

Текущие версии Kompose ограничены преобразованием файлов YAML. Вы должны применить преобразованные манифесты ресурсов Kubernetes к своему кластеру с помощью такого инструмента, как Kubectl. В более ранних версиях Kompose была встроенная команда up, которую можно было развернуть прямо в вашем кластере без промежуточного шага преобразования. Это было удалено из-за растущей технической сложности.

Начиная

Kompose доступен для Windows, macOS и большинства популярных дистрибутивов Linux. Готовые бинарные файлы доступны в репозитории GitHub. Загрузите последнюю версию, установите бит разрешения на выполнение и переместите двоичный файл в каталог, который находится на вашем пути. Также поддерживаются несколько менеджеров пакетов.

curl -L https://github.com/kubernetes/kompose/releases/download/v1.23.0/kompose-linux-amd64 -o kompose
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

Попробуйте запустить kompose в своем терминале. Вы увидите основную информацию о доступных командах. Запуск kompose version проверяет версию Kompose, которую вы используете.

Теперь убедитесь, что у вас есть файл docker-compose.yml. Вот простой пример настройки веб-сервера Apache с базой данных MySQL:

version: "3"

services:
  apache:
    image: httpd:latest
    ports:
      - 80:80
  mysql:
    image: mysql:latest
    expose:
      - 3306
    volumes:
      - mysql:/var/lib/mysql

volumes:
  mysql:

Вам также нужен кластер Kubernetes для развертывания. Либо создайте новый кластер с поставщиком общедоступного облака, либо разверните свой собственный, используя такой проект, как MicroK8s.

Преобразование вашего стека

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

kompose convert -f docker-compose.yml -f docker-compose-dev.yml

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

Вот результат преобразования docker-compose.yml, показанный выше:

Развертывание и служба Kubernetes были созданы для каждой из служб Compose. Эти ресурсы определяют создаваемые поды, а также их правила сетевой маршрутизации.

Для контейнера MySQL также существует PersistentVolumeClaim. Это том, настроенный в docker-compose.yml, обеспечивающий постоянное хранилище для базы данных MySQL, которое дольше любого отдельного модуля.

Если вы просмотрите файлы YAML, вы увидите, что это обычные Kubectl-совместимые манифесты Kubernetes. Вот преобразованный файл apache-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.23.0 (bc7d9f4f)
  creationTimestamp: null
  labels:
    io.kompose.service: apache
  name: apache
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: apache
  strategy: {}
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.23.0 (bc7d9f4f)
      creationTimestamp: null
      labels:
        io.kompose.service: apache
    spec:
      containers:
        - image: httpd:latest
          name: apache
          ports:
            - containerPort: 80
          resources: {}
      restartPolicy: Always
status: {}

spec развертывания очень похож на определение контейнера Apache в исходном docker-compose.yml. В случае с этим простым сервисом его легко сопоставить с объектом Kubernetes. Остальная часть файла в основном содержит метаданные настроек, в том числе специфичные для Kompose аннотации, которые позволяют идентифицировать ресурсы, созданные с помощью этого инструмента.

Развертывание в вашем кластере

Разверните набор файлов манифеста обычным способом с помощью kubectl apply. Рекомендуется хранить их в отдельном каталоге вашего docker-compose.yml, чтобы kubectl также не пытался выбрать этот несовместимый файл.

kubectl apply .

Ресурсы будут предоставлены внутри вашего кластера. Запуск служб может занять несколько минут. Проверьте свое развертывание с помощью kubectl get deploys. Когда в столбце AVAILABLE отображается 1, ваша рабочая нагрузка должна быть доступна.

Теперь вы можете обновить свое развертывание, отредактировав сгенерированные манифесты и повторно запустив kubectl apply. Если вы хотите масштабировать Apache до трех реплик, вы должны открыть apache-deployment.yaml, изменить поле replicas на 3 и применить модифицированный манифест.

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

Ограничения

Kompose обычно хорошо работает с файлами Docker Compose, используя наиболее распространенные функции и рекомендации. Он может создавать контейнеры, открывать порты и предоставлять постоянное хранилище через тома.

Однако не каждое преобразование будет идеальным. Некоторые возможности Compose не имеют прямого эквивалента в мире Kubernetes, в то время как другие будут отображаться таким образом, который может не соответствовать вашим потребностям. Использование развертываний и служб в этом примере — один из таких случаев: если вы выполняли развертывание непосредственно в Kubernetes, вы могли бы использовать правило Ingress для предоставления своей службы, но оно не создается Kompose. Самоуверенные решения разрешаются путем принятия самого простого варианта.

Вы также столкнетесь с проблемами, связанными с объемами. Файлы Docker Compose могут связывать файлы и папки монтирования с хоста в контейнеры. В Kubernetes это невозможно, поэтому вам понадобится альтернативное решение. Кроме того, хотя Kompose может создавать ресурсы для PersistentVolumeClaims, он не создает фактические PersistentVolumes. Вам понадобится уже доступный том в вашем кластере, прежде чем вы попытаетесь развернуть свои манифесты.

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

Заключение

Kompose упрощает переход с Docker Compose на кластер Kubernetes. Он автоматизирует шаги, которые ранее были утомительными, отнимающими много времени и подверженными ошибкам. Это хорошее вспомогательное средство, хотя и не тот инструмент, которым следует пользоваться без определенного контроля.

Преобразования Kompose не универсальны, поэтому они не подходят для всех сред. Всегда стоит проверять сгенерированные манифесты, прежде чем применять их к кластеру. В некоторых случаях лучше всего использовать Kompose в качестве эталона — преобразовать свой docker-compose.yml, посмотреть, что получится в результате, а затем использовать его в качестве отправной точки для создания манифестов, полностью совместимых с ваше приложение и кластер.




Все права защищены. © Linux-Console.net • 2019-2024