Деплой JavaScript на Kubernetes: базовое руководство для начинающих

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: Зачем деплоить JavaScript на Kubernetes?

Современная веб-разработка немыслима без контейнеризации. Если вы пишете на JavaScript (Node.js) и хотите, чтобы ваше приложение работало стабильно, масштабировалось автоматически и было отказоустойчивым — Kubernetes (K8s) станет вашим лучшим другом.

Kubernetes — это платформа оркестрации контейнеров. Она управляет развертыванием, масштабированием и работой ваших приложений. В этом руководстве мы разберем базовый деплой простого Node.js приложения на Kubernetes. Вы узнаете, как упаковать код в Docker-образ, создать Pod, Service и Deployment.

Статья рассчитана на начинающих. Предполагается, что у вас уже установлены Docker и Minikube (или доступ к кластеру K8s).

Шаг 1: Подготовка Node.js приложения и Docker-образа

Для начала создадим простое веб-приложение на Express. Оно будет отвечать на HTTP-запросы.

1.1. Код приложения (app.js)

Создайте файл app.js:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('Привет из Kubernetes!');
});

app.listen(PORT, () => {
  console.log(`Сервер запущен на порту ${PORT}`);
});

1.2. Файл package.json

Создайте package.json:

{
  "name": "k8s-node-app",
  "version": "1.0.0",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}

1.3. Dockerfile

Теперь создадим Dockerfile для сборки образа:

FROM node:18-alpine

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000

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

1.4. Сборка и загрузка образа

Выполните команды:

docker build -t my-node-app:v1 .

Если вы используете Minikube, соберите образ внутри его окружения:

minikube image build -t my-node-app:v1 .

Или загрузите образ в Docker Hub/любой registry и укажите его в манифесте.

Шаг 2: Основные объекты Kubernetes (Pod, Deployment, Service)

Kubernetes работает с объектами. Для деплоя нам понадобятся три основных:

  • Pod — минимальная единица, один или несколько контейнеров.
  • Deployment — управляет Pod'ами, обеспечивает масштабирование и обновления.
  • Service — стабильная точка доступа к Pod'ам (обычно через ClusterIP или NodePort).

2.1. Создание Deployment

Создайте файл deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: node-app
  template:
    metadata:
      labels:
        app: node-app
    spec:
      containers:
      - name: node-app
        image: my-node-app:v1
        ports:
        - containerPort: 3000
        env:
        - name: PORT
          value: "3000"

Объяснение:

  • replicas: 3 — запустим 3 копии приложения для отказоустойчивости.
  • selector и labels — связывают Deployment с Pod'ами.
  • image — имя вашего Docker-образа.

2.2. Создание Service

Создайте файл service.yaml для доступа к приложению:

apiVersion: v1
kind: Service
metadata:
  name: node-app-service
spec:
  selector:
    app: node-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  type: NodePort

Что здесь происходит:

  • Service перенаправляет трафик с порта 80 на порт 3000 контейнера.
  • type: NodePort открывает доступ к приложению через IP узла кластера (для Minikube — через minikube service).

Шаг 3: Деплой и проверка приложения

3.1. Применение манифестов

Убедитесь, что ваш кластер запущен (например, minikube start). Выполните:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

3.2. Проверка статуса

Посмотрите, что создалось:

kubectl get pods
kubectl get deployments
kubectl get services

Вы должны увидеть три Pod'а в статусе Running.

3.3. Доступ к приложению

Если вы используете Minikube, выполните:

minikube service node-app-service

Откроется браузер с вашим приложением. Если вы работаете с облачным кластером, используйте внешний IP или порт NodePort.

Шаг 4: Масштабирование и обновление

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

Kubernetes позволяет легко менять количество реплик:

kubectl scale deployment node-app-deployment --replicas=5
kubectl get pods

Теперь у вас 5 копий приложения.

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

Измените код, соберите новую версию образа (v2) и выполните:

kubectl set image deployment/node-app-deployment node-app=my-node-app:v2

Kubernetes выполнит rolling update — постепенно заменит старые Pod'ы на новые.

Заключение

Мы прошли базовый путь: от Node.js приложения до его деплоя в Kubernetes. Вы узнали,

Блоги

Рекомендаций по книгам