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:
- A Kubernetes-erőforrásokat leíró YAML-formátumú jegyzékek (például névterek, titkos kódok, üzemelő példányok stb.)
- Helm-diagramok alkalmazások üzembe helyezéséhez
- Fájlok kustomizálása a környezetspecifikus változások leírásához
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 azHelmChart
egyéni erőforrást, és alkalmazza aHelmRelease
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ítettfluxConfigurations
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ásfluxConfigurations
esetében.fluxconfig-controller
: Figyeli azfluxconfigs.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
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
fluxConfigurations
erő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
fluxConfigurations
teljes é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 vagyBucket
hoz létreGitRepository
azFluxConfig
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.
GitOps privát hivatkozással
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 HelmRelease
parancsot, 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
- Az oktatóanyag segítségével megtudhatja, hogyan engedélyezheti a GitOpst az AKS-en vagy az Azure Arc-kompatibilis Kubernetes-fürtökön.
- További információ a CI/CD-munkafolyamatról a GitOps használatával.