Непопулярные идеи, которые превратились в миллиардные бизнесы : Стартап-библиотека YC | Y Combinator
Непопулярные идеи, которые превратились в миллиардные бизнесы : Стартап-библиотека YC | Y Combinator
Полный перевод, конспект и структурированный разбор материала
Перевод
В этой статье мы рассмотрим, как развернуть приложение Node.js в Kubernetes с использованием Docker. Мы пройдем весь путь от создания простого сервера на Node.js до его контейнеризации и запуска в локальном кластере Kubernetes с помощью minikube.
Шаг 1: Создание простого приложения Node.js
Для начала создадим простое веб-приложение. Создайте новую директорию для вашего проекта и инициализируйте его:
bashmkdir node-k8s-demo cd node-k8s-demo npm init -y
Установите Express, популярный веб-фреймворк для Node.js:
bashnpm install express
Создайте файл server.js со следующим содержимым:
javascriptconst express = require('express'); const app = express(); const PORT = process.env.PORT || 3000; app.get('/', (req, res) => { res.send('Привет из Node.js в Kubernetes!'); }); app.listen(PORT, () => { console.log(`Сервер запущен на порту ${PORT}`); });
Шаг 2: Контейнеризация приложения с помощью Docker
Чтобы запустить наше приложение в Kubernetes, нам сначала нужно упаковать его в Docker-образ. Создайте Dockerfile в корневой директории вашего проекта:
dockerfile# Используем официальный образ Node.js в качестве базового FROM node:18-alpine # Устанавливаем рабочую директорию в контейнере WORKDIR /usr/src/app # Копируем package.json и package-lock.json COPY package*.json ./ # Устанавливаем зависимости RUN npm install --only=production # Копируем исходный код приложения COPY . . # Открываем порт, на котором работает приложение EXPOSE 3000 # Команда для запуска приложения CMD [ "node", "server.js" ]
Также создайте файл .dockerignore, чтобы избежать копирования ненужных файлов:
textnode_modules npm-debug.log
Шаг 3: Сборка Docker-образа в Minikube
Поскольку мы будем использовать локальный кластер Kubernetes через minikube, мы можем собрать Docker-образ напрямую внутри окружения Minikube. Это избавит нас от необходимости загружать образ в Docker Hub.
Запустите Minikube:
bashminikube start
Настройте ваш терминал на использование Docker-демона внутри Minikube:
basheval $(minikube docker-env)
Теперь соберите Docker-образ:
bashdocker build -t node-k8s-demo:1.0 .
Шаг 4: Создание конфигурации Kubernetes
Для запуска нашего контейнера в Kubernetes нам понадобятся два ресурса: Deployment (для управления подами с нашим приложением) и Service (для доступа к приложению извне).
Создайте файл deployment.yaml:
yamlapiVersion: apps/v1 kind: Deployment metadata: name: node-app-deployment labels: app: node-app spec: replicas: 2 selector: matchLabels: app: node-app template: metadata: labels: app: node-app spec: containers: - name: node-app image: node-k8s-demo:1.0 imagePullPolicy: Never ports: - containerPort: 3000 --- apiVersion: v1 kind: Service metadata: name: node-app-service spec: type: NodePort selector: app: node-app ports: - port: 3000 targetPort: 3000 nodePort: 30100
Примечание: Параметр imagePullPolicy: Never указывает Kubernetes использовать локальный образ, собранный внутри Minikube, вместо попытки скачать его из внешнего реестра.
Шаг 5: Развертывание в Kubernetes
Примените конфигурационные файлы к вашему кластеру Kubernetes:
bashkubectl apply -f deployment.yaml
Проверьте статус подов и сервиса:
bashkubectl get pods kubectl get services
Шаг 6: Доступ к приложению
Поскольку мы использовали тип сервиса NodePort, мы можем получить URL-адрес для доступа к нашему приложению через Minikube:
bashminikube service node-app-service --url
Скопируйте полученный URL в браузер, и вы увидите сообщение: "Привет из Node.js в Kubernetes!".