Упражнение. Настройка политики Azure для Kubernetes в кластере AKS
Политика Azure для Kubernetes позволяет организациям осуществлять управление, соблюдать нормативные требования, а также внедрять наработки и организационные соглашения для облачных сред.
Команды разработчиков в вашей компании используют службу Azure Kubernetes (AKS) как платформу разработки. Вы понимаете, что лучший способ управления затратами заключается в применении бизнес-правил, определяющих ограничения ресурсов рабочей нагрузки. Вам нужно, чтобы разработчики могли развертывать рабочие нагрузки в пределах установленных ограничений в отношении ЦП и памяти. Система должна запрещать выполнение рабочих нагрузок, превышающих установленные пределы.
В этом упражнении вы включите Политика Azure для AKS в кластере и добавьте ограничения ресурсов ЦП и памяти контейнеров кластера Kubernetes не должны превышать указанную политику ограничений. Затем вы проверите, запрещает ли политика планирование рабочих нагрузок, превышающих параметры ресурса политики.
Включение поставщиков ресурсов ContainerService и PolicyInsights
Войдите в Azure Cloud Shell с помощью учетной записи Azure. Выберите Cloud Shell версии Bash.
Для политики 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
Убедитесь, что в пространстве имен
kube-system
установлен объект pod политики Azure, а в пространстве именgatekeeper-system
— объект pod Gatekeeper. Для этого выполните следующие команды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 используйте службу политик на портале Microsoft Azure.
Войдите на портал Azure.
На портале Azure откройте службу Policy. Для этого на панели поиска в верхней части портала Azure найдите и выберите Политика.
Выберите службу Policy из списка служб, как показано в примере ниже.
Откроется панель мониторинга политики, содержащая все назначенные политики, состояние ресурсов и указание того, как влияют на них политики. Если вы не назначили какие-либо политики, панель мониторинга пуста.
На панели меню слева в разделе Разработка выберите Назначения.
Ранее мы уже говорили, что вы можете создать назначение политики двумя способами: либо назначить инициативу, либо назначить политику. В верхней строке меню выберите Назначить политику.
Откроется панель Назначение политики.
Чтобы создать политику, на вкладке Основные сведения введите следующие значения параметров.
Параметр Значение Область применения Область Нажмите кнопку с многоточием. Появится панель Область. В разделе Подписка выберите подписку, в которую входит ваша группа ресурсов. Для группы ресурсов выберите rg-akscostsaving, а затем нажмите кнопку "Выбрать". Исключения Оставьте пустым. Основы Определение политики Нажмите кнопку с многоточием. Появится область Доступные определения. Отфильтруйте выборку, набрав в поле поиска слово ЦП. На вкладке "Определения политики" выберите ограничения ресурсов ЦП и памяти контейнеров кластера Kubernetes, а затем нажмите кнопку "Добавить". Имя назначения Примите значение по умолчанию. Description Оставьте пустым. Применение политики Этот параметр должен быть включен. Кем назначено Примите значение по умолчанию. Ниже показан пример заполненной вкладки Основное.
Перейдите на вкладку Параметры, чтобы указать параметры политики.
Введите для параметров указанные ниже значения.
Параметр Значение Максимально допустимое количество ЦП Укажите значение 200m. Политика сравнивает это значение со значением запроса ресурсов рабочей нагрузки и значением предела рабочей нагрузки, указанными в файле манифеста рабочей нагрузки. Максимально допустимый объем памяти в байтах Укажите значение 256Mi. Политика сравнивает это значение со значением запроса ресурсов рабочей нагрузки и значением предела рабочей нагрузки, указанными в файле манифеста рабочей нагрузки. Ниже показан пример заполненной вкладки Параметры.
Перейдите на вкладку "Исправление". На этой вкладке вы выберете, как новая политика влияет на ресурсы, которые уже существуют. По умолчанию новая политика проверка только созданные ресурсы. Сохраните стандартную конфигурацию по умолчанию.
Ниже показан пример заполненной вкладки Исправление.
Выберите вкладку "Просмотр и создание". Просмотрите выбранные значения, а затем нажмите кнопку "Создать".
Важно!
Если вы используете существующий кластер AKS, назначение политики может занять около 15 минут.
Тестирование запросов ресурсов
Последним шагом будет проверка новой политики. Разверните тестовую рабочую нагрузку с запросами ресурсов и ограничениями, которые нарушают новую политику. Если все идет правильно, сервер возвращает сообщение об ошибке, отказано в политике.
Откройте Azure Cloud Shell и убедитесь, что выбрана версия Cloud Shell Bash.
Создайте файл манифеста для развертывания 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
Получите модули pod только что созданных модулей pod в пространстве
costsavings
имен.kubectl get pods --namespace costsavings
Через несколько секунд модули pod переходит к состоянию
Running
.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Нажмите клавиши CTRL+C , чтобы остановить просмотр после запуска модулей pod.