자습서: Flux v2와 함께 GitOps를 사용하여 애플리케이션 배포

이 자습서에서는 Kubernetes 클러스터에서 GitOps를 사용하는 방법을 설명합니다. Flux v2를 사용하는 GitOps는 Azure Arc 지원 Kubernetes 클러스터 또는 AKS(Azure Kubernetes Service) 클러스터에서 클러스터 확장으로 사용됩니다. microsoft.flux 클러스터 확장이 설치되면 Git 리포지토리 원본을 클러스터와 동기화하고 클러스터를 원하는 상태로 조정하는 하나 이상의 fluxConfigurations 리소스를 만들 수 있습니다. GitOps를 사용하면 Git 리포지토리를 클러스터 구성 및 애플리케이션 배포의 믿을 수 있는 원본으로 사용할 수 있습니다.

이 자습서에서는 한 kustomization이 다른 kustomization에 종속되도록 하는 방법을 알아볼 수 있도록 kustomization이 2개 있는 GitOps 구성 예제를 사용합니다. 시나리오에 따라 kustomization과 종속성을 필요한 만큼 추가할 수 있습니다.

자세히 살펴보기 전에 잠시 시간을 내어 Flux에서 GitOps가 개념적으로 작동하는 방식을 알아보세요.

이 자습서의 소스는 Git 리포지토리이지만, Flux도 Helm 리포지토리, 버킷 및 Azure Blob Storage와 같은 다른 공통 파일 소스를 지원합니다.

Bicep, ARM 템플릿 또는 Terraform AzAPI 공급자를 사용하여 Flux 구성을 만들 수도 있습니다. 자세한 내용은 Microsoft.KubernetesConfiguration fluxConfigurations를 참조하세요.

Important

microsoft.flux 확장의 주 버전 1.0.0이 릴리스되었습니다. 여기에는 다중 테넌트 기능이 포함됩니다. 이전 버전의 microsoft.flux 확장을 사용하는 기존 GitOps Flux v2 구성이 있는 경우 Azure CLI az k8s-extension create -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux --extension-type microsoft.flux -t <CLUSTER_TYPE>(Arc 클러스터에는 -t connectedClusters를 사용하고 AKS 클러스터에는 -t managedClusters 사용)을 사용하여 수동으로 최신 버전으로 업그레이드할 수 있습니다.

필수 조건

Flux v2와 함께 GitOps를 사용하여 애플리케이션을 배포하려면 다음이 필요합니다.

Azure Arc 지원 Kubernetes 클러스터

Azure Kubernetes Service 클러스터

  • 작동 중인 MSI 기반 AKS 클러스터

    Important

    microsoft.flux 확장은 SPN 기반 AKS 클러스터에서 작동하지 않으므로 SPN이 아닌 MSI로 AKS 클러스터를 만들어야 합니다. az aks create로 만들어진 새 AKS 클러스터의 경우 클러스터는 기본적으로 MSI 기반이 됩니다. 이미 생성된 SPN 기반 클러스터를 MSI로 변환해야 하는 경우 az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity를 실행합니다. 자세한 내용은 AKS에서 관리 ID 사용을 참조하세요.

  • Microsoft.ContainerService/managedClusters 리소스 종류에 대한 읽기 및 쓰기 권한.

두 클러스터 유형 모두에 공통

  • 다음과 같은 리소스 종류에 대한 읽기 및 쓰기 권한.

    • Microsoft.KubernetesConfiguration/extensions
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • Azure CLI 버전 2.15 이상 Azure CLI를 설치하거나 다음 명령을 사용하여 최신 버전으로 업데이트합니다.

    az version
    az upgrade
    
  • Kubernetes 명령줄 클라이언트 kubectl. Azure Cloud Shell을 사용하는 경우 kubectl이 이미 설치되어 있습니다.

    az aks install-cli 명령을 사용하여 kubectl을 로컬로 설치합니다.

    az aks install-cli
    
  • 다음 Azure 서비스 공급자 등록:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    등록은 비동기식 프로세스이며 10분 이내에 완료되어야 합니다. 등록 프로세스를 모니터링하려면 다음 명령을 실행합니다.

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

버전 및 지역 지원

GitOps는 현재 Azure Arc 지원 Kubernetes가 지원하는 모든 지역에서 지원됩니다. GitOps는 현재 AKS가 지원하는 지역의 하위 집합에서 지원됩니다. GitOps 서비스에 정기적으로 새로운 지원 지역이 추가되고 있습니다.

Flux v2 확장의 최신 버전과 이전 버전 두 개(N-2)가 지원됩니다. 일반적으로 최신 버전의 확장을 사용하는 것이 좋습니다.

네트워크 요구 사항

GitOps 에이전트가 작동하려면 포트 22(SSH) 또는 포트 443(HTTPS)의 리포지토리 원본에 대한 아웃바운드(송신) TCP가 필요합니다. 에이전트에 다음 아웃바운드 URL에 대한 액세스 권한도 필요합니다.

엔드포인트(DNS) Description
https://management.azure.com 에이전트가 Kubernetes 구성 서비스와 통신하는 데 필요합니다.
https://<region>.dp.kubernetesconfiguration.azure.com 에이전트가 상태를 푸시하고 구성 정보를 가져오기 위한 데이터 평면 엔드포인트. <region>(앞서 언급한 지원 지역)에 따라 다릅니다.
https://login.microsoftonline.com Azure Resource Manager 토큰을 가져오고 업데이트하는 데 필요합니다.
https://mcr.microsoft.com Flux 컨트롤러의 컨테이너 이미지를 가져오는 데 필요합니다.

CLI 확장 사용

최신 k8s-configurationk8s-extension CLI 확장 패키지를 설치합니다.

az extension add -n k8s-configuration
az extension add -n k8s-extension

이러한 패키지를 최신 버전으로 업데이트하려면 다음을 수행합니다.

az extension update -n k8s-configuration
az extension update -n k8s-extension

설치된 모든 Azure CLI 확장 및 버전 목록을 보려면 다음 명령을 사용합니다.

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.2.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     1.5.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.1.0

오류를 해결하는 데 도움이 되도록 Azure Arc 지원 Kubernetes 클러스터 대한 확장 문제 해결의 GitOps(Flux v2) 섹션을 참조하세요.

Flux 구성 적용

k8s-configuration Azure CLI 확장이나 Azure Portal을 사용하여 AKS 또는 Arc 지원 Kubernetes 클러스터에서 GitOps를 사용하도록 설정합니다. 데모의 경우 공용 gitops-flux2-kustomize-helm-mt 리포지토리를 사용합니다.

Important

데모 리포지토리는 이 자습서의 사용을 간소화하고 몇 가지 주요 원칙을 설명하도록 설계되었습니다. 최신 상태로 유지하기 위해 이 리포지토리는 때때로 버전 업그레이드에서 호환성이 손상되는 변경 내용을 가져올 수 있습니다. 이러한 변경 내용은 이 자습서의 새 애플리케이션에 영향을 주지 않으며, 삭제되지 않은 이전 자습서 애플리케이션에만 영향을 줍니다. 이러한 변경 내용을 처리하는 방법을 알아보려면 호환성이 손상되는 변경 고지 사항을 참조하세요.

아래 예제에서는 az k8s-configuration create 명령으로 다음 값과 설정을 사용하여 Flux 구성을 클러스터에 적용합니다.

  • 클러스터를 포함하는 리소스 그룹은 flux-demo-rg입니다.
  • Azure Arc 클러스터의 이름은 flux-demo-arc입니다.
  • 클러스터 형식은 Azure Arc(-t connectedClusters)이지만 이 예제는 AKS(-t managedClusters)에서도 작동합니다.
  • Flux 구성의 이름은 cluster-config입니다.
  • 구성 설치의 네임스페이스는 cluster-config입니다.
  • 공용 Git 리포지토리의 URL은 https://github.com/Azure/gitops-flux2-kustomize-helm-mt입니다.
  • Git 리포지토리 분기는 main입니다.
  • 구성의 범위는 cluster입니다. 이 범위는 운영자에게 클러스터 전체를 변경할 수 있는 권한을 부여합니다. 이 자습서에서 namespace 범위를 사용하려면 필요한 변경 작업을 참조하세요.
  • 두 kustomization의 이름을 infraapps로 지정합니다. 각각은 리포지토리의 경로와 연결됩니다.
  • apps kustomization은 infra kustomization에 종속됩니다. (infra kustomization은 apps kustomization이 실행되기 전에 완료되어야 합니다.)
  • 두 kustomization 모두에서 prune=true를 설정합니다. 이렇게 설정하면 Flux가 클러스터에 배포한 개체가 리포지토리에서 제거되거나 Flux 구성이나 kustomization이 삭제되면 이 개체는 정리됩니다.
az k8s-configuration flux create -g flux-demo-rg \
-c flux-demo-arc \
-n cluster-config \
--namespace cluster-config \
-t connectedClusters \
--scope cluster \
-u https://github.com/Azure/gitops-flux2-kustomize-helm-mt \
--branch main  \
--kustomization name=infra path=./infrastructure prune=true \
--kustomization name=apps path=./apps/staging prune=true dependsOn=\["infra"\]

microsoft.flux 확장은 클러스터에 설치됩니다(이전 GitOps 배포에서 아직 설치되지 않은 경우).

az k8s-configuration create 명령은 microsoft.flux 확장을 클러스터에 배포하고 구성을 만듭니다. 일부 시나리오에서는 구성 리소스를 만들기 전에 Flux 확장 인스턴스를 별도로 만들 수 있습니다. 이렇게 하려면 az k8s-extension create 명령을 사용하여 클러스터에서 확장 인스턴스를 만듭니다.

Flux 구성이 처음 설치될 때 조정이 아직 진행 중이어서 초기 규정 준수 상태가 Pending 또는 Non-compliant일 수 있습니다. 1분 정도 후에 구성을 다시 쿼리하여 최종 준수 상태를 확인합니다.

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

배포가 성공했는지 확인하려면 다음 명령을 실행합니다.

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

배포가 성공하면 다음 네임스페이스가 만들어집니다.

  • flux-system: Flux 확장 컨트롤러를 보관합니다.
  • cluster-config: Flux 구성 개체를 보관합니다.
  • nginx, podinfo, redis: Git 리포지토리의 매니페스트에 설명된 워크로드의 네임스페이스입니다.

네임스페이스를 확인하려면 다음 명령을 실행합니다.

kubectl get namespaces

flux-system 네임스페이스에는 Flux 확장 개체가 포함됩니다.

  • Azure Flux 컨트롤러: fluxconfig-agent, fluxconfig-controller
  • OSS Flux 컨트롤러: source-controller, kustomize-controller, helm-controller, notification-controller

Flux 에이전트 및 컨트롤러 Pod는 실행 중 상태여야 합니다. 다음 명령을 사용하여 이를 확인합니다.

kubectl get pods -n flux-system

NAME                                      READY   STATUS    RESTARTS   AGE
fluxconfig-agent-9554ffb65-jqm8g          2/2     Running   0          21m
fluxconfig-controller-9d99c54c8-nztg8     2/2     Running   0          21m
helm-controller-59cc74dbc5-77772          1/1     Running   0          21m
kustomize-controller-5fb7d7b9d5-cjdhx     1/1     Running   0          21m
notification-controller-7d45678bc-fvlvr   1/1     Running   0          21m
source-controller-df7dc97cd-4drh2         1/1     Running   0          21m

cluster-config 네임스페이스에 Flux 구성 개체가 있습니다.

kubectl get crds

NAME                                                   CREATED AT
alerts.notification.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
arccertificates.clusterconfig.azure.com                2022-03-28T21:45:19Z
azureclusteridentityrequests.clusterconfig.azure.com   2022-03-28T21:45:19Z
azureextensionidentities.clusterconfig.azure.com       2022-03-28T21:45:19Z
buckets.source.toolkit.fluxcd.io                       2022-04-06T17:15:48Z
connectedclusters.arc.azure.com                        2022-03-28T21:45:19Z
customlocationsettings.clusterconfig.azure.com         2022-03-28T21:45:19Z
extensionconfigs.clusterconfig.azure.com               2022-03-28T21:45:19Z
fluxconfigs.clusterconfig.azure.com                    2022-04-06T17:15:48Z
gitconfigs.clusterconfig.azure.com                     2022-03-28T21:45:19Z
gitrepositories.source.toolkit.fluxcd.io               2022-04-06T17:15:48Z
helmcharts.source.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmreleases.helm.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmrepositories.source.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imagepolicies.image.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
imagerepositories.image.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imageupdateautomations.image.toolkit.fluxcd.io         2022-04-06T17:15:48Z
kustomizations.kustomize.toolkit.fluxcd.io             2022-04-06T17:15:48Z
providers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
receivers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
volumesnapshotclasses.snapshot.storage.k8s.io          2022-03-28T21:06:12Z
volumesnapshotcontents.snapshot.storage.k8s.io         2022-03-28T21:06:12Z
volumesnapshots.snapshot.storage.k8s.io                2022-03-28T21:06:12Z
websites.extensions.example.com                        2022-03-30T23:42:32Z

다음 명령을 사용하여 구성의 다른 세부 정보를 확인합니다.

kubectl get fluxconfigs -A

NAMESPACE        NAME             SCOPE     URL                                                       PROVISION   AGE
cluster-config   cluster-config   cluster   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   Succeeded   44m
kubectl get gitrepositories -A

NAMESPACE        NAME             URL                                                       READY   STATUS                                                            AGE
cluster-config   cluster-config   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   True    Fetched revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   45m
kubectl get helmreleases -A

NAMESPACE        NAME      READY   STATUS                             AGE
cluster-config   nginx     True    Release reconciliation succeeded   66m
cluster-config   podinfo   True    Release reconciliation succeeded   66m
cluster-config   redis     True    Release reconciliation succeeded   66m
kubectl get kustomizations -A


NAMESPACE        NAME                   READY   STATUS                                                            AGE
cluster-config   cluster-config-apps    True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m
cluster-config   cluster-config-infra   True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m

워크로드는 Git 리포지토리의 매니페스트에서 배포됩니다.

kubectl get deploy -n nginx

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller                   1/1     1            1           67m
nginx-ingress-controller-default-backend   1/1     1            1           67m

kubectl get deploy -n podinfo

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
podinfo   1/1     1            1           68m

kubectl get all -n redis

NAME                 READY   STATUS    RESTARTS   AGE
pod/redis-master-0   1/1     Running   0          68m

NAME                     TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/redis-headless   ClusterIP   None          <none>        6379/TCP   68m
service/redis-master     ClusterIP   10.0.13.182   <none>        6379/TCP   68m

NAME                            READY   AGE
statefulset.apps/redis-master   1/1     68m

Flux 클러스터 확장을 통해 배포되는 컨트롤러 제어

시나리오에 따라 Flux 클러스터 확장을 통해 설치되는 Flux 컨트롤러를 변경해야 할 때가 있습니다.

source, helm, kustomizenotification Flux 컨트롤러는 기본적으로 설치됩니다. 새 컨테이너 이미지를 사용할 수 있을 때 Git 리포지토리를 업데이트하는 데 사용되는 image-automationimage-reflector 컨트롤러를 명시적으로 사용하도록 설정해야 합니다.

k8s-extension 명령을 사용하여 기본 옵션을 변경할 수 있습니다.

  • --config source-controller.enabled=<true/false>(기본값 true)
  • --config helm-controller.enabled=<true/false>(기본값 true)
  • --config kustomize-controller.enabled=<true/false>(기본값 true)
  • --config notification-controller.enabled=<true/false>(기본값 true)
  • --config image-automation-controller.enabled=<true/false>(기본값 false)
  • --config image-reflector-controller.enabled=<true/false>(기본값 false)

인스턴스에서 알림을 사용하지 않도록 설정하려면 notification-controller.enabledfalse로 설정하면 됩니다.

이 예제 명령은 image-reflectorimage-automation 컨트롤러를 설치합니다. Flux 구성을 처음 만들 때 Flux 확장이 자동으로 만들어진 경우 확장 이름은 flux가 됩니다.

az k8s-extension create -g <cluster_resource_group> -c <cluster_name> -t <connectedClusters or managedClusters or provisionedClusters> --name flux --extension-type microsoft.flux --config image-automation-controller.enabled=true image-reflector-controller.enabled=true

AKS 클러스터 인증 방법으로 Kubelet ID 사용

AKS 클러스터의 경우 사용할 인증 옵션 중 하나는 kubelet ID입니다. 기본적으로 AKS는 관리되는 리소스 그룹에 고유한 kubelet ID를 만듭니다. 원하는 경우 미리 생성된 kubelet 관리 ID를 사용할 수 있습니다. 이렇게 하려면 Flux 확장을 설치할 때 --config useKubeletIdentity=true 매개 변수를 추가합니다.

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config useKubeletIdentity=true

Red Hat OpenShift 온보딩 지침

Flux 컨트롤러는 클러스터에 Pod를 올바르게 프로비저닝하려면 루트가 아닌보안 컨텍스트 제약 조건이 필요합니다. 이러한 제약 조건은 microsoft.flux 확장을 온보딩하기 전에 클러스터에 추가해야 합니다.

NS="flux-system"
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:kustomize-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:helm-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:source-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:notification-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-automation-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-reflector-controller

Flux를 온보딩하는 OpenShift 지침에 대한 자세한 내용은 Flux 문서를 참조하세요.

매개 변수를 사용합니다.

Flux는 다양한 시나리오를 사용할 수 있도록 많은 매개 변수를 지원합니다. Flux가 지원하는 모든 매개 변수에 대한 설명은 공식 Flux 설명서를 참조하세요. Azure의 Flux는 아직 모든 매개 변수를 지원하지 않습니다. 필요한 매개 변수가 Azure 구현에서 누락되었다면 제보해주세요.

사용 가능한 매개 변수 및 사용 방법에 대한 자세한 내용은 GitOps(Flux v2) 지원 매개 변수를 참조하세요.

Flux Kustomize 컨트롤러를 사용하여 클러스터 구성 관리

Flux Kustomize 컨트롤러microsoft.flux 클러스터 확장의 일부로 설치됩니다. 이 컨트롤러는 Git 리포지토리에서 동기화된 Kubernetes 매니페스트를 사용하여 클러스터 구성 및 애플리케이션 배포를 선언적으로 관리할 수 있습니다. 이러한 Kubernetes 매니페스트는 필요에 따라 kustomize.yaml 파일을 포함할 수 있습니다.

자세한 사용 정보는 다음 리소스를 참조하세요.

Flux Helm 컨트롤러를 사용하여 Helm 차트 릴리스 관리

Flux Helm 컨트롤러는 microsoft.flux 클러스터 확장의 일부로 설치됩니다. 이 컨트롤러는 Git 리포지토리에서 유지 관리하는 Kubernetes 매니페스트를 사용하여 Helm 차트 릴리스를 선언적으로 관리할 수 있습니다.

자세한 사용 정보는 다음 리소스를 참조하세요.

Helm이 인덱스 파일을 처리하는 방법 때문에 Helm 차트 처리는 비용이 많이 드는 작업이며 메모리를 매우 많이 차지할 수 있습니다. 따라서 대량의 Helm 차트를 한꺼번에 조정하면 메모리 사용량이 급증하고 OOMKilled 오류가 발생할 수 있습니다. 기본적으로 컨트롤러는 메모리 제한을 1Gi로 설정하고 메모리 요청을 64Mi로 설정합니다. Helm 차트 조정 수가 많아서 이 제한과 요청을 높이려면 microsoft.flux 확장을 설치한 후 다음 명령을 실행합니다.

az k8s-extension update -g <resource-group> -c <cluster-name> -n flux -t connectedClusters --config source-controller.resources.limits.memory=2Gi source-controller.resources.requests.memory=300Mi

Helm 차트에 GitRepository 소스 사용

Helm 차트가 fluxConfigurations 리소스의 일부로 구성하는 GitRepository 소스에 저장되는 경우 다음 예제와 같이 HelmRelease.yaml 파일에 clusterconfig.azure.com/use-managed-source: "true"를 추가하여 구성된 소스를 Helm 차트의 소스로 사용해야 한다는 것을 나타낼 수 있습니다.

---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: somename
  namespace: somenamespace
  annotations:
    clusterconfig.azure.com/use-managed-source: "true"
spec:
  ...

이 주석을 사용하면 배포된 HelmRelease는 구성된 원본의 참조로 패치됩니다. 현재는 GitRepository 소스만 지원됩니다.

Helm 드리프트 검색

기본적으로 Helm 릴리스에 대한 드리프트 검색은 사용되도록 설정되어 있지 않습니다. microsoft.flux v1.7.5부터 다음 명령을 실행하여 Helm 드리프트 검색을 사용하도록 설정할 수 있습니다.

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.detectDrift=true 

Helm OOM 감시

microsoft.flux v1.7.5부터 Helm OOM 감시를 사용하도록 설정할 수 있습니다. 자세한 내용은 OOM 검색 근처에서 Helm 사용을 참조하세요.

잠재 수정 전략을 검토하고 이 기능을 사용하도록 설정할 때 필요에 따라 적용해야 합니다.

OOM 감시를 사용하도록 설정하려면 다음 명령을 실행합니다.

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.outOfMemoryWatch.enabled=true helm-controller.outOfMemoryWatch.memoryThreshold=70 helm-controller.outOfMemoryWatch.interval=700ms

memoryThresholdoutOfMemoryWatch 값을 지정하지 않으면 기본 메모리 임계값은 95%로 설정되고 메모리 사용률 확인 간격은 500ms로 설정됩니다.

AKS 클러스터의 워크로드 ID

microsoft.flux v1.8.0부터 워크로드 ID를 사용하도록 설정된 AKS 클러스터에서 Flux 구성을 만들 수 있습니다. 이렇게 하려면 다음 단계에 표시된 대로 Flux 확장을 수정합니다.

  1. 클러스터의 OIDC 발급자 URL을 검색합니다.

  2. 관리 ID를 만들고 클라이언트 ID를 기록해 둡니다.

  3. 다음 명령을 사용하여 클러스터에서 Flux 확장을 만듭니다.

    az k8s-extension create --resource-group <resource_group_name> --cluster-name <aks_cluster_name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config workloadIdentity.enable=true workloadIdentity.azureClientId=<user_assigned_client_id>
    
  4. 페더레이션 ID 자격 증명을 설정합니다. 예시:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"source-controller" --audience api://AzureADTokenExchange
    
    # For image-reflector controller if you plan to enable it during extension creation, it is not deployed by default
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-controller" --audience api://AzureADTokenExchange
    
  5. 워크로드 ID를 사용해야 하는 사용자 지정 리소스가 매니페스트에서 .spec.provider 값을 azure로 설정했는지 확인합니다. 예시:

    apiVersion: source.toolkit.fluxcd.io/v1beta2
    kind: HelmRepository
    metadata:
      name: acrrepo
    spec:
      interval: 10m0s
      type: <helm_repository_type>
      url: <helm_repository_link>
      provider: azure
    
  6. 원본 컨트롤러 또는 이미지 리플렉터 컨트롤러를 끌어오려는 리소스의 워크로드 ID에 대한 적절한 권한을 부여해야 합니다. 예를 들어 Azure Container Registry를 사용하는 경우에는 AcrPull 권한이 필요합니다.

Flux 구성 및 확장 삭제

다음 명령을 사용하여 Flux 구성과 Flux 확장 자체(원하는 경우)를 삭제합니다.

Flux 구성 삭제

다음 명령은 Azure의 fluxConfigurations 리소스와 클러스터의 Flux 구성 개체 모두 삭제합니다. Flux 구성은 원래 kustomization의 prune=true 매개 변수를 통해 생성되었으므로 Flux 구성이 제거되면 Git 리포지토리의 매니페스트를 기반으로 클러스터에 생성된 모든 개체가 제거됩니다. 그러나 이 명령은 Flux 확장 자체를 제거하지는 않습니다.

az k8s-configuration flux delete -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters --yes

Flux 클러스터 확장 삭제

Flux 확장을 삭제하면 Azure의 microsoft.flux 확장 리소스와 클러스터의 Flux 확장 개체 모두 제거됩니다.

Important

Flux 확장을 삭제하기 전에 클러스터의 모든 Flux 구성을 삭제해야 합니다. 먼저 Flux 구성을 삭제하지 않고 확장을 삭제하면 클러스터가 불안정한 상태로 남을 수 있습니다.

Flux 구성을 처음 만들 때 Flux 확장이 자동으로 생성되면 확장 이름은 flux가 됩니다.

az k8s-extension delete -g flux-demo-rg -c flux-demo-arc -n flux -t connectedClusters --yes

이러한 명령은 Azure Arc 지원 Kubernetes 클러스터에 적합한 -t connectedClusters를 사용합니다. AKS 클러스터에는 -t managedClusters를 대신 사용합니다.

다음 단계