Развертывание рабочих нагрузок в AKS
Создайте кластер AKS, разверните многоконтейнерное приложение с помощью kubectl и диаграмм Helm и сделайте его доступным извне через службу Azure Load Balancer.
«Развертывание рабочих нагрузок в AKS» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Что такое Azure Kubernetes Service?
Azure Kubernetes Service (AKS) — это управляемое предложение Kubernetes, в котором Microsoft бесплатно эксплуатирует и обслуживает управляющий контур (сервер API, etcd, планировщик). Вы платите только за рабочие узлы (VM). AKS обрабатывает обновления версии Kubernetes, установку исправлений ОС узлов, масштабирование управляющего контура и интеграцию с сетями, хранилищами и системами удостоверений Azure. Это значительно снижает операционные затраты на запуск Kubernetes в рабочей среде.
Создание кластера AKS
Создайте кластер AKS с помощью az aks create, указав количество узлов, размер VM и параметры сети. AKS автоматически создаёт группу ресурсов узлов, содержащую VM, управляемые диски, сетевые интерфейсы и балансировщики нагрузки. Рекомендуемый режим работы сети — Azure CNI: каждый под получает реальный IP-адрес VNet, что обеспечивает прямое подключение к другим службам Azure без NAT.
# Create an AKS cluster with 3 nodes
az aks create \
--name myAKSCluster \
--resource-group MyRG \
--location eastus \
--node-count 3 \
--node-vm-size Standard_D2s_v3 \
--enable-managed-identity \
--attach-acr mycontainerregistry \
--network-plugin azure \
--generate-ssh-keys
# Get kubectl credentials
az aks get-credentials --name myAKSCluster --resource-group MyRGПулы узлов
Кластеры AKS могут иметь несколько пулов узлов — групп VM с одинаковой конфигурацией. Системный пул узлов запускает критически важные системные компоненты Kubernetes (поды kube-system). Пулы пользовательских узлов запускают рабочие нагрузки Ваших приложений. Раздельные пулы позволяют сочетать разные SKU VM: пул общего назначения для веб-приложений и пул GPU для рабочих нагрузок машинного обучения — и независимо масштабировать каждый из них.
# Add a GPU node pool for ML workloads
az aks nodepool add \
--cluster-name myAKSCluster \
--resource-group MyRG \
--name gpupool \
--node-count 2 \
--node-vm-size Standard_NC6s_v3 \
--node-taints sku=gpu:NoSchedule
# List node pools
az aks nodepool list \
--cluster-name myAKSCluster \
--resource-group MyRG \
-o tableРазвёртывание многоконтейнерного приложения
Разверните многоуровневое приложение в AKS, создав отдельные файлы манифестов Kubernetes для каждого уровня и применив их с помощью kubectl apply. Типичное развёртывание включает развёртывание для веб-уровня, развёртывание для уровня API, службы для их соединения, ConfigMap для конфигурации среды и ресурс Ingress для внешнего доступа к приложению через единое имя узла.
# Apply all manifests in a directory
kubectl apply -f k8s/
# Or apply individual files
kubectl apply -f frontend-deployment.yaml
kubectl apply -f frontend-service.yaml
kubectl apply -f api-deployment.yaml
kubectl apply -f api-service.yaml
kubectl apply -f ingress.yaml
# Watch rollout status
kubectl rollout status deployment/frontend
kubectl rollout status deployment/apiIngress и Application Gateway
Ресурс Ingress определяет правила маршрутизации HTTP, сопоставляющие имена узлов и пути URL с внутренними службами. В отличие от службы LoadBalancer (один внешний IP-адрес на службу), один контроллер Ingress обрабатывает весь внешний HTTP-трафик и направляет его на основе правил. В AKS используйте контроллер NGINX Ingress или контроллер Application Gateway Ingress (AGIC) для завершения TLS-соединений и маршрутизации трафика к нескольким службам.
# Ingress routing traffic to two services by path
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
tls:
- hosts: [myapp.contoso.com]
secretName: myapp-tls
rules:
- host: myapp.contoso.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service: {name: api-svc, port: {number: 80}}
- path: /
pathType: Prefix
backend:
service: {name: frontend-svc, port: {number: 80}}Диаграммы Helm для упаковки приложений
Helm — это диспетчер пакетов для Kubernetes. Диаграмма объединяет все манифесты Kubernetes приложения (развёртывания, службы, Ingress, ConfigMaps) в один пакет с версией и настраиваемыми параметрами. helm install развёртывает диаграмму со значениями, специфичными для среды. Репозиторий Helm на Artifact Hub содержит тысячи готовых диаграмм для распространённой инфраструктуры (NGINX, cert-manager, Prometheus, Redis).
# Add the NGINX Ingress Controller chart repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Install NGINX Ingress Controller
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--set controller.replicaCount=2
# Install your own app chart with custom values
helm install myapp ./charts/myapp -f values-prod.yamlПоэтапные обновления и откаты
Обновите развёртывание, изменив тег образа контейнера: Kubernetes выполнит поэтапное обновление, постепенно создавая новые поды с обновлённым образом и завершая работу старых, сохраняя доступность приложения на всём протяжении процесса. Если новая версия работает неправильно, немедленно вернитесь к предыдущей редакции с помощью kubectl rollout undo. Kubernetes хранит настраиваемую историю редакций для каждого развёртывания.
# Update the image to a new version
kubectl set image deployment/myapp \
myapp=mycontainerregistry.azurecr.io/myapp:v2.0
# Watch the rollout progress
kubectl rollout status deployment/myapp
# View rollout history
kubectl rollout history deployment/myapp
# Rollback to the previous version
kubectl rollout undo deployment/myapp
# Rollback to a specific revision
kubectl rollout undo deployment/myapp --to-revision=2Автомасштабирование кластера
Autoscaler кластера автоматически добавляет рабочие узлы в пул узлов AKS или удаляет их на основе ожидающего планирования подов и загрузки узлов. Когда поды невозможно запланировать, поскольку все узлы заполнены, Autoscaler кластера выделяет новые узлы. Когда узлы используются недостаточно и поды можно объединить, он выселяет поды и удаляет узлы. Это дополняет горизонтальный автомасштабировщик подов: HPA масштабирует поды, а Autoscaler кластера — узлы.
# Enable Cluster Autoscaler on the default node pool
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--enable-cluster-autoscaler \
--min-count 2 \
--max-count 10
# Update autoscaler bounds on a specific node pool
az aks nodepool update \
--cluster-name myAKSCluster \
--resource-group MyRG \
--name nodepool1 \
--enable-cluster-autoscaler \
--min-count 3 \
--max-count 20Мониторинг AKS с помощью Azure Monitor
Включите Azure Monitor Container Insights, чтобы собирать журналы и метрики из кластера AKS без развёртывания сторонних средств мониторинга. Container Insights предоставляет готовые панели мониторинга состояния кластера, использования CPU и памяти узлами и подами, журналов контейнеров и потоковой передачи данных из подов в реальном времени. Он интегрируется с Prometheus для сбора пользовательских метрик и позволяет запрашивать все данные с помощью KQL в Log Analytics.
# Enable Azure Monitor Container Insights on AKS
az aks enable-addons \
--addons monitoring \
--name myAKSCluster \
--resource-group MyRG \
--workspace-resource-id /subscriptions/.../workspaces/MyLogAnalytics
# Stream live logs from a running pod
kubectl logs -f deployment/myapp -c myapp
# Query pod resource usage
kubectl top pods --namespace defaultRBAC AKS и Azure Active Directory
Интегрируйте AKS с Microsoft Entra ID, чтобы использовать пользователей и группы Azure AD для RBAC Kubernetes. Вместо управления отдельными учётными записями пользователей Kubernetes Вы назначаете ClusterRole или привязки ролей к идентификаторам объектов Entra ID. Когда разработчик запускает kubectl, AKS проверяет его токен Entra ID. Это обеспечивает централизованное управление удостоверениями и интеграцию с политиками условного доступа и MFA.
# Enable Entra ID RBAC on an AKS cluster
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--enable-azure-rbac
# Assign a built-in AKS role to an Entra group
az role assignment create \
--role 'Azure Kubernetes Service RBAC Reader' \
--assignee '<Entra-Group-Object-ID>' \
--scope /subscriptions/.../resourceGroups/MyRG/providers/Microsoft.ContainerService/managedClusters/myAKSClusterСетевые политики для безопасности на уровне подов
Сетевые политики — это ресурсы Kubernetes, управляющие тем, какие поды могут взаимодействовать друг с другом. По умолчанию все поды в кластере могут обращаться ко всем остальным подам — сетевые политики работают как межсетевой экран на уровне подов. В AKS включите сетевую политику Azure или Calico для применения политик. Распространённый подход — политика запрета по умолчанию, блокирующая весь трафик между подами, с последующим созданием явных политик разрешения для конкретных путей, необходимых Вашему приложению.
# Default deny all ingress to pods in namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: production
spec:
podSelector: {} # Matches all pods
policyTypes:
- Ingress
# Allow API pods to receive from frontend pods only
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow-frontend
spec:
podSelector: {matchLabels: {app: api}}
ingress:
- from:
- podSelector: {matchLabels: {app: frontend}}Быстрая проверка
Проверьте своё понимание концепций Microsoft Azure Fundamentals (AZ-900), рассмотренных в этом уроке.
Итоги урока
В этом уроке Вы узнали, что AKS — это управляемая служба Kubernetes, в которой Microsoft эксплуатирует управляющий контур; диаграммы Helm упаковывают многоресурсные приложения Kubernetes для повторяемого развёртывания; а Autoscaler кластера динамически добавляет и удаляет узлы в зависимости от потребности в планировании подов. Далее мы рассмотрим триггеры и привязки Azure Functions.
Часто задаваемые вопросы
Урок «Развертывание рабочих нагрузок в AKS» бесплатный?
Да — полный текст урока «Развертывание рабочих нагрузок в AKS» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «Развертывание рабочих нагрузок в AKS»?
Создайте кластер AKS, разверните многоконтейнерное приложение с помощью kubectl и диаграмм Helm и сделайте его доступным извне через службу Azure Load Balancer. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Развертывание рабочих нагрузок в AKS»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Azure Container Registry
- Azure Container Instances
- Основы Kubernetes для Azure
- Развертывание рабочих нагрузок в AKS