Azure Fundamentals · Урок

Основы Kubernetes для Azure

Изучите основные конструкции Kubernetes — модули, развертывания, службы и пространства имен — и разберитесь, как AKS управляет плоскостью управления от Вашего имени.

Урок 3 из 413 шагов

«Основы 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-team

ConfigMaps и секреты

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: /data

Horizontal 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 — локальная установка не требуется.

Все уроки этого курса

  1. Azure Container Registry
  2. Azure Container Instances
  3. Основы Kubernetes для Azure
  4. Развертывание рабочих нагрузок в AKS
← Назад к Azure Fundamentals