Как развернуть Docker-контейнеры в Kubernetes: подробная инструкция

Как развернуть Docker-контейнеры в Kubernetes: подробная инструкция

  1. Главная
  2. Блог
  3. Как развернуть Docker-контейнеры в Kubernetes: подробная инструкция

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

Где используется

В программировании, например. Также часто встречается в рамках DevOps-практик и администрирования.

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

Архитектура Kubernetes-кластера

Кластер Kubernetes включает два типа узлов:

  1. Control Plane Nodes (узлы плоскости управления) — ранее известные как Master-узлы
  2. Worker Nodes (рабочие узлы)

Control Plane координируют работу системы. Они направляют команды Worker Nodes для запуска или остановки задач, а также мониторят статус самого кластера. Технически Control Plane узлы тоже способны исполнять пользовательские задачи, но с позиции безопасности — это не рекомендуемая практика: если вредоносный код попадет в рабочую нагрузку на таком узле, последствия будут куда серьезнее, чем при его запуске на Worker Node.

 Интересный факт: Истоки Kubernetes ведут к Google, где разработчики вдохновлялись внутренней системой Borg, отточенной годами эксплуатации в гигантских масштабах. Само название "Kubernetes" происходит от греческого слова κυβερνήτης (kybernḗtēs), означающего "кормчий" или "рулевой", что является отсылкой к проекту Borg из вселенной Star Trek.

Контейнеры: что это такое?

Контейнеризация — это упаковывание приложений в изолированные и компактные среды, легко переносимые между разными системами.

От виртуализации контейнеризация отличается фундаментально:

  • Виртуальные машины эмулируют компьютер с собственной операционной системой и ядром, в то время как контейнеры используют ядро хост-системы и изолируют только процессы и ресурсы.
  • Виртуальные машины требуют гипервизор и значительно больше ресурсов.
  • Виртуальные машины являются более универсальным решением, поскольку позволяют запускать разнородные операционные системы с различными ядрами.

Контейнеры более легкие, быстрее запускаются и настраиваются под конкретные задачи.

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

  • seccomp-профили
  • AppArmor/SELinux
  • Pod Security Standards
  • Network Policies
  • и другие

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

Преимущества использования Kubernetes

Kubernetes превосходен для управления контейнерами, и вот почему:

  1. При создании контейнеров на этапе сборки приложение абстрагируется от физической инфраструктуры. Среда разработки и тестирования остается единой — будь то сервер или локальная машина программиста.
  2. Контейнеры легко мигрируют между разными ОС (Ubuntu, RHEL, CoreOS) и облачными платформами (Google Kubernetes Engine, Amazon EKS, Azure AKS).
  3. Kubernetes использует декларативный подход, позволяя задать целевое состояние, автоматически приводя текущую конфигурацию к требуемой. Система самостоятельно запускает новые экземпляры, удаляет устаревшие и оптимизирует распределение ресурсов.
  4. Kubernetes позволяет точно указать требования к процессору и памяти для каждого контейнера, чтобы эффективно использовать ресурсы кластера.
  5. Встроенные механизмы самовосстановления автоматически перезапускают упавшие контейнеры и перемещают рабочие нагрузки при отказе узлов.

Подготовка Docker-образа

Перед созданием Docker-образов необходимо установить Docker на рабочую машину. Метод установки варьируется в зависимости от ОС; подробные инструкции доступны на официальном сайте: https://docs.docker.com/get-docker/

И прежде чем двигаться дальше, давайте разберемся с базовыми концепциями. Они пригодятся позже.

Здесь у нас есть два центральных элемента:

  1. Images (образы) — неизменяемые шаблоны с кодом, зависимостями и настройками приложения.
  2. Containers (контейнеры) — runtime-сущности на основе образа, запущенные экземпляры приложений, которые разворачиваются посредством Docker.

Где разместить Docker-контейнеры для тестов и продакшена

После сборки и публикации образа в реестр, следующим шагом станет выбор надёжной инфраструктуры для запуска контейнеров. Здесь важно учитывать производительность, стабильность и возможность гибкой настройки ресурсов.

Отличным решением для размещения контейнеризованных приложений являются VPS-серверы от PSB.Hosting. Вы получаете:

Такой вариант идеально подходит как для запуска небольших кластеров Kubernetes, так и для продвинутой среды CI/CD, особенно если вы хотите держать всё под контролем без избыточной зависимости от облачных провайдеров.

Создание Dockerfile для приложения

Dockerfile — это текстовый файл с инструкциями, необходимыми для сборки Docker-образа. Вот пример простого Dockerfile для Node.js приложения:

FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000
CMD ["node", "app.js"]

Этот Dockerfile:

  1. Использует официальный Node.js образ с Alpine Linux
  2. Устанавливает рабочую директорию /app
  3. Копирует файлы package.json и устанавливает зависимости
  4. Копирует остальные файлы приложения
  5. Указывает, что приложение использует порт 3000
  6. Запускает приложение командой node app.js

Сборка и публикация Docker-образа

После создания Dockerfile нужно собрать образ и опубликовать его в реестре:

# Сборка образа
docker build -t myapp:1.0 .

# Тегирование для Docker Hub или другого реестра
docker tag myapp:1.0 username/myapp:1.0

# Публикация в реестре
docker push username/myapp:1.0

Основные объекты Kubernetes

Перед развертыванием приложения в Kubernetes важно понять основные объекты:

  1. Pod — наименьшая единица в Kubernetes, содержит один или несколько контейнеров
  2. Deployment — управляет набором идентичных подов, обеспечивает обновления и масштабирование
  3. Service — обеспечивает стабильный доступ к подам через единый IP-адрес и DNS-имя
  4. ConfigMap и Secret — предоставляют конфигурационные данные подам
  5. Ingress — управляет внешним доступом к сервисам в кластере

Развертывание приложения в Kubernetes

1. Создайте Deployment

Файл deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: username/myapp:1.0
        ports:
        - containerPort: 3000
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
          limits:
            memory: "256Mi"
            cpu: "500m"

2. Создайте Service

Файл service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 3000
  type: ClusterIP

3. Опционально: создайте Ingress для внешнего доступа

Файл ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp
            port:
              number: 80

4. Примените конфигурацию к кластеру

# Убедитесь, что kubectl настроен на ваш кластер
kubectl config current-context

# Создайте namespace (не обязательно)
kubectl create namespace myapp

# Примените конфигурацию
kubectl apply -f deployment.yaml -n myapp
kubectl apply -f service.yaml -n myapp
kubectl apply -f ingress.yaml -n myapp

# Проверьте статус развертывания
kubectl get pods -n myapp
kubectl get services -n myapp
kubectl get ingress -n myapp

Масштабирование и обновление приложения

Масштабирование

# Увеличение количества реплик
kubectl scale deployment myapp -n myapp --replicas=5

Обновление образа

# Обновление образа в Deployment
kubectl set image deployment/myapp myapp=username/myapp:2.0 -n myapp

# Проверка статуса обновления
kubectl rollout status deployment/myapp -n myapp

Откат обновления

# Если обновление оказалось неудачным
kubectl rollout undo deployment/myapp -n myapp

Мониторинг и отладка

Просмотр логов

# Получение названия пода
kubectl get pods -n myapp

# Просмотр логов
kubectl logs pod/myapp-abc123 -n myapp

Доступ к контейнеру

# Выполнение команды в контейнере
kubectl exec -it pod/myapp-abc123 -n myapp -- /bin/bash

Мониторинг ресурсов

# Просмотр потребления ресурсов подами
kubectl top pods -n myapp

Главное

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

Для более глубокого изучения Kubernetes рекомендую обратиться к официальной документации: https://kubernetes.io/ru/docs/

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

Для чего нужны резидентские прокси в арбитраже трафика?

Для чего нужны резидентские прокси в арбитраже трафика?

Резидентские прокси стали важным инструментом для специалистов по арбитражу трафика. Они помогают работать с рекламными платформами, анализировать офферы, тестировать рекламные кампании и управлять не

MobileProxy.Space в 2026: полный обзор мобильных, резидентных и серверных прокси

MobileProxy.Space в 2026: полный обзор мобильных, резидентных и серверных прокси

Подробный обзор сервиса MobileProxy.Space в 2026 году: мобильные, резидентные и серверные прокси, тарифы, настройка, реальные кейсы и советы по выбору для бизнеса и специалистов. Давайте че

Лучшие сервисы распознавания captcha для VPS и серверной автоматизации

Лучшие сервисы распознавания captcha для VPS и серверной автоматизации

Сервис распознавания captcha стоит оценивать не только по скорости ответа. Гораздо важнее, насколько часто он помогает успешно завершить весь сценарий автоматизации. Быстрый ответ бесполезен, если са

Как запустить Google Ads в 2026 году без банов: полный гайд от сервиса клоакинга Adspect.ai

Как запустить Google Ads в 2026 году без банов: полный гайд от сервиса клоакинга Adspect.ai

Google Ads остаётся одной из самых прибыльных, но и самых сложных площадок для арбитража трафика в 2026 году. Модерация стала жёстче, системы обнаружения клоакинга — умнее, а обычные IP-базы и п

Реальные 4G/5G мобильные + резидентные прокси

Реальные 4G/5G мобильные + резидентные прокси

Proxies.sx — сервис мобильных и резидентских прокси, который работает на настоящих 4G/5G IP-адресах операторов, а не на арендованных чужих сетях. Мы не перепродаём сторонние прокси: вся инфрастр

VPS и VDS: отличия, преимущества и недостатки

VPS и VDS: отличия, преимущества и недостатки

Когда дело касается хостинга для проектов, пользователи сталкиваются с проблемой выбора между VPS vs VDS. Каждый вариант предлагает ресурсы для размещения сайта. Подходит для приложений, баз данных и

Лучшие VPS для размещения собственного VPN: рейтинг провайдеров 2026

Лучшие VPS для размещения собственного VPN: рейтинг провайдеров 2026

Виртуальные частные сети (VPN) позволяют защитить данные от перехвата и обеспечить анонимность. Однако использование публичных VPN-сервисов не всегда надежно – ваши данные могут проходить через

Что такое IDOR: как работает одна из самых опасных уязвимостей доступа

Что такое IDOR: как работает одна из самых опасных уязвимостей доступа

Одной из главных проблем современных приложений и API остается IDOR уязвимость, из-за которой злоумышленники могут манипулировать идентификаторами и получать доступ к чужим данным. Такие атаки остаютс

PEAP vs EAP-TLS: какой способ аутентификации Wi-Fi выбрать для бизнеса

PEAP vs EAP-TLS: какой способ аутентификации Wi-Fi выбрать для бизнеса

Корпоративные сети чаще всего строятся на стандарте WPA2-Enterprise или WPA3-Enterprise с использованием протоколов семейства EAP. Компании обычно выбирают между двумя основными методами аутентификаци

Telegram