Alkalmazástelepítések az AKS-hez készült GitOps (Flux v2) és az Azure Arc-kompatibilis Kubernetes használatával

Az Azure az Azure Kubernetes Service(AKS) és az Azure Arc-kompatibilis Kubernetes-fürtökkel működő GitOps használatával biztosít automatizált alkalmazástelepítési képességet. Az alkalmazások Kubernetes-fürtökön való üzembe helyezéséhez a GitOps bevezetésének fő előnyei a következők:

  • A fürtökön futó alkalmazások állapotának folyamatos láthatósága.
  • Az alkalmazásfejlesztési csapatok és az infrastruktúra-csapatok közötti aggodalmak elkülönítése. Az alkalmazáscsapatoknak nincs szükségük a Kubernetes-telepítésekkel kapcsolatos tapasztalatra. A platformmérnöki csapatok általában létrehoznak egy önkiszolgáló modellt az alkalmazáscsapatok számára, így nagyobb megbízhatósággal futtathatják az üzemelő példányokat.
  • Képes azonos állapotú fürtök ismételt létrehozására összeomlás vagy vertikális felskálázás esetén.

A GitOps használatával deklarálja a Kubernetes-fürtök kívánt állapotát a Git-adattárakban lévő fájlokban. A Git-adattárak a következő fájlokat tartalmazhatják:

Mivel ezek a fájlok egy Git-adattárban vannak tárolva, verziószámozottak, és a verziók közötti változások könnyen nyomon követhetők. A Kubernetes-vezérlők a fürtökben futnak, és folyamatosan egyeztetik a fürt állapotát a Git-adattárban deklarált kívánt állapottal. Ezek az operátorok lekérik a fájlokat a Git-adattárakból, és a kívánt állapotot alkalmazzák a fürtökre. Az operátorok folyamatosan biztosítják, hogy a fürt a kívánt állapotban maradjon.

Az Azure Arc-kompatibilis Kubernetes-en vagy az Azure Kubernetes Service-en futó GitOps a Fluxot, egy népszerű nyílt forráskódú eszközkészletet használja. A Flux támogatja a gyakori fájlforrásokat (Git és Helm-adattárak, gyűjtők, Azure Blob Storage) és sablontípusokat (YAML, Helm és Kustomize). A Flux többek között támogatja a több-bérlős és üzembehelyezési függőségek kezelését is.

A Flux közvetlenül a fürtön van üzembe helyezve, és az egyes fürtök vezérlősíkja logikailag el van választva. Ez jól méretezhető több száz és több ezer fürtre. A Flux tiszta lekéréses alapú GitOps-alkalmazástelepítéseket tesz lehetővé. A forrásadattárnak vagy bármely más fürtnek nincs szüksége a fürtökhöz való hozzáférésre.

Flux-fürtbővítmény

A GitOps egy Azure Arc-kompatibilis Kubernetes- vagy AKS-fürtben van engedélyezve fürtbővítmény-erőforráskéntMicrosoft.KubernetesConfiguration/extensions/microsoft.flux. A microsoft.flux bővítményt egy vagy több fluxConfigurations létrehozása előtt telepíteni kell a fürtön. A bővítmény automatikusan települ, amikor létrehozza az elsőt Microsoft.KubernetesConfiguration/fluxConfigurations egy fürtben, vagy manuálisan is telepítheti a portál, az Azure CLI (az k8s-extension create --extensionType=microsoft.flux), az ARM-sablon vagy a REST API használatával.

Vezérlők

Alapértelmezés szerint a microsoft.flux bővítmény telepíti a Flux-vezérlőket (Forrás, Kustomize, Helm, Notification) és a FluxConfig egyéni erőforrásdefiníciót (CRD) fluxconfig-agentés fluxconfig-controller. Igény szerint telepítheti a Flux image-automation és image-reflector a vezérlőket is, amelyek a Docker-rendszerképek frissítéséhez és beolvasásához nyújtanak funkciókat.

  • Flux forrásvezérlő: Figyeli az source.toolkit.fluxcd.io egyéni erőforrásokat. Kezeli a Git-adattárak, a Helm-adattárak, a gyűjtők és az Azure Blob Storage közötti szinkronizálást. Kezeli a privát Git-, Helm-adattárak és Azure Blob Storage-fiókok forrásával való engedélyezést. Egy tar archív fájlon keresztül jeleníti meg a forrás legújabb módosításait.

  • Flux Kustomize vezérlő: Figyeli az kustomization.toolkit.fluxcd.io egyéni erőforrásokat. Kustomize- vagy nyers YAML-fájlokat alkalmaz a forrásból a fürtre.

  • Flux Helm-vezérlő: Figyeli az helm.toolkit.fluxcd.io egyéni erőforrásokat. Lekéri a társított diagramot a Helm-adattár forrásából, amelyet a forrásvezérlő jelenít meg. Létrehozza az HelmChart egyéni erőforrást, és alkalmazza a HelmRelease megadott verziót, nevet és ügyfél által megadott értékeket a fürtre.

  • Flux notification controller: Figyeli az notification.toolkit.fluxcd.io egyéni erőforrásokat. Értesítéseket kap az összes Flux-vezérlőtől. Értesítések leküldése felhasználó által definiált webhook-végpontokra.

  • Flux egyéni erőforrásdefiníciók:

    • kustomizations.kustomize.toolkit.fluxcd.io
    • imagepolicies.image.toolkit.fluxcd.io
    • imagerepositories.image.toolkit.fluxcd.io
    • imageupdateautomations.image.toolkit.fluxcd.io
    • alerts.notification.toolkit.fluxcd.io
    • providers.notification.toolkit.fluxcd.io
    • receivers.notification.toolkit.fluxcd.io
    • buckets.source.toolkit.fluxcd.io
    • gitrepositories.source.toolkit.fluxcd.io
    • helmcharts.source.toolkit.fluxcd.io
    • helmrepositories.source.toolkit.fluxcd.io
    • helmreleases.helm.toolkit.fluxcd.io
    • fluxconfigs.clusterconfig.azure.com
  • FluxConfig CRD: Egyéni erőforrásdefiníció a Kubernetes-objektumokat definiáló FluxConfig egyéni erőforrásokhozfluxconfigs.clusterconfig.azure.com.

  • fluxconfig-agent: Felelős az Azure figyeléséért az új vagy frissített fluxConfigurations erőforrásokért, valamint a kapcsolódó Flux-konfiguráció elindításáért a fürtben. Emellett a fürt Flux-állapotváltozásainak az Azure-ba való visszaküldéséért is felelős minden erőforrás fluxConfigurations esetében.

  • fluxconfig-controller: Figyeli az fluxconfigs.clusterconfig.azure.com egyéni erőforrásokat, és a gitOps-gépek új vagy frissített konfigurációjával reagál a változásokra a fürtben.

Feljegyzés

A microsoft.flux bővítmény telepítve van a flux-system névtérben, és fürtszintű hatókörrel rendelkezik. Ezt a bővítményt nem lehet a névtér hatókörében telepíteni.

Flux-konfigurációk

Egy Flux-konfiguráció Azure Arc-kompatibilis Kubernetes- vagy AKS-fürtön való telepítését bemutató ábra.

Flux-konfigurációs erőforrásokat (Microsoft.KubernetesConfiguration/fluxConfigurations) hoz létre a fürt GitOps-felügyeletének engedélyezéséhez a Git-adattárakból, gyűjtőforrásokból vagy Az Azure Blob Storage-ból. Amikor létrehoz egy fluxConfigurations erőforrást, a paraméterekhez megadott értékek( például a cél Git-adattár) segítségével hozza létre és konfigurálja azokat a Kubernetes-objektumokat, amelyek engedélyezik a GitOps-folyamatot a fürtben. Az adatbiztonság érdekében az erőforrás-adatokat a fluxConfigurations fürtkonfigurációs szolgáltatás titkosítva tárolja egy Azure Cosmos DB-adatbázisban.

A fluxconfig-agent bővítményrel microsoft.flux telepített ügynökök és fluxconfig-controller ügynökök kezelik a GitOps konfigurációs folyamatát.

fluxconfig-agent felelős a következő feladatokért:

  • Lekérdezi a Kubernetes Configuration adatsík-szolgáltatását az új vagy frissített fluxConfigurations erőforrásokhoz.
  • Egyéni erőforrásokat hoz létre vagy frissít FluxConfig a fürtben a konfigurációs adatokkal.
  • Figyeli az FluxConfig egyéni erőforrásokat, és visszaküldi az állapotváltozásokat a társított Azure fluxConfiguration-erőforrásokba.

fluxconfig-controller felelős a következő feladatokért:

  • Figyeli a felügyelt fluxConfigurationserőforrás által létrehozott Flux egyéni erőforrások állapotfrissítéseit.
  • Létrehoz egy privát/nyilvános kulcspárt, amely a fluxConfigurationsteljes élettartamra vonatkozóan létezik. Ezt a kulcsot akkor használja a rendszer a hitelesítéshez, ha az URL-cím SSH-alapú, és ha a felhasználó nem adja meg a saját titkos kulcsát a konfiguráció létrehozásakor.
  • Egyéni hitelesítési titkos kulcsot hoz létre a felhasználó által megadott titkos kulcs/http basic-auth/known-hosts/no-auth adatok alapján.
  • Beállítja a szerepköralapú hozzáférés-vezérlést (kiépített szolgáltatásfiók, létrehozott/hozzárendelt szerepkörkötés, szerepkör létrehozása/hozzárendelése).
  • Egyéni és egyéni erőforrásokat Kustomization hoz létre vagy Bucket hoz létre GitRepository az FluxConfig egyéni erőforrás adataiból.

Az Azure-ban minden fluxConfigurations erőforrás egy Flux GitRepository - vagy Bucket egyéni erőforráshoz, valamint egy vagy több Kustomization egyéni erőforráshoz van társítva egy Kubernetes-fürtben. Erőforrás létrehozásakor fluxConfigurations meg kell adnia a forrás URL-címét (Git-adattár, gyűjtő vagy Azure Blob Storage) és a forrásban lévő szinkronizálási célt mindegyikhez Kustomization. Egyéni erőforrások közötti Kustomization függőségeket konfigurálhat az üzembehelyezési sorrend szabályozásához. Több névtér-hatókörű fluxConfigurations erőforrást is létrehozhat ugyanazon a fürtön különböző alkalmazásokhoz és alkalmazáscsoportokhoz.

Feljegyzés

Új fluxconfig-agent vagy frissített fluxConfiguration erőforrások monitorozása az Azure-ban. Az ügynöknek csatlakoznia kell az Azure-hoz ahhoz, hogy a fluxConfiguration fürtre alkalmazni kívánt állapot legyen alkalmazva. Ha az ügynök nem tud csatlakozni az Azure-hoz, a fürt módosításai megvárják, amíg az ügynök csatlakozni tud. Ha a fürt 48 óránál hosszabb ideig van leválasztva az Azure-ról, a fürtre irányuló kérés időtúllépést fog végrehajtani, és a módosításokat újra kell alkalmazni az Azure-ban.

A bizalmas ügyfélbemeneteket, például a titkos kulcsot és a jogkivonatot/jelszót kevesebb mint 48 órán keresztül tárolja a Kubernetes Configuration szolgáltatás. Ha ezen értékek bármelyikét frissíti az Azure-ban, győződjön meg arról, hogy a fürtök 48 órán belül csatlakoznak az Azure-hoz.

Az Azure Portalon figyelheti a Flux konfigurációs állapotát és megfelelőségét, vagy irányítópultokkal figyelheti az állapotot, a megfelelőséget, az erőforrás-felhasználást és az egyeztetési tevékenységeket. További információt a GitOps (Flux v2) állapotának és tevékenységének figyelése című témakörben talál.

Verziótámogatás

A Flux v2 bővítmény legújabb verziója (microsoft.flux) és az előző két verzió (N-2) támogatott. Általában azt javasoljuk, hogy a bővítmény legújabb verzióját használja. Az 1.7.0-s verziótól microsoft.flux kezdve az ARM64-alapú fürtök támogatottak.

Feljegyzés

Ha Flux v1-et használ, javasoljuk , hogy mihamarabb migráljon a Flux v2-re .

A 2024. január 1. előtt létrehozott Flux v1-alapú fürtkonfigurációs erőforrások támogatása 2025. május 24-én megszűnik. 2024. január 1-től kezdődően nem hozhat létre új Flux v1-alapú fürtkonfigurációs erőforrásokat.

Ha egy Azure Arc-kompatibilis Kubernetes-fürthöz hozzáadta a privát kapcsolat támogatását, a microsoft.flux bővítmény beépítetten működik az Azure-ba irányuló kommunikációval. A Git-adattárhoz, a Helm-adattárhoz vagy a Kubernetes-jegyzékek telepítéséhez szükséges egyéb végpontokhoz való kapcsolatokhoz ki kell telepítenie ezeket a végpontokat a tűzfal mögött, vagy fel kell sorolnia őket a tűzfalon, hogy a Flux-forrásvezérlő sikeresen elérhesse őket.

Adattárolási hely

Az Azure GitOps szolgáltatás (Azure Kubernetes Configuration Management) tárolja/dolgozza fel az ügyféladatokat. Alapértelmezés szerint az ügyféladatok replikálódnak a párosított régióba. Szingapúr, Kelet-Ázsia és Dél-Brazília régióiban minden ügyféladat tárolása és feldolgozása a régióban történik.

Flux-konfigurációk nagy léptékű alkalmazása

Mivel az Azure Resource Manager kezeli a konfigurációkat, automatizálhatja ugyanazt a konfigurációt az Összes Azure Kubernetes Service- és Azure Arc-kompatibilis Kubernetes-erőforrásban az Azure Policy használatával egy előfizetés vagy erőforráscsoport hatókörén belül. Ez a nagy léptékű kényszerítés biztosítja, hogy az egyes konfigurációk egységesen legyenek alkalmazva a fürtök teljes csoportjaira.

További információ: Alkalmazások egységes üzembe helyezése a Flux v2-konfigurációk és az Azure Policy használatával.

Paraméterek

A Flux v2 által az Azure-ban támogatott összes paraméter megtekintéséhez tekintse meg a dokumentációtaz k8s-configuration. Az Azure-implementáció jelenleg nem támogatja a Flux által támogatott összes paramétert.

Az elérhető paraméterekről és azok használatáról további információt a GitOps (Flux v2) által támogatott paraméterekben talál.

Több-bérlős üzemmód

A Flux v2 a 0.26-os verziótól kezdve támogatja a több-bérlős verziót. Ez a képesség integrálva van az Azure-beli Flux v2-be.

Feljegyzés

A több-bérlős funkcióhoz tudnia kell, hogy a jegyzékekben szerepel-e a HelmRelease, a Kustomization, az ImagePolicy vagy más objektumok névtérfüggetlen forrásneve, vagy ha 1.20.6-nál kisebb Kubernetes-verziót használ. Előkészítés:

  • Frissítsen a Kubernetes 1.20.6-os vagy újabb verziójára.
  • A Kubernetes-jegyzékekben győződjön meg arról, hogy mindegyik sourceRef a GitOps-konfigurációval azonos névtérben lévő objektumokra vonatkozik.
    • Ha időre van szüksége a jegyzékek frissítéséhez, kikapcsolhatja a több-bérlős bérletet. Azonban továbbra is frissítenie kell a Kubernetes-verziót.

Több-bérlős jegyzékek frissítése

Tegyük fel, hogy üzembe helyez egy fluxConfiguration kubernetes-fürtöt a cluster-config fürt hatókörével rendelkező névtérben. Konfigurálja a forrást az adattár szinkronizálására https://github.com/fluxcd/flux2-kustomize-helm-example . Ez ugyanaz a minta Git-adattár, amelyet az alkalmazások üzembe helyezése a GitOps és a Flux v2 oktatóanyag használatával használ.

Miután a Flux szinkronizálta az adattárat, üzembe helyezi a jegyzékekben (YAML-fájlokban) leírt erőforrásokat. A jegyzékek közül két leírást és HelmRepository objektumot ír leHelmRelease.

apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: nginx
  namespace: nginx
spec:
  releaseName: nginx-ingress-controller
  chart:
    spec:
      chart: nginx-ingress-controller
      sourceRef:
        kind: HelmRepository
        name: bitnami
        namespace: flux-system
      version: "5.6.14"
  interval: 1h0m0s
  install:
    remediation:
      retries: 3
  # Default values
  # https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
  values:
    service:
      type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
  name: bitnami
  namespace: flux-system
spec:
  interval: 30m
  url: https://charts.bitnami.com/bitnami

Alapértelmezés szerint a Flux-bővítmény a fluxConfigurations csak a névtérben üzembe helyezett szolgáltatásfiók megszemélyesítésével flux-applier helyezi üzembe a cluster-config szolgáltatást. A fenti jegyzékek használatával, ha a több-bérlős használat engedélyezve van, a rendszer letiltja azokat HelmRelease . Ennek az az oka, hogy a HelmRelease névtérben nginx van, de egy HelmRepository-ra hivatkozik a flux-system névtérben. Emellett a Flux helm-controller nem tudja alkalmazni a HelmReleaseparancsot, mert a névtérben nginx nincs flux-applier szolgáltatásfiók.

A több-bérlős működéshez a helyes módszer az, ha az összes Flux-objektumot ugyanabba a névtérbe helyezi, mint a fluxConfigurations. Ez a megközelítés elkerüli a névtérközi referenciaproblémát, és lehetővé teszi, hogy a Flux-vezérlők megkapják az objektumok alkalmazásához szükséges engedélyeket. Így a névtérben létrehozott GitOps-konfiguráció esetében ezek a cluster-config példajegyzékek az alábbiak szerint változnak:

apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: nginx
  namespace: cluster-config 
spec:
  releaseName: nginx-ingress-controller
  targetNamespace: nginx
  chart:
    spec:
      chart: nginx-ingress-controller
      sourceRef:
        kind: HelmRepository
        name: bitnami
        namespace: cluster-config
      version: "5.6.14"
  interval: 1h0m0s
  install:
    remediation:
      retries: 3
  # Default values
  # https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
  values:
    service:
      type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
  name: bitnami
  namespace: cluster-config
spec:
  interval: 30m
  url: https://charts.bitnami.com/bitnami

Több-bérlős kimaradás

A bővítmény telepítésekor a microsoft.flux több bérlős rendszer alapértelmezés szerint engedélyezve van. Ha le kell tiltania a több-bérlős bérlőt, letilthatja a microsoft.flux bővítmény fürtökben való létrehozásával vagy frissítésével --configuration-settings multiTenancy.enforce=false, ahogyan az alábbi példaparancsokban látható:

az k8s-extension create --extension-type microsoft.flux --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
az k8s-extension update --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>

Migrálás a Flux 1-ből

Ha továbbra is a Flux v1-et használja, javasoljuk, hogy mihamarabb migráljon a Flux v2-re.

Ha a Flux v2-t ugyanazon fürtökön szeretné használni, ahol a Flux v1-et használta, először törölnie kell az összes Flux v1-et sourceControlConfigurations a fürtökről. Mivel a Flux v2 alapvetően eltérő architektúrával rendelkezik, a microsoft.flux fürtbővítmény nem települ, ha a fürtben Flux v1-erőforrások sourceControlConfigurations találhatók. A Flux v1-konfigurációk eltávolításának és a Flux v2-konfigurációk üzembe helyezésének folyamata nem tart tovább 30 percnél.

A Flux v1 sourceControlConfigurations eltávolítása nem állítja le a fürtökön futó alkalmazásokat. A Flux v1-konfiguráció eltávolítása és a Flux v2-bővítmény még nem lett teljesen üzembe helyezve:

  • Ha a Git-adattárban tárolt alkalmazásjegyzékek új módosításokat tartalmaznak, a rendszer nem kéri le ezeket a módosításokat az áttelepítés során, és a fürtön üzembe helyezett alkalmazásverzió elavult lesz.
  • Ha a fürt állapota nem szándékos, és eltér a forrás Git-adattárban megadott kívánt állapottól, a fürt nem lesz képes öngyógyulni.

Javasoljuk, hogy az éles környezet migrálása előtt tesztelje a migrálási forgatókönyvet fejlesztési környezetben.

Flux v1-konfigurációk megtekintése és törlése

Az alábbi Azure CLI-parancsokkal megkeresheti és törölheti a fürtben meglévőt sourceControlConfigurations :

az k8s-configuration list --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
az k8s-configuration delete --name <configuration name> --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>

A fürtök meglévő GitOps-konfigurációit az Azure Portalon is megtalálhatja és törölheti. Ehhez lépjen arra a fürtre, ahol a konfiguráció létre lett hozva, és válassza a GitOps lehetőséget a bal oldali panelen. Válassza ki a konfigurációt, majd válassza a Törlés lehetőséget.

Flux v2-konfigurációk üzembe helyezése

Az Azure Portal vagy az Azure CLI használatával Flux v2-konfigurációkat alkalmazhat a fürtökre.

Flux v1- kivonási információk

A Flux v1 nyílt forráskódú projektjét archiválták, és a funkciófejlesztés határozatlan időre leállt.

A Flux v2 a Flux frissített nyílt forráskódú projektjeként indult el. Új architektúrával rendelkezik, és több GitOps-használati esetet támogat. A Microsoft 2022 májusában elindította egy bővítmény verzióját a Flux v2 használatával. Azóta azt tanácsolták az ügyfeleknek, hogy három éven belül térjenek át a Flux v2-re, mivel a Flux v1 használatának támogatása a tervek szerint 2025 májusában fejeződik be.

A Flux v2 GitOps bővítményében bevezetett legfontosabb új funkciók:

  • A Flux v1 egy monolitikus do-it-all operátor. A Flux v2 speciális vezérlőkre (forrásvezérlő, Kustomize vezérlő, Helm-vezérlő és Értesítésvezérlő) választja el a funkciókat.
  • Támogatja a több forrásadattárral való szinkronizálást.
  • Támogatja a több-bérlős működést, például az egyes forrásadattárak saját engedélykészlettel való alkalmazását.
  • Működési elemzéseket biztosít állapotellenőrzések, események és riasztások segítségével.
  • Támogatja a Git-ágakat, rögzíti a véglegesítéseket és a címkéket, és követi a SemVer-címketartományokat.
  • Hitelesítő adatok konfigurálása GitRepository-erőforrásonként: SSH titkos kulcs, HTTP/S felhasználónév/jelszó/jogkivonat és OpenPGP nyilvános kulcsok.

Következő lépések