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

    Команда Simple-Server
    03.06.2026
    7 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

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

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

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

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

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

    py==1.8.1 pip==19.0.3 Mako==1.1.1 MarkupSafe==1.1.1 six==1.14.0 attrs =19.3.0 pytest=5.3.5 pluggy==0.13.1 setuptools==40.8.0 parse==1.14.0 glob2==0.7

    Далее откроем и изучим содержимое 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:

    buildah bud -f ./Dockerfile

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

    buildah push (здесь указываем хеш, но без скобок) docker-daemon:program:v0

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

    docker run --rm -d -v `pwd`:/my_project -p 8000:8000 program:v0

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

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

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

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

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

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

    kind: Deployment metadata: name: program labels: app: program spec: replicas: 3 selector: matchLabels: app: program template: metadata: labels: app: program spec: containers: - name: program image: <your login>/<your repository>:program ports: - containerPort: 8000 protocol: TCP name: http resources: limits: memory: 840Mi cpu: 1 requests: memory: 420Mi cpu: 500m

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

    kubectl create -f deployment.yaml

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

    kind: Service metadata: labels: app: program name: program spec: ports: - port: 8080 protocol: TCP targetPort: 8000 selector: app: program type: ClusterIP

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

    kubectl create -f service.yaml

    Допустим, у нас есть какое-то приложение, написанное на свежей версии 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 bud -f ./Dockerfile

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

    buildah push (здесь укажите хеш, но без скобок) docker-daemon:newgenAI:v0

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

    docker run --rm -d -v `pwd`:/newgenAI -p 9000:9000 newgenAI:v0

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

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

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

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

    kubectl create -f deployment.yaml

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

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

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


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны