Контейнеры трансформировали способ развертывания, масштабирования и управления приложениями, упаковывая код и зависимости в стандартизированный блок, который может работать однородно в любой среде. Когда используются в облачных средах, контейнеры предлагают:
- Переносимость в процессе разработки, тестирования и производства.
- Масштабируемость для быстрой адаптации к трафику и спросу.
- Эффективность с уменьшенными накладными расходами по сравнению с традиционными виртуальными машинами.
В этом руководстве мы рассмотрим полную настройку облачного контейнеризованного приложения, охватывая:
- Основы контейнеров и почему они идеальны для облака.
- Настройку приложения в Docker.
- Развертывание контейнера у поставщика облачных услуг (используя Google Cloud Platform в качестве примера).
- Масштабирование и управление вашим контейнером в облаке.
Основы контейнеров: Как контейнеры вписываются в облачные рабочие процессы
Контейнеры инкапсулируют все библиотеки и зависимости, необходимые для запуска приложения. В отличие от традиционных виртуальных машин, в которых каждая имеет ОС, контейнеры разделяют хост-ОС, что делает их легкими и эффективными.
Почему контейнеры для облака?
- Быстрые времена запуска означают более быстрое масштабирование для обработки переменного трафика.
- Согласованность между средами обеспечивает одинаковое поведение кода от ноутбуков разработчиков до производственной среды.
- Эффективность ресурсов позволяет развертывание с высокой плотностью на одной и той же инфраструктуре.
Ключевые компоненты контейнеризации в облаке
- Движок контейнеров: Управляет и запускает контейнеры (например, Docker, containerd).
- Оркестрация: Обеспечивает надежность приложений, масштабируемость и балансировку нагрузки (например, Kubernetes, ECS).
- Регистр: Хранит образы контейнеров для доступа из разных сред (например, Docker Hub, GCR).
Настройка Docker-приложения
Мы начнем с контейнеризации простого приложения на Node.js.
Шаг 1: Создание приложения
1. В папке проекта инициализируйте проект Node.js:
mkdir cloud-container-app && cd cloud-container-app
npm init -y
2. Создайте базовый файл сервера, app.js
:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, Cloud Container!');
});
app.listen(3000, () => {
console.log('App running on port 3000');
});
3. Добавьте Express в проект:
npm install express
Шаг 2: Создание Dockerfile
Этот Dockerfile определяет, как упаковать приложение в контейнер Docker.
# Use the Node.js image as a base
FROM node:14
# Set working directory
WORKDIR /app
# Copy files and install dependencies
COPY . .
RUN npm install
# Expose the app’s port
EXPOSE 3000
# Start the application
CMD ["node", "app.js"]
Шаг 3: Построение и тестирование Docker-образа локально
1. Постройте Docker-образ:
docker build -t cloud-container-app .
2. Запустите контейнер локально:
docker run -p 3000:3000 cloud-container-app
3. Посетите `http://localhost:3000` в вашем браузере. Вы должны увидеть “Привет, Облачный Контейнер!” на экране.
Развертывание контейнера на платформе Google Cloud Platform (GCP)
В этом разделе мы загрузим образ контейнера в Google Container Registry (GCR) и развернем его в Google Kubernetes Engine (GKE).
Шаг 1: Настройка проекта в GCP
1. Создайте проект в GCP. Перейдите в [Консоль Google Cloud] (https://console.cloud.google.com) и создайте новый проект.
2. Включите APIs Kubernetes Engine и Container Registry для вашего проекта.
Шаг 2: Загрузка образа в Google Container Registry
1. Пометьте образ Docker для Google Cloud:
docker tag cloud-container-app gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
2. Загрузите образ в GCR:
docker push gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
Шаг 3: Создание кластера Kubernetes
1. Инициализируйте кластер GKE:
gcloud container clusters create cloud-container-cluster --num-nodes=2
2. Настройте kubectl
для подключения к вашему новому кластеру:
gcloud container clusters get-credentials cloud-container-cluster
Шаг 4: Развертывание контейнеризованного приложения в GKE
1. Создайте файл k8s-deployment.yaml
для определения развертывания и сервиса:
apiVersion apps/v1
kind Deployment
metadata
name cloud-container-app
spec
replicas2
selector
matchLabels
app cloud-container-app
template
metadata
labels
app cloud-container-app
spec
containers
name cloud-container-app
image gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
ports
containerPort3000
---
apiVersion v1
kind Service
metadata
name cloud-container-service
spec
type LoadBalancer
selector
app cloud-container-app
ports
protocol TCP
port80
targetPort3000
2. Разверните приложение в GKE:
kubectl apply -f k8s-deployment.yaml
3. Получите внешний IP-адрес для доступа к приложению:
kubectl get services
Масштабирование и Управление Контейнерами в GKE
Шаг 1: Изменение размера развертывания
Чтобы изменить количество реплик (например, для обработки большего трафика), используйте следующую команду:
kubectl scale deployment cloud-container-app --replicas=5
GKE автоматически масштабирует приложение путем добавления реплик и распределения нагрузки.
Шаг 2: Мониторинг и управление журналами
1. Используйте команду ниже, чтобы просматривать журналы для конкретного пода в Kubernetes:
kubectl logs <POD_NAME>
2. Включите панель инструментов GKE для отслеживания состояния пода и использования ресурсов, а также для визуального управления развертываниями.
Вывод: Использование контейнеров для масштабируемого облачного развертывания
Этот учебник охватывает:
- Контейнеризацию приложения Node.js с использованием Docker.
- Развертывание в Google Kubernetes Engine (GKE) для масштабируемого управляемого хостинга.
- Эффективное управление и масштабирование контейнеров в облаке.
С помощью контейнеров в облаке ваши приложения становятся масштабируемыми, переносимыми и эффективными, что гарантирует готовность к обработке спроса, быструю адаптацию и постоянство в различных средах.
Source:
https://dzone.com/articles/a-step-by-step-guide-to-deploying-containers-in-the-cloud