Kubernetes (K8s) — это платформа оркестрации контейнеров, которая автоматизирует развертывание, управление и масштабирование контейнеризированных приложений. Она позволяет эффективно управлять кластерами контейнеров и обеспечивает высокую доступность приложений.
Основные компоненты Kubernetes
Узлы (Nodes)
Узел (Node) — это физический или виртуальный сервер, который выполняет контейнерные приложения. Существует два типа узлов:
- Master Node — управляет кластером, распределяет нагрузки и контролирует состояние приложений.
- Worker Node — выполняет контейнеры и управляется Master Node.
Под (Pod)
Под — это минимальная единица развертывания в Kubernetes. Он может содержать один или несколько контейнеров, которые совместно используют ресурсы и сетевое пространство.
Контроллеры
Контроллеры управляют состоянием объектов в кластере. Основные виды контроллеров:
- Deployment — управляет обновлением и масштабированием подов.
- ReplicaSet — обеспечивает нужное количество работающих подов.
- StatefulSet — предназначен для работы с состоянием приложений.
Сервис (Service)
Сервис предоставляет единый точку доступа к набору подов и обеспечивает балансировку нагрузки.
Ingress
Ingress управляет входящими HTTP/HTTPS-запросами и маршрутизирует их к нужным сервисам.
Запуск .NET-приложения в Kubernetes
Создание Docker-образа
Перед развертыванием в Kubernetes необходимо создать Docker-образ .NET-приложения:
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY ./publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Сборка и загрузка образа в Docker Registry:
docker build -t myapp:latest .
docker tag myapp:latest myregistry/myapp:latest
docker push myregistry/myapp:latest
Создание манифеста для Kubernetes
Файл deployment.yaml
описывает развертывание .NET-приложения в Kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myregistry/myapp:latest
ports:
- containerPort: 80
Применение манифеста:
kubectl apply -f deployment.yaml
Создание сервиса для доступа к приложению
Файл service.yaml
для публикации приложения:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Применение:
kubectl apply -f service.yaml