Основы Kubernetes для Azure
Изучите основные конструкции Kubernetes — модули, развертывания, службы и пространства имен — и разберитесь, как AKS управляет плоскостью управления от Вашего имени.
«Основы Kubernetes для Azure» — бесплатный урок Azure Fundamentals на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Azure Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Azure Fundamentals содержит 4 уроков всего.
Что такое Kubernetes?
Kubernetes (K8s) — это платформа с открытым исходным кодом для оркестрации контейнеров, первоначально разработанная Google. Она автоматизирует развертывание, масштабирование и управление приложениями в контейнерах. Вместо ручного запуска контейнеров Вы описываете желаемое состояние приложения в манифестах YAML, а Kubernetes непрерывно приводит фактическое состояние к желаемому: перезапускает неисправные контейнеры, планирует рабочие нагрузки на исправных узлах и масштабирует реплики.
Архитектура кластера: плоскость управления и узлы
Кластер Kubernetes состоит из плоскости управления и рабочих узлов. Плоскость управления включает API-сервер (точку входа для всех команд kubectl), etcd (распределённое хранилище состояния), планировщик (назначает Pod узлам) и диспетчер контроллеров (поддерживает желаемое состояние). На рабочих узлах работают kubelet (агент узла), kube-proxy (сетевые правила) и среда выполнения контейнеров (containerd). В AKS Microsoft управляет плоскостью управления, а Вы управляете только рабочими узлами.
# Kubernetes control plane components
# kube-apiserver - REST API for all cluster operations
# etcd - Distributed key-value store (cluster state)
# kube-scheduler - Assigns pending pods to nodes
# kube-controller-manager - Runs reconciliation controllers
# Worker node components
# kubelet - Node agent, ensures containers run
# kube-proxy - Network routing for services
# containerd - Container runtime (runs containers)Pod: наименьшая развертываемая единица
Pod — это наименьшая развертываемая единица в Kubernetes. Pod объединяет один или несколько контейнеров, которые совместно используют сетевое пространство имён (один IP-адрес), тома хранилища и жизненный цикл. Контейнеры внутри Pod взаимодействуют через localhost. Pod эфемерен: при сбое его заменяет новый Pod с другим IP-адресом. Обычно Pod создают не напрямую, а с помощью ресурсов более высокого уровня, которые управляют Pod.
# Simple pod manifest
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp
image: mycontainerregistry.azurecr.io/myapp:v1.0
ports:
- containerPort: 80
resources:
requests:
cpu: '100m'
memory: '128Mi'
limits:
cpu: '500m'
memory: '512Mi'Deployment: управление ReplicaSet
Deployment — стандартный способ запуска приложений без состояния в Kubernetes. Он создаёт и управляет ReplicaSet, который поддерживает заданное число идентичных реплик Pod. Deployment поддерживает поэтапные обновления — постепенную замену старых Pod новыми — и откаты к предыдущим версиям. Вы описываете желаемый шаблон Pod и число реплик, а Kubernetes выполняет всё остальное.
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # Create 1 extra pod during update
maxUnavailable: 0 # Never reduce below desired count
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: mycontainerregistry.azurecr.io/myapp:v1.0
ports:
- containerPort: 80Сервисы: стабильные сетевые конечные точки
Поскольку Pod эфемерны, а их IP-адреса меняются, сервисы предоставляют стабильную сетевую конечную точку, которая распределяет трафик между соответствующими Pod. Сервис использует селектор меток для поиска Pod. Типы сервисов: ClusterIP (только внутренний, по умолчанию), NodePort (открывает порт на каждом узле), LoadBalancer (создаёт Azure Load Balancer с общедоступным IP-адресом) и ExternalName (псевдоним DNS для внешнего сервиса).
# Service exposing myapp pods externally
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
spec:
type: LoadBalancer # Creates Azure Load Balancer
selector:
app: myapp # Routes traffic to pods with this label
ports:
- port: 80 # Service port
targetPort: 80 # Pod/container port
# After creation, check the EXTERNAL-IP (Azure LB public IP)
# kubectl get service myapp-svcПространства имён для изоляции арендаторов
Пространства имён разделяют один кластер Kubernetes на несколько виртуальных кластеров. Ресурсы в разных пространствах имён изолированы по имени: например, Deployment myapp может одновременно существовать и в пространстве имён development, и в пространстве имён production. Пространства имён — основная единица для применения RBAC, квот ресурсов и сетевых политик к команде или среде. Пространства имён по умолчанию включают default, kube-system и kube-public.
# Create a namespace for the dev team
kubectl create namespace dev-team
# Deploy into a specific namespace
kubectl apply -f deployment.yaml --namespace dev-team
# List all resources in a namespace
kubectl get all --namespace dev-team
# Set default namespace for current context
kubectl config set-context --current --namespace dev-teamConfigMaps и секреты
ConfigMaps хранят неконфиденциальные данные конфигурации в виде пар «ключ–значение» или файлов и передают их в Pod как переменные среды или подключаемые тома. Секреты хранят конфиденциальные данные (пароли, токены) в кодировке base64 (по умолчанию без шифрования; для настоящего шифрования при хранении используйте Azure Key Vault Provider for Secrets Store CSI Driver). И ConfigMaps, и секреты ограничены пространством имён и указываются в спецификациях Pod по имени.
# Create a ConfigMap from literal values
kubectl create configmap app-config \
--from-literal=APP_ENV=production \
--from-literal=LOG_LEVEL=info
# Create a Secret
kubectl create secret generic db-secret \
--from-literal=DB_PASSWORD='super-secret'
# Reference in a pod spec
# env:
# - name: APP_ENV
# valueFrom:
# configMapKeyRef:
# name: app-config
# key: APP_ENV
# - name: DB_PASSWORD
# valueFrom:
# secretKeyRef:
# name: db-secret
# key: DB_PASSWORDПостоянные тома в Azure
Приложения с состоянием нуждаются в хранилище, которое переживает отдельные Pod. Kubernetes использует PersistentVolumes (PVs) и PersistentVolumeClaims (PVCs), чтобы отделить хранилище от жизненного цикла Pod. В AKS встроенные классы хранилищ Azure Disk и Azure Files автоматически выделяют управляемые диски и общие папки при создании PVC. Azure Disk предназначен для доступа из одного Pod, а Azure Files поддерживает одновременное чтение и запись из нескольких Pod.
# PersistentVolumeClaim using Azure Disk
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-disk-pvc
spec:
accessModes:
- ReadWriteOnce # Single-node read/write (Azure Disk)
storageClassName: managed-csi
resources:
requests:
storage: 10Gi
# Mount in a pod
# volumes:
# - name: data
# persistentVolumeClaim:
# claimName: my-disk-pvc
# volumeMounts:
# - name: data
# mountPath: /dataHorizontal Pod Autoscaler
Horizontal Pod Autoscaler (HPA) автоматически изменяет число реплик Pod в Deployment на основе наблюдаемого использования CPU и памяти или пользовательских метрик. Контроллер HPA запрашивает данные сервера метрик каждые 15 секунд и увеличивает или уменьшает число реплик, поддерживая использование ресурсов около целевого значения. Вы задаёте минимальное и максимальное число реплик как ограничения, предотвращающие неконтролируемое масштабирование.
# Create an HPA targeting 50% CPU utilisation
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50Проверки работоспособности: пробы активности и готовности
Kubernetes использует пробы для контроля состояния контейнеров. Проба активности проверяет, продолжает ли контейнер работать; при её сбое Kubernetes перезапускает контейнер. Проба готовности проверяет, готов ли контейнер обслуживать трафик; при её сбое Pod исключается из балансировки трафика Service без перезапуска. Проба запуска откладывает остальные пробы до инициализации приложения, предотвращая преждевременные перезапуски при медленном запуске.
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 15
periodSeconds: 20
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 80
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
startupProbe:
httpGet:
path: /startup
port: 80
failureThreshold: 30
periodSeconds: 10 # Allow 300s for slow startupЗапросы и ограничения ресурсов
Каждый контейнер в Kubernetes должен объявлять запросы ресурсов (минимально гарантированный объём, используемый планировщиком) и ограничения (максимально допустимый объём, после превышения которого контейнер ограничивается по ресурсам или завершается). Запросы CPU задаются в миллиядрах (m): 1000m = 1 ядро CPU. Точная настройка запросов и ограничений предотвращает проблемы из-за «шумных соседей» и позволяет планировщику эффективно размещать Pod на узлах без чрезмерного выделения ресурсов.
resources:
requests:
cpu: '250m' # 0.25 CPU core guaranteed
memory: '256Mi' # 256 MiB guaranteed
limits:
cpu: '1' # Max 1 CPU core
memory: '512Mi' # Max 512 MiB (OOMKilled if exceeded)Быстрая проверка
Проверьте своё понимание концепций Microsoft Azure Fundamentals (AZ-900), рассмотренных в этом уроке.
Итоги урока
В этом уроке Вы узнали, что поды — это наименьшие развёртываемые единицы, совместно использующие сеть и хранилище; развёртывания управляют наборами реплик без сохранения состояния и поддерживают поэтапное обновление; а службы предоставляют стабильные конечные точки и распределяют трафик между временными подами. Далее мы рассмотрим развёртывание рабочих нагрузок в AKS.
Изучай Azure Fundamentals с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Основы Kubernetes для Azure» бесплатный?
Да — полный текст урока «Основы Kubernetes для Azure» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Azure Fundamentals, подпишись на CoddyKit PRO. Курс Azure Fundamentals содержит 4 уроков всего.
Чему я научусь в уроке «Основы Kubernetes для Azure»?
Изучите основные конструкции Kubernetes — модули, развертывания, службы и пространства имен — и разберитесь, как AKS управляет плоскостью управления от Вашего имени. Ты практикуешь Azure Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Azure Fundamentals?
Предыдущий опыт не требуется. Azure Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Основы Kubernetes для Azure»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Azure Fundamentals?
Да. Каждый урок Azure Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Azure Container Registry
- Azure Container Instances
- Основы Kubernetes для Azure
- Развертывание рабочих нагрузок в AKS