Учебник. Развертывание конфигураций с помощью GitOps в кластерах Kubernetes с поддержкой Azure Arc
Внимание
Это руководство предназначено для GitOps с Flux версии 1. GitOps с Flux версии 2 теперь доступен для кластеров Kubernetes с поддержкой Azure Arc и Служба Azure Kubernetes (AKS); Перейдите к руководству по GitOps с Flux версии 2. Мы рекомендуем перейти на Flux версии 2 как можно скорее.
Поддержка ресурсов конфигурации кластера flux версии 1, созданных до 1 января 2024 г., завершится 24 мая 2025 г. Начиная с 1 января 2024 г. вы не сможете создавать новые ресурсы конфигурации кластера Flux версии 1.
В этом руководстве описано, как применить конфигурации Flux версии 1 с помощью GitOps в кластере Kubernetes с поддержкой Azure Arc. Вы изучите следующие темы:
- создать конфигурацию для кластера Kubernetes с поддержкой Azure Arc на основе примера репозитория Git;
- убедиться, что конфигурация успешно создана;
- применить конфигурацию из частного репозитория Git;
- проверить конфигурацию Kubernetes.
Необходимые компоненты
Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
Существующий подключенный кластер Kubernetes с поддержкой Azure Arc.
- Если вы еще не подключили кластер, выполните инструкции из пошагового руководства Подключение кластера Kubernetes с поддержкой Azure Arc.
Понимание преимуществ и архитектуры этой возможности. Дополнительные сведения см. в статье Конфигурации и GitOps — Kubernetes с поддержкой Azure Arc.
k8s-configuration
Установите расширение Azure CLI версии >= 1.0.0:az extension add --name k8s-configuration
Совет
Если расширение
k8s-configuration
уже установлено, его можно обновить до последней версии, выполнив следующую команду:az extension update --name k8s-configuration
Создание конфигурации
Пример репозитория для этой статьи создан на основе роли оператора кластера. Манифесты в этом репозитории подготавливают несколько пространств имен, развертывают рабочие нагрузки и предоставляют некоторую конфигурацию для команды. Применение этого репозитория в GitOps создает в кластере следующие ресурсы:
- Пространства имен:
cluster-config
,team-a
,team-b
- развертывание
arc-k8s-demo
; - ConfigMap
team-a/endpoints
.
config-agent
получает из Azure новые и обновленные конфигурации. Эта задача займет до 5 минут.
Если вы связываете с конфигурацией частный репозиторий, обязательно выполните действия из раздела Применение конфигурации из частного репозитория Git.
Внимание
Это руководство предназначено для GitOps с Flux версии 1. GitOps с Flux версии 2 теперь доступен для кластеров Kubernetes с поддержкой Azure Arc и Служба Azure Kubernetes (AKS); Перейдите к руководству по GitOps с Flux версии 2. Мы рекомендуем перейти на Flux версии 2 как можно скорее.
Поддержка ресурсов конфигурации кластера flux версии 1, созданных до 1 января 2024 г., завершится 24 мая 2025 г. Начиная с 1 января 2024 г. вы не сможете создавать новые ресурсы конфигурации кластера Flux версии 1.
Использование Azure CLI
Используя расширение Azure CLI для k8s-configuration
, свяжите подключенный кластер с примером репозитория Git.
Присвойте этой конфигурации имя
cluster-config
.Поручите агенту развертывание оператора в пространстве имен
cluster-config
.Присвойте этому оператору разрешения
cluster-admin
.az k8s-configuration flux create --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --operator-instance-name cluster-config --operator-namespace cluster-config --repository-url https://github.com/Azure/arc-k8s-demo --scope cluster --cluster-type connectedClusters
{ "complianceStatus": { "complianceState": "Pending", "lastConfigApplied": "0001-01-01T00:00:00", "message": "{\"OperatorMessage\":null,\"ClusterState\":null}", "messageLevel": "3" }, "configurationProtectedSettings": {}, "enableHelmOperator": false, "helmOperatorProperties": null, "id": "/subscriptions/<sub id>/resourceGroups/<group name>/providers/Microsoft.Kubernetes/connectedClusters/<cluster name>/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config", "name": "cluster-config", "operatorInstanceName": "cluster-config", "operatorNamespace": "cluster-config", "operatorParams": "--git-readonly", "operatorScope": "cluster", "operatorType": "Flux", "provisioningState": "Succeeded", "repositoryPublicKey": "", "repositoryUrl": "https://github.com/Azure/arc-k8s-demo", "resourceGroup": "MyRG", "sshKnownHostsContents": "", "systemData": { "createdAt": "2020-11-24T21:22:01.542801+00:00", "createdBy": null, "createdByType": null, "lastModifiedAt": "2020-11-24T21:22:01.542801+00:00", "lastModifiedBy": null, "lastModifiedByType": null }, "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" }
Использование общедоступного репозитория Git
Параметр | Форматировать |
---|---|
--repository-url |
http[s]://server/repo[.git] |
Использование частного репозитория Git с SSH и ключами, созданными с помощью Flux
Добавьте открытый ключ, созданный с помощью Flux, в учетную запись пользователя в поставщике службы Git. Если ключ добавляется в репозиторий, а не в учетную запись пользователя, в URL-адресе укажите git@
вместо user@
.
Дополнительные сведения см. в статье Применение конфигурации из частного репозитория Git.
Параметр | Форматировать | Примечания. |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] или user@server:repo[.git] | Можно использовать git@ вместо user@ |
Использование частного репозитория Git с SSH и предоставленными пользователем ключами
Предоставьте собственный закрытый ключ напрямую или через файл. Этот ключ должен иметь формат PEM и заканчиваться символом перевода строки (\n).
Добавьте связанный открытый ключ в учетную запись пользователя в поставщике службы Git. Если ключ добавляется в репозиторий, а не в учетную запись пользователя, укажите git@
вместо user@
.
Дополнительные сведения см. в статье Применение конфигурации из частного репозитория Git.
Параметр | Форматировать | Примечания. |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] или user@server:repo[.git] | Можно использовать git@ вместо user@ |
--ssh-private-key |
Ключ в кодировке base64 и формате PEM | Предоставьте ключ напрямую |
--ssh-private-key-file |
Полный путь к локальному файлу | Укажите полный путь к локальному файлу, который содержит ключ в формате PEM |
Использование закрытого узла Git с SSH с предоставленным пользователем списком известных узлов
Оператор Flux сохраняет список общих узлов Git в известном файле hosts для проверки подлинности репозитория Git перед установкой SSH-подключения. Если вы используете нестандартный репозиторий Git или собственный узел Git, предоставьте собственный ключ узла, чтобы Flux смог опознать репозиторий.
Как и закрытые ключи, содержимое known_hosts можно предоставить напрямую или через файл. Для предоставления собственного содержимого соблюдайте спецификации формата для содержимого known_hosts и используйте любой из описанных выше сценариев с ключами SSH.
Параметр | Форматировать | Примечания. |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] или user@server:repo[.git] | Можно использовать git@ вместо user@ |
--ssh-known-hosts |
Данные в кодировке base64 | Непосредственное предоставление содержимого known_hosts |
--ssh-known-hosts-file |
Полный путь к локальному файлу | Предоставление содержимого known_hosts в локальном файле |
Использование частного репозитория Git с HTTPS
Параметр | Форматировать | Примечания. |
---|---|---|
--repository-url |
https://server/repo[.git] | HTTPS с обычной проверкой подлинности |
--https-user |
Необработанные данные или данные в кодировке base64 | Имя пользователя HTTPS |
--https-key |
Необработанные данные или данные в кодировке base64 | Личный маркер доступа или пароль HTTPS |
Примечание.
- Чарт для оператора Helm версии 1.2.0 и выше поддерживает закрытую проверку подлинности выпуска HTTPS Helm.
- Выпуск HTTPS Helm не поддерживается для кластеров, управляемых AKS.
- Если вам нужно, чтобы Flux обращался к репозиторию Git через прокси-сервер, потребуется настроить для агентов Azure Arc параметры прокси-сервера. Дополнительные сведения см. в разделе Подключение с использованием исходящего прокси-сервера.
Дополнительные параметры
Настройте в конфигурации следующие необязательные параметры.
Параметр | Описание |
---|---|
--enable-helm-operator |
Параметр для включения поддержки развертываний чартов Helm. |
--helm-operator-params |
Значения чарта для оператора Helm (если включено). Например, --set helm.versions=v3 . |
--helm-operator-chart-version |
Версия чарта для оператора Helm (если включено). Используйте версию 1.2.0 или выше. По умолчанию: 1.2.0. |
--operator-namespace |
Имя для пространства имен оператора. По умолчанию: default. Длина не более 23 символов. |
--operator-params |
Параметры для оператора. Должны быть заданы в одинарных кавычках. Например: --operator-params='--git-readonly --sync-garbage-collection --git-branch=main' |
Поддерживаемые параметры в --operator-params
Вариант | Описание |
---|---|
--git-branch |
Ветвь репозитория Git для манифестов Kubernetes. Значение по умолчанию — master. В новых репозиториях есть корневая ветвь с именем main , и тогда здесь нужно задать значение --git-branch=main . |
--git-path |
Относительный путь в репозитории Git, где Flux будет размещать манифесты Kubernetes. |
--git-readonly |
Этот репозиторий Git будет считаться доступным только для чтения. Flux не будет выполнять попытки записи в него. |
--manifest-generation |
Если параметр включен, Flux будет искать .flux.yaml и запустит Kustomize или другие генераторы манифестов. |
--git-poll-interval |
Период опроса на наличие новых фиксаций в репозитории Git. По умолчанию используется значение 5m (5 минут). |
--sync-garbage-collection |
Если этот флажок установлен, Flux удалит ресурсы, которые были созданы, но теперь отсутствуют в Git. |
--git-label |
Метка для отслеживания хода синхронизации. Используется для маркировки ветви Git. По умолчанию — flux-sync . |
--git-user |
Имя пользователя для фиксации Git. |
--git-email |
Электронная почта для фиксации Git. |
Если вы не хотите, чтобы Flux записывал данные в репозиторий, а значения --git-user
и --git-email
не заданы, значение для --git-readonly
будет присвоено автоматически.
Дополнительные сведения см. в документации по Flux.
Примечание.
Flux по умолчанию выполняет синхронизацию из ветви master
репозитория Git. При этом более новые репозитории Git имеют корневую ветвь с именем main
. В этом случае вам нужно указать --git-branch=main
в --operator-params.
Совет
Вы можете создать конфигурацию на портале Azure, используя вкладку GitOps для ресурса Kubernetes с поддержкой Azure Arc.
Проверка конфигурации
Проверка успешного создания конфигурации выполняется с помощью Azure CLI.
az k8s-configuration show --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters
Для ресурса конфигурации будут обновлены состояние соответствия, сообщения и сведения об отладке.
{
"complianceStatus": {
"complianceState": "Installed",
"lastConfigApplied": "2020-12-10T18:26:52.801000+00:00",
"message": "...",
"messageLevel": "Information"
},
"configurationProtectedSettings": {},
"enableHelmOperator": false,
"helmOperatorProperties": {
"chartValues": "",
"chartVersion": ""
},
"id": "/subscriptions/<sub id>/resourceGroups/AzureArcTest/providers/Microsoft.Kubernetes/connectedClusters/AzureArcTest1/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
"name": "cluster-config",
"operatorInstanceName": "cluster-config",
"operatorNamespace": "cluster-config",
"operatorParams": "--git-readonly",
"operatorScope": "cluster",
"operatorType": "Flux",
"provisioningState": "Succeeded",
"repositoryPublicKey": "...",
"repositoryUrl": "git://github.com/Azure/arc-k8s-demo.git",
"resourceGroup": "AzureArcTest",
"sshKnownHostsContents": null,
"systemData": {
"createdAt": "2020-12-01T03:58:56.175674+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2020-12-10T18:30:56.881219+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
}
При создании или обновлении конфигурации происходит следующее.
- Azure Arc
config-agent
проверяет наличие новых или обновленных конфигураций в Azure Resource Manager (Microsoft.KubernetesConfiguration/sourceControlConfigurations
) и обнаруживает новую конфигурациюPending
. config-agent
считывает свойства конфигурации и создает целевое пространство имен.- Служба Azure Arc
controller-manager
создает учетную запись службы Kubernetes и сопоставляет ее с ClusterRoleBinding или RoleBinding для соответствующих разрешений (областьcluster
илиnamespace
). Затем она развертывает экземплярflux
. - При использовании варианта SSH с ключами, созданными Flux,
flux
создает ключ SSH и записывает открытый ключ в журнал. config-agent
возвращает сведения о состоянии в ресурс конфигурации в Azure.
В ходе подготовки состояние ресурса конфигурации будет несколько раз меняться. Отслеживайте ход выполнения с помощью приведенной выше команды az k8s-configuration show ...
:
Изменение состояния | Description |
---|---|
complianceStatus ->Pending |
Представляет исходное состояние и состояние хода выполнения. |
complianceStatus ->Installed |
config-agent удалось настроить кластер и развернуть flux без ошибок. |
complianceStatus ->Failed |
У config-agent возникла ошибка при развертывании flux . Подробные сведения приведены в тексте ответа complianceStatus.message . |
Применение конфигурации из частного репозитория Git
Если вы используете частный репозиторий Git, нужно настроить открытый ключ SSH в репозитории. Открытый ключ SSH вы можете предоставить самостоятельно, или его создаст Flux. Открытый ключ можно настроить для определенного репозитория Git или для пользователе Git, который имеет доступ к нужному репозиторию.
Получение собственного открытого ключа
Если вы создали собственные ключи SSH, значит у вас уже есть закрытый и открытый ключи.
Получение открытого ключа с помощью Azure CLI
Используйте следующую команду в Azure CLI, если ключи будет создавать Flux.
az k8s-configuration show --resource-group <resource group name> --cluster-name <connected cluster name> --name <configuration name> --cluster-type connectedClusters --query 'repositoryPublicKey'
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAREDACTED"
Получение открытого ключа на портале Azure
Выполните следующие шаги на портале Azure, если ключи будет создавать Flux.
- На портале Azure перейдите к подключенному кластерному ресурсу.
- На странице ресурсов выберите GitOps и просмотрите список конфигураций для этого кластера.
- Выберите конфигурацию, которая использует частный репозиторий Git.
- В открывшемся окне контекста в нижней части окна скопируйте открытый ключ репозитория.
Добавление открытого ключа с помощью GitHub
Используйте один из следующих методов.
Вариант 1. Добавьте открытый ключ в учетную запись пользователя (применяется ко всем репозиториям в учетной записи).
- Откройте GitHub и щелкните значок профиля в правом верхнем углу страницы.
- Щелкните Параметры.
- Щелкните SSH and GPG keys (Ключи SSH и GPG).
- Щелкните New SSH key (Новый ключ SSH).
- Укажите заголовок.
- Вставьте открытый ключ без кавычек.
- Щелкните Add SSH key (Добавить ключ SSH).
Вариант 2. Добавьте открытый ключ в качестве ключа развертывания в репозиторий Git (применяется только к этому репозиторию).
- Откройте GitHub и перейдите в свой репозиторий.
- Щелкните Параметры.
- Щелкните Deploy keys (Ключи развертывания).
- Щелкните Add deploy key (Добавить ключ развертывания).
- Укажите заголовок.
- Поставьте флажок Allow write access (Разрешить доступ на запись).
- Вставьте открытый ключ без кавычек.
- Щелкните Add New (Добавить новый).
Добавление открытого ключа с помощью репозитория Azure DevOps
Чтобы добавить ключ в список ключей SSH, сделайте следующее.
- В разделе User Settings (Параметры пользователя) в правом верхнем углу (рядом с изображением профиля) щелкните SSH public keys (Открытые ключи SSH).
- Щелкните + Создать ключ.
- Укажите имя.
- Вставьте открытый ключ без кавычек.
- Нажмите кнопку Добавить.
Проверка конфигурации Kubernetes
Когда config-agent
установит экземпляр flux
, сохраненные в репозитории Git ресурсы станут доступными для кластера. С помощью следующей команды убедитесь, что пространства имен, развертывания и ресурсы успешно созданы.
kubectl get ns --show-labels
NAME STATUS AGE LABELS
azure-arc Active 24h <none>
cluster-config Active 177m <none>
default Active 29h <none>
itops Active 177m fluxcd.io/sync-gc-mark=sha256.9oYk8yEsRwWkR09n8eJCRNafckASgghAsUWgXWEQ9es,name=itops
kube-node-lease Active 29h <none>
kube-public Active 29h <none>
kube-system Active 29h <none>
team-a Active 177m fluxcd.io/sync-gc-mark=sha256.CS5boSi8kg_vyxfAeu7Das5harSy1i0gc2fodD7YDqA,name=team-a
team-b Active 177m fluxcd.io/sync-gc-mark=sha256.vF36thDIFnDDI2VEttBp5jgdxvEuaLmm7yT_cuA2UEw,name=team-b
Мы видим, что пространства имен team-a
, team-b
, itops
и cluster-config
созданы.
Оператор flux
был развернут в пространство имен cluster-config
, как указано в ресурсе конфигурации:
kubectl -n cluster-config get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
cluster-config 1/1 1 1 3h flux docker.io/fluxcd/flux:1.16.0 instanceName=cluster-config,name=flux
memcached 1/1 1 1 3h memcached memcached:1.5.15 name=memcached
Дальнейшее исследование
Вы можете изучить другие ресурсы, развернутые в составе репозитория конфигурации, сделав следующее.
kubectl -n team-a get cm -o yaml
kubectl -n itops get all
Очистка ресурсов
Удалите конфигурацию с помощью Azure CLI или портала Azure. После выполнения команды удаления ресурс конфигурации будет сразу же удален из Azure. Полное удаление связанных объектов из кластера должно произойти в течение 10 минут. Если на момент удаления конфигурация находится в состоянии сбоя, полное удаление связанных объектов может занять до часа.
Когда удаляется конфигурация с областью действия namespace
, Azure Arc не удаляет соответствующее пространство имен, чтобы предотвратить нарушение работы существующих рабочих нагрузок. При необходимости это пространство имен можно удалить вручную с помощью kubectl
.
az k8s-configuration delete --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters
Примечание.
Никакие изменения в кластере, произошедшие в результате развертываний из отслеживаемого репозитория Git, не удаляются при удалении конфигурации.
Внимание
Это руководство предназначено для GitOps с Flux версии 1. GitOps с Flux версии 2 теперь доступен для кластеров Kubernetes с поддержкой Azure Arc и Служба Azure Kubernetes (AKS); Перейдите к руководству по GitOps с Flux версии 2. Мы рекомендуем перейти на Flux версии 2 как можно скорее.
Поддержка ресурсов конфигурации кластера flux версии 1, созданных до 1 января 2024 г., завершится 24 мая 2025 г. Начиная с 1 января 2024 г. вы не сможете создавать новые ресурсы конфигурации кластера Flux версии 1.
Следующие шаги
Перейдите к следующему учебнику, чтобы узнать, как реализовать непрерывную поставку и непрерывную интеграцию с помощью GitOps.