Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Как развернуть приложение на Kubernetes

2399
7 минут чтения
Средний рейтинг статьи: 5

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

Пошаговое развертывание приложений на Kubernetes

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

Шаг 1. Подготовка

Допустим, у нас уже есть какая-то написанная программа: пусть она будет на Python и имеет название program.py. Разумеется, у вас уже должен быть сервер с установленным Linux. Также для работы нам, помимо Kube, понадобится Docker, с которым вы, вероятно, уже умеете работать. Тем не менее не будет лишним напомнить, как собирать контейнеры в Docker. С этого и начнем.

Шаг 2. Сборка образа контейнера

Сборку образа контейнера в Docker можно выполнять по-разному. Например, при помощи утилит, а одной из самых удобных является buildah. После ее установки создайте директорию для сборки образа и пропишите зависимости в файле requirements.txt. Вот пример такого файла, вам же следует заменить зависимости на свои:

    

Далее откроем и изучим содержимое Dockerfile, конфигурационного файла Docker, в котором содержатся инструкции для сборки образа контейнера. Там обратите внимание на следующие строчки:

  • FROM — указывает на интерпретатор. Например: FROM python:3.8.
  • RUN mkdir — нужно для создания каталога внутри образа. Давайте выберем такой: RUN mkdir /my_project.
  • WORKDIR — используется для однократного указания пути: WORKDIR /my_project.
  • ADD . — эта инструкция необходима для создания контейнера под Kube, без нее запуск в Kubernetes будет выдавать ошибку, так как оркестратор не сможет найти путь самостоятельно. Пропишем там наш путь: ADD . /my_project/.
  • RUN pip install -r — служит для запуска pip и указания на обработку файла. В нашем случае понадобится запустить файл зависимостей, что делается следующим образом: RUN pip install -r requirements.txt.
  • EXPOSE — открывает порт. Например, EXPOSE 8000.
  • CMD — инструкция запуска. Прописываем примерно следующее: CMD ["python", "/my_project/program.py"].

В результате появится каталог my_project с program.py внутри. Также там будет файл зависимостей и Dockerfile. Теперь собираем образ через buildah:

    

В результате мы запустим процесс сборки и подтянем зависимости. Сгенерированный хеш скопируйте в буфер обмена и подставьте в следующую инструкцию:

    

Теперь посмотрим на созданный образ контейнера через инструкцию docker image ls, а далее проверим его работоспособность таким образом:

    

Полученный ответ Hello, выделенный желтым, будет говорить о том, что всё в порядке, образ собран и готов к работе. Осталось отправить контейнер в репозиторий для работы в кластере, что делается примерно так же, как и в случае с Git-репозиториями, поэтому трудностей это вызвать не должно.

Шаг 3. Развертывание приложения 

Для начала понадобится создать файл deployment.yaml. Этот же файл будет затем использоваться для поддержки нужного числа реплик. 

Рассмотрим наиболее важные для нас строки:

  • kind: — определяет тип объекта.
  • name: — имя, выбранное для отображения в кластере (лучше оставить таким же, как имя файла программы).
  • matchLabels: — метки.
  • app: — идентификатор.
  • replicas: — количество экземпляров, которое будет создано.
  • containers: — в этой части указывается, из какого удаленного репозитория мы будем брать контейнер, а также сколько ресурсов будем использовать.
  • resources: — потребуется указать минимальную конфигурацию в limits, чтобы приложение смогло запуститься, а в requests резервируемые cpu и memory.

Посмотрим, как можно организовать deployment.yaml для нашего случая (просто скопируйте и замените параметры на свои):

    

Когда вы указали все нужные параметры, не забудьте сохранить файл. Наконец, используя kubectl, мы можем развернуть наш контейнер и сразу же второй инструкцией проверить, всё ли в порядке, выведя его состояние:

    
    

Решение проблем

При вызове отдельных реплик приложения по IP может возникнуть проблема с доступностью подов, поскольку они мигрируют между узлами кластера, а значит, их IP будут меняться. Решить эту проблему можно при помощи service.yaml, который составляется похожим образом, но с некоторыми отличиями в параметрах. Взгляните:

    

Здесь port — это порт для приема трафика. Наконец, в строчке type мы указали наш кластер для обеспечения внутреннего взаимодействия по сети. Осталось запустить Service, и проблема недоступности подов будет решена:

    

От теории к практике

Допустим, у нас есть какое-то приложение, написанное на свежей версии Python — назовем его, скажем, newgenAI. Нам нужно развернуть это приложение в уже созданном кластере.

Шаг 1. Готовим образ контейнера при помощи Dockerfile

В Docker-файле делаем следующее:

  • Указываем корректный интерпретатор: FROM python:3.11
  • Создаем каталог: RUN mkdir /newgenAI
  • Указываем путь: WORKDIR /newgenAI
  • Добавляем путь для Kube: ADD . /newgenAI
  • Запускаем зависимости: RUN pip install -r requirements.txt
  • Открываем порт: EXPOSE 9000
  • И запускаем само приложение: CMD ["python", "/newgenAI/newgenAI.py"]

Шаг 2. Собираем образ и проверяем его работоспособность

Итак, у нас есть каталог newgenAI с newgenAI.py, файлом зависимостей и Dockerfile внутри. Собираем образ:

    

В ответном сообщении buildah выдаст хеш, который нужно вставить в эту инструкцию:

    

Проверяем работоспособность образа:

    

Получив ответ Hello, отправляем готовый образ контейнера в репозиторий командой docker push repo/ (вместо repo/ подставьте имя созданной вами директории).

Шаг 3. Развертываем образ в Kubernetes

Сначала создаем и настраиваем файл deployment.yaml по образцу выше, обращая внимание на выделенные ресурсы. Так как мы работаем над проектом генеративного ИИ, вряд ли будет достаточно 1 CPU и 840 МБ оперативной памяти, так что выставите актуальные значения и создайте запас.

Теперь осталось развернуть созданный образ при помощи kubectl:

    

И в завершение проверим, работает ли он:

    

В ответ мы должны получить статус Running.

Что ж, теперь вы знаете, как развернуть приложение на Kubernetes, и готовы к решению более сложных задач с помощью Kube. А мы вам в этом поможем!

2399
7 минут чтения
Средний рейтинг статьи: 5

Читайте также

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server