Упражнение. Настройка политики Azure для Kubernetes в кластере AKS
Политика Azure для Kubernetes помогает организациям соответствовать требованиям к управлению и юридическим требованиям, реализовывать рекомендации и устанавливать соглашения организации для облачных сред.
Команды разработчиков в вашей компании принимают Службу Azure Kubernetes (AKS) в качестве платформы разработки. Вы понимаете, что лучший способ управления затратами заключается в применении бизнес-правил, определяющих ограничения ресурсов рабочей нагрузки. Необходимо убедиться, что разработчики могут развертывать рабочие нагрузки только в определенных ограничениях для выделения ЦП и памяти. Система должна предотвратить рабочие нагрузки, превышающие эти ограничения.
В этом упражнении вы включите Azure Policy для AKS в вашем кластере и добавите политику , в которой указано, что ограничения ресурсов по ЦП и памяти контейнеров кластера Kubernetes не должны превышать заданные пределы. Затем вы проверите, запрещает ли политика планирование рабочих нагрузок, превышающих параметры ресурса политики.
Включите поставщиков ресурсов ContainerService и PolicyInsights
Войдите в Azure Cloud Shell с помощью учетной записи Azure. Выберите Bash-версию для Cloud Shell.
Политика Azure для AKS требует, чтобы версия кластера была 1.14 или более поздней. Выполните следующий сценарий, чтобы проверить версию кластера AKS:
az aks list
Убедитесь, что указанная версия кластера — 1.14 или более поздняя.
Зарегистрируйте поставщика служб Azure Kubernetes, выполнив команду
az provider register
:az provider register --namespace Microsoft.ContainerService
Зарегистрируйте поставщика политик Azure, выполнив команду
az provider register
:az provider register --namespace Microsoft.PolicyInsights
Включите установку надстройки, выполнив команду
az feature register
:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Убедитесь, что регистрация выполнена успешно, запрашивая таблицу списка функций. Используйте команду
az feature list
для выполнения запроса. Регистрация компонента может занять несколько минут, поэтому необходимо периодически проверять результат.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
Если время ожидания сеанса Cloud Shell истекло, вы можете отслеживать процесс регистрации на портале Azure с помощью области подключения.
Выполните команду
az provider register
, чтобы распространить обновление после подтверждения того, что команда запроса списка компонентов отображает "Зарегистрировано".az provider register -n Microsoft.ContainerService
Включение политики Azure в кластере
Выполните команду
az aks enable-addons
, чтобы включить надстройкуazure-policy
для кластера:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Убедитесь, что pod azure-policy установлен в пространстве имен
kube-system
и pod gatekeeper установлен в пространстве именgatekeeper-system
. Для этого выполните следующие командыkubectl get pods
:kubectl get pods -n kube-system
Выходные данные должны выглядеть примерно так:
NAME READY STATUS RESTARTS AGE azure-policy-78c8d74cd4-7fqn2 1/1 Running 0 12m azure-policy-webhook-545c898766-gsjrc 1/1 Running 0 12m ...
kubectl get pods -n gatekeeper-system
Выходные данные должны выглядеть примерно так:
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Наконец, убедитесь, что последняя надстройка установлена, выполнив команду
az aks show
. Эта команда извлекает сведения о конфигурации кластера.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
Выходные данные должны выглядеть примерно так:
{ "config": null, "enabled": true, "identity": null }
Теперь вы готовы перейти на портал Azure, чтобы настроить политику с именем , которая предписывает, что контейнеры в кластере Kubernetes не должны превышать указанные пределы использования ресурсов ЦП и памяти.
Назначение встроенного определения политики
Чтобы настроить новую политику Azure, используйте службу политики на портале Azure.
Найдите службу политики на портале Azure. Для этого в строке поиска в верхней части портала найдите и выберите Политика.
Выберите службу политики из списка служб, как показано здесь.
Откроется панель мониторинга политики с обзором всех назначенных политик, состояния ресурсов и их влияния. Если вы не назначили какие-либо политики, панель мониторинга пуста.
В области меню слева в разделе Созданиевыберите задания:
Вспомните из предыдущего описания, что у вас есть два варианта для создания назначения политики: вы назначаете либо инициативу, либо политику. В верхней панели меню выберите Присвоить политику:
Панель "Назначение политики" появится.
На вкладке Основные введите следующие значения для каждого параметра, чтобы создать политику.
Настройки Ценность сфера Размах Нажмите кнопку многоточия. Появится панель области. В разделе подпискавыберите подписку, содержащую группу ресурсов. Для группы ресурсоввыберите rg-akscostsaving, а затем нажмите кнопку Выбрать. Исключения Оставьте пустым. основы Определение политики Нажмите кнопку с многоточием. Откроется панель доступных определений. В поле Поиск отфильтруйте результаты, введя ЦП. На вкладке "Определения политики " выберите ограничения ресурсов ЦП и памяти контейнеров кластера Kubernetes , которые не должны превышать указанные пределы, а затем выберите Добавить. Имя назначения Примите значение по умолчанию. Описание Оставьте пустым. Применение политик Убедитесь, что этот параметр имеет значение включено. Назначено кем Примите значение по умолчанию. Ниже приведен пример завершенной вкладки Базовые:
Выберите вкладку Параметры, чтобы указать параметры политики.
Задайте следующие значения для каждого параметра:
Настройки Ценность Максимально допустимое количество единиц ЦП Задайте значение 200 м. Политика сопоставляет это значение как со значением запроса ресурсов рабочей нагрузки, так и с лимитом рабочей нагрузки, указанным в манифесте рабочей нагрузки. Максимально допустимое количество байт памяти Задайте для параметра значение 256Mi. Политика сопоставляет это значение как со значением запроса ресурсов рабочей нагрузки, так и со значением ограничения рабочей нагрузки, указанными в файле манифеста рабочей нагрузки. Ниже приведен пример готовой вкладки "Параметры ":
Выберите вкладку исправления. На этой вкладке вы выберете, как новая политика влияет на уже существующие ресурсы. По умолчанию новая политика проверяет только созданные ресурсы. Сохраните стандартную конфигурацию по умолчанию.
Ниже приведен пример завершенной вкладки исправления:
Перейдите на вкладку "Обзор и создание". Проверьте выбранные вами значения, а затем выберите "Создать".
Важный
Если вы используете существующий кластер AKS, назначение политики может занять около 15 минут.
Тестовые запросы ресурсов
Последним шагом является проверка новой политики. Разверните тестовую рабочую нагрузку с запросами ресурсов и ограничениями, которые нарушают новую политику. Если все в порядке, сервер возвращает сообщение об ошибке: отказано по политике.
Откройте Azure Cloud Shell и обязательно выберите версию Bash Cloud Shell.
Создайте файл манифеста для развертывания Kubernetes с помощью встроенного редактора. Вызовите файл
test-policy.yaml
:code test-policy.yaml
Совет
Cloud Shell включает интегрированный редактор файлов. Редактор Cloud Shell поддерживает такие функции, как выделение языка, палитра команд и проводник. Для простого создания и редактирования файлов запустите редактор, выполнив
code .
в терминале Cloud Shell. Это действие открывает редактор с активным рабочим каталогом, заданным в терминале. Чтобы открыть файл манифеста непосредственно для быстрого редактирования, выполнитеcode test-policy.yaml
. Эта команда открывает редактор без файлового проводника.Вставьте следующий текст в файл:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 500m memory: 256Mi limits: cpu: 1000m memory: 500Mi
Нажмите клавиши CTRL+S , чтобы сохранить файл, а затем нажмите клавиши CTRL+Q, чтобы закрыть редактор.
Выполните команду
kubectl apply
, чтобы применить конфигурацию и развернуть приложение в пространстве именcostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Выходные данные должны выглядеть следующим образом:
Error from server ( [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>) : error when creating "test-deploy.yml" : admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>
Обратите внимание, что веб-перехватчик приема,
validation.gatekeeper.sh
, отклонил запрос на планирование pod.Откройте файл манифеста и исправьте запрос ресурса:
code test-policy.yaml
Замените текст следующим текстом:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 256Mi limits: cpu: 200m memory: 256Mi
Нажмите клавиши CTRL+S , чтобы сохранить файл, а затем нажмите клавиши CTRL+Q, чтобы закрыть редактор.
Выполните команду
kubectl apply
, чтобы применить конфигурацию и развернуть приложение в пространстве именcostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Вы получите следующие выходные данные:
pod/nginx created
Получите новые поды в пространстве имен
costsavings
.kubectl get pods --namespace costsavings
Через несколько секунд капсулы переходят к состоянию
Running
.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Нажмите клавиши CTRL+C, чтобы остановить просмотр после запуска модулей pod.