0Pricing
Cloud & IT Cert Prep · Урок

Профили Fargate для бессерверных подов

Запускайте поды Kubernetes на Fargate без управления узлами EC2, настраивайте профили Fargate и разбирайтесь в ограничениях их пространств имён.

«Профили Fargate для бессерверных подов» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Что такое профили Fargate

AWS Fargate для EKS позволяет запускать поды Kubernetes без подготовки и управления узлами EC2. Вместо выбора типов инстансов и групп узлов Вы определяете профиль Fargate, который указывает EKS, какие поды следует запускать на Fargate, на основе их пространства имён и необязательных селекторов меток. AWS автоматически выделяет нужный объём вычислительных ресурсов для каждого пода и освобождает его, когда под останавливается.

Настройка профиля Fargate

Профиль Fargate подключается к кластеру EKS и содержит один или несколько селекторов — каждый селектор задаёт пространство имён и необязательные пары «ключ-значение» меток Kubernetes. Для планирования на Fargate под должен соответствовать хотя бы одному селектору. В профиле также указываются роль выполнения пода (роль IAM) и приватные подсети, которые Fargate должен использовать для запуска подов.

# Create a Fargate profile for the 'production' namespace
aws eks create-fargate-profile \
  --cluster-name my-cluster \
  --fargate-profile-name production-profile \
  --pod-execution-role-arn arn:aws:iam::111122223333:role/EKSFargatePodExecutionRole \
  --subnets subnet-aaa subnet-bbb \
  --selectors '[{"namespace":"production"},{"namespace":"staging","labels":{"fargate":"true"}}]'

Роль выполнения пода

Роль выполнения пода — это роль IAM, которую EKS принимает, когда Fargate получает образы контейнеров и отправляет журналы подов в CloudWatch. Она должна включать управляемую AWS политику AmazonEKSFargatePodExecutionRolePolicy. Без этой роли поды, запланированные на Fargate, не смогут запуститься, поскольку Fargate не сможет пройти аутентификацию в ECR или записать данные в журналы CloudWatch.

# Create the pod execution role trust policy
cat fargate-trust-policy.json
# {
#   "Version": "2012-10-17",
#   "Statement": [{
#     "Effect": "Allow",
#     "Principal": {"Service": "eks-fargate-pods.amazonaws.com"},
#     "Action": "sts:AssumeRole"
#   }]
# }

aws iam attach-role-policy \
  --role-name EKSFargatePodExecutionRole \
  --policy-arn arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy

Ограничения пространств имён в Fargate

Fargate накладывает важные ограничения на пространства имён. Пространство имён kube-system недоступно для большинства профилей Fargate, поскольку в нём работают системные поды, например kube-proxy. Исключением является CoreDNS: AWS предоставляет пошаговую процедуру изменения развёртывания CoreDNS, чтобы удалить аннотацию eks.amazonaws.com/compute-type: ec2 и тем самым разрешить запуск на Fargate. Поды в исключённых пространствах имён останутся незапланированными, если доступных узлов EC2 нет.

# Patch CoreDNS to allow Fargate scheduling
kubectl patch deployment coredns \
  -n kube-system \
  --type json \
  -p '[{"op":"remove","path":"/spec/template/metadata/annotations/eks.amazonaws.com~1compute-type"}]'

# Restart CoreDNS to apply the patch
kubectl rollout restart deployment coredns -n kube-system

Размер ресурсов пода Fargate

Fargate выделяет вычислительные ресурсы на основе запросов CPU и памяти, заданных в спецификации пода. Значения округляются вверх до ближайшего поддерживаемого Fargate сочетания vCPU и памяти (например, от 0,25 vCPU / 0,5 GB до 16 vCPU / 120 GB). Оплата взимается только за выделенные ресурсы за каждую секунду работы пода. Всегда задавайте точные запросы ресурсов: заниженные значения приводят к завершению процесса из-за нехватки памяти, а завышенные увеличивают стоимость.

# Pod spec with explicit resource requests and limits
apiVersion: v1
kind: Pod
metadata:
  name: api-pod
  namespace: production
spec:
  containers:
  - name: api
    image: 111122223333.dkr.ecr.us-east-1.amazonaws.com/my-api:latest
    resources:
      requests:
        cpu: '500m'
        memory: '1Gi'
      limits:
        cpu: '1'
        memory: '2Gi'

Fargate и группы узлов EC2: компромиссы

Fargate избавляет от управления узлами, но имеет ограничения: отсутствует поддержка DaemonSet (поскольку нет постоянных узлов, на которых их можно было бы планировать), отсутствуют привилегированные контейнеры и ограничена поддержка некоторых типов хранилищ. Группы узлов EC2 поддерживают GPU, пользовательские ядра и рабочие нагрузки с сохранением состояния, использующие локальные диски NVMe. Распространённый подход — запускать сервисы без сохранения состояния на Fargate, а рабочие нагрузки с сохранением состояния или GPU — на выделенных группах узлов EC2 в том же кластере EKS.

Сетевое взаимодействие Fargate и группы безопасности

Каждый под Fargate получает собственный эластичный сетевой интерфейс (ENI) и приватный IP-адрес из подсети, указанной в профиле. Благодаря этому с помощью функции Security Groups for Pods каждому поду можно назначить уникальную группу безопасности. Поды Fargate поддерживают все стандартные правила групп безопасности VPC, что обеспечивает точное управление входящим и исходящим трафиком на уровне отдельного пода — это существенное преимущество в безопасности по сравнению с общими группами безопасности на уровне узлов.

# Assign a security group to a pod via annotation
apiVersion: v1
kind: Pod
metadata:
  name: secure-api
  namespace: production
  annotations:
    vpc.amazonaws.com/pod-eni: 'true'
spec:
  securityGroups:
    groupIds:
    - sg-0abc1234def56789a
  containers:
  - name: api
    image: 111122223333.dkr.ecr.us-east-1.amazonaws.com/secure-api:v2

Ведение журналов Fargate в CloudWatch

Поды Fargate отправляют журналы в журналы Amazon CloudWatch с помощью встроенного маршрутизатора журналов Fluent Bit. Для настройки ведения журналов создайте ConfigMap с именем aws-logging в пространстве имён aws-observability. Роль выполнения пода должна иметь разрешения на создание групп журналов и запись событий журналов. Журналы распределяются по группам журналов CloudWatch для каждого кластера и пространства имён, поэтому централизованное объединение журналов выполняется без отдельного агента журналов.

# ConfigMap to enable Fargate logging
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-logging
  namespace: aws-observability
data:
  flb_log_cw: 'true'
  output.conf: |
    [OUTPUT]
        Name cloudwatch_logs
        Match *
        region us-east-1
        log_group_name /aws/eks/my-cluster/fargate
        log_stream_prefix fargate-
        auto_create_group true

Горизонтальное автомасштабирование подов на Fargate

Fargate поддерживает Kubernetes Horizontal Pod Autoscaler (HPA). Когда HPA увеличивает число реплик, Fargate автоматически подготавливает новые микро-ВМ, и Вам не нужно изменять размер группы узлов. Это обеспечивает настоящее бессерверное автомасштабирование: HPA управляет количеством подов, а Fargate эластично обрабатывает вычислительную нагрузку. При этом в кластере по-прежнему необходимо развернуть Metrics Server, чтобы HPA мог получать сведения об использовании CPU и памяти.

# Deploy Metrics Server (required for HPA)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# Create an HPA for a Fargate-scheduled deployment
kubectl autoscale deployment my-api \
  --namespace production \
  --cpu-percent=60 \
  --min=2 \
  --max=20

Модель ценообразования Fargate

Вы платите за потреблённые vCPU-секунды и GB-секунды, при этом минимальная продолжительность оплаты для каждого пода составляет 1 минуту. Плата за узлы, зарезервированные мощности и исправление AMI/OS отсутствует. Обычно вычислительные ресурсы Fargate обходятся дороже единицы ресурсов, чем правильно подобранные инстансы EC2 по запросу, однако совокупная стоимость владения часто оказывается ниже, если учесть сэкономленное инженерное время на управлении узлами, исправлении ошибок и принятии решений о масштабировании.

Основные ограничения Fargate

Основные ограничения Fargate для экзамена SAA-C03: нет поддержки DaemonSet (поды нельзя разместить на каждом узле, поскольку постоянных узлов нет), нет привилегированных контейнеров, нет режима hostNetwork, а эфемерное хранилище ограничено 20 GB на под (с помощью настройки его можно увеличить до 200 GB). Постоянное блочное хранилище EBS не поддерживается — для общего постоянного файлового хранилища с подами Fargate используйте EFS.

# Mount EFS in a Fargate pod (EBS is NOT supported on Fargate)
apiVersion: v1
kind: Pod
metadata:
  name: efs-pod
  namespace: production
spec:
  volumes:
  - name: efs-storage
    persistentVolumeClaim:
      claimName: efs-pvc
  containers:
  - name: app
    image: my-image:latest
    volumeMounts:
    - name: efs-storage
      mountPath: /data

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили изложенные в этом уроке концепции AWS Solutions Architect (SAA-C03).

Итоги урока

В этом уроке Вы узнали: профили Fargate используют селекторы пространств имён и меток для бессерверного планирования подов, роль выполнения пода предоставляет Fargate разрешения на получение образов и запись журналов, а Fargate не поддерживает DaemonSets и EBS — для постоянного хранилища используйте EFS. Далее мы рассмотрим сетевое взаимодействие EKS с подключаемым модулем VPC CNI и AWS Load Balancer Controller.

Часто задаваемые вопросы

Урок «Профили Fargate для бессерверных подов» бесплатный?

Да — полный текст урока «Профили Fargate для бессерверных подов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Чему я научусь в уроке «Профили Fargate для бессерверных подов»?

Запускайте поды Kubernetes на Fargate без управления узлами EC2, настраивайте профили Fargate и разбирайтесь в ограничениях их пространств имён. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?

Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Профили Fargate для бессерверных подов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?

Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Плоскость управления и рабочие узлы EKS
  2. Профили Fargate для бессерверных подов
  3. Сеть EKS: VPC CNI и балансировка нагрузки
  4. Роли IAM для сервисных аккаунтов (IRSA)
← Назад к Cloud & IT Cert Prep