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

by itisgood
kompose (полученный из объединения имен Kubernetes и docker-compose) – это инструмент, помогающий пользователям, знакомым с docker-compose, перейти в Kubernetes.
Он берет файл Docker Compose и переводит его в ресурсы Kubernetes (развертывания, службы и т. д.).
Это руководство продемонстрирует, как переносить приложения Docker Compose в Kubernetes с помощью Kompose.

Особенности Kompose

Вы можете:

  • Упростить процесс разработки с помощью Docker Compose, а затем развернуть свои контейнеры в производственном кластере.
  • Конвертировать ваш docker-compose.yaml с помощью одной простой команды kompose convert
  • Поднять свой кластер с помощью kompose up
  • Затушить развертывания с помощью kompose down

Что нужно, прежде чем мы начнем

Прежде чем мы продолжим работу с руководством, мы предполагаем, что у вас есть кластер Kubernetes и инструмент командной строки kubectl, уже настроенный для взаимодействия с вашим кластером.

Если эти требования не выполняются, вы можете настроить простой кластер Kubernetes с одним узлом, используя minikube, следуя приведенному ниже руководству.

Если вы готовы продолжить, продолжим с установкой kompose.

☸️ Локальные Kubernetes для Linux — MiniKube или MicroK8s

Шаг 1: Установка Kompose на Linux, macOS

Загрузите последний бинарник Kompose.

Вы можете проверить старницу Github на версии выпуска.

--- Linux ---
curl -s https://api.github.com/repos/kubernetes/kompose/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
mv kompose-linux-amd64 kompose


--- macOS ---
curl -s https://api.github.com/repos/kubernetes/kompose/releases/latest | grep browser_download_url | grep darwin-amd64 | cut -d '"' -f 4 | wget -qi -
mv kompose-darwin-amd64 kompose
Сделайте двоичный файл исполняемым и переместите его в каталог /usr/local/bin.
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

Проверьте версию после установки:

Шаг 2. Создайте образец образа Dockerfile

Мы собираемся создать обратный прокси Nginx, который передает запросы к контейнеру apache

Создайте файл с именем Dockerfile и добавьте содержимое, показанное ниже:

cat > Dockerfile<<EOF
# Sample Dockerfile for Kompose
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 8081
EOF
А это файл конфигурации (nginx.conf), который мы копируем в образ
cat >nginx.conf<<EOF

    upstream apache-container {
        server 0.0.0.0:80;
    }

    server {
        listen 8081;

        location / {
            proxy_pass         http://apache-container;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }
EOF
Это простой обратный прокси-сервер, прослушивающий запросы через порт 8081, затем направляет трафик на вышестоящий сервер, прослушивающий через порт 80.

Шаг 3: Соберем образ контейнера

Откройте терминал в вашем проекте и введите следующую команду, чтобы собрать наш образ с помощью podman

$ podman build -t reverseproxy:v1 .
STEP 1: FROM nginx:alpine
Getting image source signatures
Copying blob cbdbe7a5bc2a done  
Copying blob c554c602ff32 done  
Copying config 89ec9da682 done  
Writing manifest to image destination
Storing signatures
STEP 2: COPY nginx.conf /etc/nginx/conf.d/default.conf
--> d86b4e89749
STEP 3: EXPOSE 8081
STEP 4: COMMIT reverseproxy:v1
--> b00d80e0056
b00d80e00560c205e0580d4b751b1a67da7e77e7fc73803b006ff10389bb4732


-- With Docker ---
$ docker build -t reverseproxy:v1 .

После того, как образ был собран, мы сможем увидеть его следующим образом

$ podman images

REPOSITORY                        TAG          IMAGE ID       CREATED             SIZE
localhost/reverseproxy                            v1        b00d80e00560   19 seconds ago   21.2 MB

Шаг 3: Переместим образ контейнера в реестр образов

Вы можете отправить образ в любой из общедоступных реестров или даже в тот, который вы создали / частный.

В этом примере используется реестр образов Docker Hub.

$ podman tag <local-image> docker.io/<username>/reverseproxy:v1
Пример:
$ podman tag localhost/reverseproxy:v1 docker.io/penchant/reverseproxy:v1
Авторизуйтесь в вашем реестре – у меня это docker.io
$ podman login docker.io
Username: <username> 
Password: <password>
Login Succeeded!
После входа запуште образ, например:
$ podman push docker.io/penchant/reverseproxy:v1
Getting image source signatures
Copying blob 113ce2720837 done  
Copying blob 3810cc0c140f done  
Copying blob 3e207b409db3 done  
Copying config b00d80e005 done  
Writing manifest to image destination
Storing signatures

Шаг 4: Создадим docker-compose.yaml

Это файл, который Docker Compose будет использовать для создания сервисов и запуска мультиконтейнерной среды для нашего примера проекта.

Обратите внимание, что образ, который мы используем, это тот, что мы только что создали и отправили в DockerHub.

$ vim docker-compose.yaml

version: "3"
services:
    reverseproxy:
        image: docker.io/penchant/reverseproxy:v1
        ports:
            - 8081:8081
        restart: always

    apache:
        depends_on:
            - reverseproxy
        image: httpd:alpine
        restart: always
Далее есть два варианта, которые мы можем использовать при запуске проекта через kompose.
Во-первых, мы можем преобразовать файл docker-compose.yaml в отдельные файлы yaml, такие как deployment, service и persistentvolumeclaim, затем использовать kubectl, чтобы применить их, или мы можем просто использовать одну команду kompose up, чтобы творить чудеса.
Так как я хотел бы изучить отдельные файлы, мы собираемся сначала преобразовать его  следующим образом:
$ kompose convert

INFO Kubernetes file "reverseproxy-service.yaml" created 
INFO Kubernetes file "apache-deployment.yaml" created 
INFO Kubernetes file "reverseproxy-deployment.yaml" created
Теперь у нас есть три файла yaml, созданные с именами, которые объясняют, что они делают.

Один – сервис, другой – развертывание.

Мы можем приступить к применению этих файлов, используя kubectl, как показано ниже

$ kubectl apply -f reverseproxy-service.yaml,apache-deployment.yaml,reverseproxy-deployment.yaml

service/reverseproxy created
deployment.apps/apache created
deployment.apps/reverseproxy created

Проверим сервис, поды и развертывания

$ kubectl get deployment,svc,pods

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/apache         1/1     1            1           113m
deployment.apps/reverseproxy   1/1     1            1           105m

NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE 
service/kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP    122m
service/reverseproxy   ClusterIP   10.97.210.141   <none>        8081/TCP   113m

NAME                                READY   STATUS    RESTARTS   AGE
pod/apache-7945cd6844-5hpf8         1/1     Running   0          113m
pod/reverseproxy-8646fb7c4f-j6742   1/1     Running   0          105m
Как вы можете видеть, даже до того, как соответствующие файлы yaml были настроены в соответствии с конкретными конфигурациями, они смогли запустить ресурсы kubernetes.
Вы можете изменить детали в файлах yaml, полученных после того, как kompose воздействует на файлы Docker-Compose в соответствии с вашими конкретными потребностями. Хорошо, что kompose делает большую часть тяжелой работы, и вы можете просто добавить то, что вам нужно.

Заключение

Kompose – это замечательный инструмент.

Испытайте это в своих проектах, чтобы увидеть всю мощь, которой вы можете воспользоваться.

You may also like

1 comment

alex 30.04.2020 - 14:04

Что за бредовый перевод (((

Reply

Добавить комментарий для alex Cancel Reply