Megosztás a következőn keresztül:


Kubernetes-erőforrás-propagálás a központi fürtről tagfürtökre

Ez a cikk a Kubernetes-erőforrások központi fürtökről tagfürtökre történő propagálásának fogalmát ismerteti az Azure Kubernetes Fleet Manager (Fleet) használatával.

A platform rendszergazdáinak gyakran több fürtön kell üzembe helyeznie a Kubernetes-erőforrásokat, például:

  • Hozzáférés-vezérlés kezelése szerepkörök és szerepkörkötések használatával több fürtben.
  • Olyan infrastruktúra-alkalmazásokat kell futtatnia, mint a Prometheus vagy a Flux, amelyeknek az összes fürtön kell lenniük.

Az alkalmazásfejlesztőknek gyakran több fürtön kell üzembe helyeznie a Kubernetes-erőforrásokat, például:

  • Egy alkalmazást kiszolgáló videó üzembe helyezése több különböző régióban lévő fürtön az alacsony késésű figyelési élmény érdekében.
  • Bevásárlókocsi-alkalmazás üzembe helyezése két párosított régióban, hogy az ügyfelek továbbra is vásároljanak egyetlen régió leállása során.
  • Kötegelt számítási alkalmazás üzembe helyezése olyan fürtökbe, ahol olcsó kihasználatlan csomópontkészletek érhetők el.

Nehéz manuálisan létrehozni, frissíteni és nyomon követni ezeket a Kubernetes-erőforrásokat több fürtben. A Fleet kubernetes-erőforrás-propagálást biztosít a Kubernetes-erőforrások nagy léptékű felügyeletének engedélyezéséhez. A Fleet használatával kubernetes-erőforrásokat hozhat létre a központi fürtben, és a Kubernetes egyéni erőforrásaival propagálhatja őket a kiválasztott tagfürtökre: MemberCluster és ClusterResourcePlacement. A Fleet ezeket az egyéni erőforrásokat egy nyílt forráskódú, natív felhőbeli többfürtes megoldás alapján támogatja. További információkért tekintse meg az upstream Fleet dokumentációját.

Fontos

Az Azure Kubernetes Fleet Manager előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az Azure Kubernetes Fleet Manager előzetes verzióit részben az ügyfélszolgálat fedezi a legjobb munkamennyiség alapján. Ezért ezek a funkciók nem éles használatra vannak szánva.

Erőforrás-propagálási munkafolyamat

Diagram, amely bemutatja, hogyan propagálja a Kubernetes-erőforrást a tagfürtökre.

Mi az a MemberCluster?

Ha egy fürt csatlakozik egy flottához, létrejön egy megfelelő MemberCluster egyéni erőforrás a központi fürtön. Ezzel az egyéni erőforrás használatával kiválaszthatja a célfürtöket az erőforrás-propagálásban.

A következő címkék használhatók a célfürt kiválasztásához az erőforrás-propagálásban, és automatikusan hozzáadódnak az összes tagfürthöz:

  • fleet.azure.com/location
  • fleet.azure.com/resource-group
  • fleet.azure.com/subscription-id

További információ: MemberCluster API-referencia.

Mi az a ClusterResourcePlacement?

Az ClusterResourcePlacement objektumokkal tudathatja a Flottaütemezővel, hogyan helyezhet el egy adott fürthatókörű objektumkészletet a központi fürtből tagfürtökbe. A névtér hatókörrel rendelkező objektumok, például az üzembe helyezések, a StatefulSets, a DaemonSets, a Config Térképek, a Titkos kulcsok és a PersistentVolumeClaims a névtér kijelölésekor jelennek meg.

A következőkkel ClusterResourcePlacement:

  • Válassza ki, hogy mely fürt hatókörű Kubernetes-erőforrásokat propagálja a tagfürtökre.
  • Adja meg az elhelyezési szabályzatokat, amelyek manuálisan vagy automatikusan kijelölnek egy részhalmazt vagy az összes tagfürtöt célfürtként.
  • A kijelölt Kubernetes-erőforrások frissítéseinek biztonságos bevezetéséhez adjon meg bevezetési stratégiákat több célfürtre.
  • Az egyes célfürtök felé irányuló propagálási folyamat megtekintése.

Az ClusterResourcePlacement objektum támogatja a ConfigMap használatát az objektum burkolózásához, hogy a nem kívánt mellékhatások nélkül propagálja a tagfürtökre. A kiválasztási módszerek a következők:

  • Csoportosítás, verzió és típus: Jelölje ki és helyezze el az adott típusú összes erőforrást.
  • Csoport, verzió, típus és név: Válasszon ki és helyezzen el egy adott típusú erőforrást.
  • Csoportosítás, verzió, típus és címkék: Jelölje ki és helyezze el az adott típusú összes erőforrást, amely megfelel a megadott címkéknek.

További információ: API-referenciaClusterResourcePlacement.

A létrehozáskor a ClusterResourcePlacementkövetkező affinitási típusok adhatók meg:

  • requiredDuringSchedulingIgnoredDuringExecution: Mivel ez az affinitás az ütemezés során szükséges típus, a tulajdonságok alapján szűri a fürtöket.
  • preferredDuringSchedulingIgnoredDuringExecution: Mivel ez az affinitás csak az előnyben részesített típushoz tartozik, de az ütemezés során nem szükséges, kedvezményes rangsorolást biztosít a fürtök számára az Ön által megadott tulajdonságok, például a költségek vagy az erőforrások rendelkezésre állása alapján.

Több elhelyezési típus is rendelkezésre áll azon fürtök számának szabályozásához, amelyekre a Kubernetes-erőforrást propagálja:

  • PickAll az erőforrásokat az összes elérhető tagfürtbe helyezi. Ez a szabályzat olyan infrastruktúra-számítási feladatok elhelyezéséhez hasznos, mint a fürtfigyelés vagy a jelentéskészítési alkalmazások.
  • PickFixed az erőforrásokat név szerint a tagfürtök adott listájába helyezi.
  • PickN a legrugalmasabb elhelyezési lehetőség, amely lehetővé teszi a fürtök kiválasztását affinitási vagy topológiai eloszlási korlátozások alapján, és akkor hasznos, ha a számítási feladatokat több megfelelő fürt között terjeszti a rendelkezésre állás biztosítása érdekében.

PickAll elhelyezési szabályzat

Elhelyezési szabályzattal PickAll üzembe helyezhet egy számítási feladatot a flotta összes tagfürtjén (opcionálisan megfelel egy feltételkészletnek).

Az alábbi példa bemutatja, hogyan helyezhet üzembe egy test-deployment névteret és annak összes objektumát a következő címkével environment: productionellátott fürtökön:

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
  name: crp-1
spec:
  policy:
    placementType: PickAll
    affinity:
        clusterAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
                clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                        environment: production
  resourceSelectors:
    - group: ""
      kind: Namespace
      name: prod-deployment
      version: v1

Ez az egyszerű szabályzat felveszi a névteret és a test-deployment benne található összes erőforrást, és üzembe helyezi azt a flotta összes tagfürtjén a megadott environment címkével. Ha minden fürtre szükség van, teljesen eltávolíthatja a affinity kifejezést.

PickFixed elhelyezési szabályzat

Ha egy számítási feladatot szeretne üzembe helyezni egy ismert tagfürtben, egy elhelyezési szabályzattal PickFixed név szerint választhatja ki a fürtöket.

Az alábbi példa bemutatja, hogyan helyezheti üzembe a névteret tagfürtökben test-deployment cluster1 , és cluster2hogyan:

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
  name: crp-2
spec:
  policy:
    placementType: PickFixed
    clusterNames:
    - cluster1
    - cluster2
  resourceSelectors:
    - group: ""
      kind: Namespace
      name: test-deployment
      version: v1

PickN elhelyezési szabályzat

Az PickN elhelyezési szabályzat a legrugalmasabb lehetőség, és lehetővé teszi az erőforrások konfigurálható számú fürtbe való elhelyezését az affinitások és a topológia eloszlási korlátai alapján.

PickN affinitásokkal

A podütemezéshez hasonló affinitásokat használ az PickN elhelyezési szabályzatokkal. Beállíthatja a szükséges és az előnyben részesített affinitásokat is. A szükséges affinitások megakadályozzák az olyan fürtök elhelyezését, amelyek nem felelnek meg a megadott affinitásoknak, és az előnyben részesített affinitások lehetővé teszik az érvényes fürtök készletének rendelését az elhelyezési döntés meghozatalakor.

Az alábbi példa bemutatja, hogyan helyezhet üzembe számítási feladatot három fürtben. Csak a critical-allowed: "true" címkével rendelkező fürtök érvényesek elhelyezési célok, és előnyben részesítik a címkével critical-level: 1rendelkező fürtöket:

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
  name: crp
spec:
  resourceSelectors:
    - ...
  policy:
    placementType: PickN
    numberOfClusters: 3
    affinity:
        clusterAffinity:
            preferredDuringSchedulingIgnoredDuringExecution:
              weight: 20
              preference:
              - labelSelector:
                  matchLabels:
                    critical-level: 1
            requiredDuringSchedulingIgnoredDuringExecution:
                clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                      critical-allowed: "true"

PickN topológiaeloszlással kapcsolatos korlátozások

Topológiaeloszlási korlátozások használatával kényszerítheti a fürtelhelyezések topológiahatárok közötti megosztását a rendelkezésre állási követelmények teljesítéséhez, például az elhelyezés régiók közötti felosztásához vagy frissítési körökhöz. A topológiapárokra vonatkozó korlátozásokat is konfigurálhatja, hogy megakadályozza az ütemezést, ha a kényszer nem teljesül (whenUnsatisfiable: DoNotSchedule) vagy a lehető legjobban ütemezhető (whenUnsatisfiable: ScheduleAnyway).

Az alábbi példa bemutatja, hogyan oszthat el egy adott erőforráskészletet több régióban, és hogyan kísérelheti meg a különböző frissítési napokkal rendelkező tagfürtök ütemezését:

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
  name: crp
spec:
  resourceSelectors:
    - ...
  policy:
    placementType: PickN
    topologySpreadConstraints:
    - maxSkew: 2
      topologyKey: region
      whenUnsatisfiable: DoNotSchedule
    - maxSkew: 2
      topologyKey: updateDay
      whenUnsatisfiable: ScheduleAnyway

További információkért tekintse meg a felsőbb rétegbeli topológia elterjedtségére vonatkozó korlátozások flottadokumentációját.

Frissítési stratégia

A Fleet egy gördülő frissítési stratégiát használ annak szabályozására, hogy a frissítések hogyan kerülnek bevezetésre több fürthelyre.

Az alábbi példa bemutatja, hogyan konfigurálhat egy gördülő frissítési stratégiát az alapértelmezett beállítások használatával:

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
  name: crp
spec:
  resourceSelectors:
    - ...
  policy:
    ...
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
      unavailablePeriodSeconds: 60

Az ütemező egymás után frissíti az egyes fürtöket, és legalább unavailablePeriodSeconds a fürtök között várakozik. A bevezetési állapot sikeresnek minősül, ha az összes erőforrás megfelelően lett alkalmazva a fürtre. A bevezetési állapot ellenőrzése nem kaszkádolt a gyermekerőforrásokra, például nem ellenőrzi, hogy az üzembe helyezés által létrehozott podok készen állnak-e.

További információkért tekintse meg a Fleet bevezetési stratégiájának dokumentációját.

Elhelyezés állapota

A Flottaütemező frissíti az objektumra ClusterResourcePlacement vonatkozó elhelyezési döntések részleteit és állapotát. Ezeket az információkat a kubectl describe crp <name> parancs használatával tekintheti meg. A kimenet a következő információkat tartalmazza:

  • Az elhelyezésre jelenleg érvényes feltételek, amelyek magukban foglalják, hogy az elhelyezés sikeresen befejeződött-e.
  • Az egyes tagfürtök elhelyezési állapotszakasza, amely az adott fürtre történő üzembe helyezés állapotát mutatja.

Az alábbi példa azt ClusterResourcePlacement mutatja be, hogy a névtér és a test test-1 ConfigMap két tagfürtre lett üzembe helyezve a használatával PickN. Az elhelyezés sikeresen befejeződött, és az erőforrásokat a fürtökbe és aks-member-2 a aks-member-1 fürtökbe helyezték.

Name:         crp-1
Namespace:
Labels:       <none>
Annotations:  <none>
API Version:  placement.kubernetes-fleet.io/v1beta1
Kind:         ClusterResourcePlacement
Metadata:
  ...
Spec:
  Policy:
    Number Of Clusters:  2
    Placement Type:      PickN
  Resource Selectors:
    Group:
    Kind:                  Namespace
    Name:                  test
    Version:               v1
  Revision History Limit:  10
Status:
  Conditions:
    Last Transition Time:  2023-11-10T08:14:52Z
    Message:               found all the clusters needed as specified by the scheduling policy
    Observed Generation:   5
    Reason:                SchedulingPolicyFulfilled
    Status:                True
    Type:                  ClusterResourcePlacementScheduled
    Last Transition Time:  2023-11-10T08:23:43Z
    Message:               All 2 cluster(s) are synchronized to the latest resources on the hub cluster
    Observed Generation:   5
    Reason:                SynchronizeSucceeded
    Status:                True
    Type:                  ClusterResourcePlacementSynchronized
    Last Transition Time:  2023-11-10T08:23:43Z
    Message:               Successfully applied resources to 2 member clusters
    Observed Generation:   5
    Reason:                ApplySucceeded
    Status:                True
    Type:                  ClusterResourcePlacementApplied
  Placement Statuses:
    Cluster Name:  aks-member-1
    Conditions:
      Last Transition Time:  2023-11-10T08:14:52Z
      Message:               Successfully scheduled resources for placement in aks-member-1 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   5
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2023-11-10T08:23:43Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   5
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2023-11-10T08:23:43Z
      Message:               Successfully applied resources
      Observed Generation:   5
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
    Cluster Name:            aks-member-2
    Conditions:
      Last Transition Time:  2023-11-10T08:14:52Z
      Message:               Successfully scheduled resources for placement in aks-member-2 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   5
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2023-11-10T08:23:43Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   5
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2023-11-10T08:23:43Z
      Message:               Successfully applied resources
      Observed Generation:   5
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
  Selected Resources:
    Kind:       Namespace
    Name:       test
    Version:    v1
    Kind:       ConfigMap
    Name:       test-1
    Namespace:  test
    Version:    v1
Events:
  Type    Reason                     Age                    From                                   Message
  ----    ------                     ----                   ----                                   -------
  Normal  PlacementScheduleSuccess   12m (x5 over 3d22h)    cluster-resource-placement-controller  Successfully scheduled the placement
  Normal  PlacementSyncSuccess       3m28s (x7 over 3d22h)  cluster-resource-placement-controller  Successfully synchronized the placement
  Normal  PlacementRolloutCompleted  3m28s (x7 over 3d22h)  cluster-resource-placement-controller  Resources have been applied to the selected clusters

Elhelyezési változások

A Flottaütemező rangsorolja a meglévő számítási feladatok elhelyezésének stabilitását. Ez a rangsor korlátozhatja a számítási feladatok eltávolítását és újraütemezését okozó módosítások számát. A következő forgatókönyvek okozhatnak elhelyezési módosításokat:

  • Az objektum elhelyezési szabályzatának módosítása kiválthatja a ClusterResourcePlacement számítási feladatok eltávolítását és átütemezését.
    • A vertikális felskálázási műveletek (más módosítások nélkül) numberOfClusters csak új fürtökre helyezik a számítási feladatokat, és nem érintik a meglévő elhelyezéseket.
  • Fürtmódosítások, beleértve a következőket:
    • Ha egy új fürt jogosulttá válik, elhelyezést válthat ki, ha megfelel az elhelyezési szabályzatnak, például egy szabályzatnak PickAll .
    • Az elhelyezéssel rendelkező fürtök eltávolítják a flottából az összes érintett számítási feladatot a többi elhelyezés befolyásolása nélkül.

Az erőforrás-módosítások (az erőforrások frissítése vagy az ResourceSelector objektum frissítése) fokozatosan jelennek meg a ClusterResourcePlacement meglévő elhelyezésekben, de nem váltják ki a számítási feladat átütemezését.

Toleranciák

ClusterResourcePlacement az objektumok támogatják az objektumra vonatkozó tűrések specifikációját ClusterResourcePlacement . Minden tolerációs objektum a következő mezőkből áll:

  • key: A tolerancia kulcsa.
  • value: A tolerancia értéke.
  • effect: A tolerancia hatása, például NoSchedule.
  • operator: A tűrés operátora, például Exists vagy Equal.

Minden tolerancia egy vagy több specifikus fertőzés tolerálására szolgál a ClusterResourcePlacement. Miután az egyiken MemberCluster minden fertőzést eltűrtek, az ütemező ezután propagálja az erőforrásokat a fürtre. A létrehozásuk után nem frissítheti és nem távolíthatja el a toleranciákat egy ClusterResourcePlacement objektumból.

További információkért tekintse meg az upstream Fleet dokumentációját.

A Fleet erőforrásfürt Kubernetes API-jának elérése

Ha olyan Azure Kubernetes Fleet Manager-erőforrást hozott létre, amely engedélyezve van a központi fürttel, központilag szabályozhatja az olyan forgatókönyveket, mint a Kubernetes objektumpropagálás. A Fleet-erőforrásfürt Kubernetes API-jának eléréséhez kövesse a Fleet-erőforrásfürt Kubernetes API-jának elérése az Azure Kubernetes Fleet Managerrel című témakörben leírt lépéseket.

Következő lépések

Kubernetes-erőforrás-propagálás beállítása központi fürtről tagfürtökre.