Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op ✔️ Fleet Manager met hubcluster
Het beheren van Kubernetes-resources in meerdere clusters biedt aanzienlijke uitdagingen voor zowel platformbeheerders als toepassingsontwikkelaars. Naarmate organisaties hun Kubernetes-infrastructuur buiten één cluster schalen, hebben ze vaak te maken met complexe problemen met betrekking tot resourcedistributie, consistentie en handmatige beheeroverhead. De traditionele benadering van het onafhankelijk beheren van elk cluster creëert operationele silo's die steeds moeilijker te onderhouden worden naarmate de vloot groter wordt.
Platformbeheerders moeten Kubernetes-resources vaak om verschillende redenen implementeren op meerdere clusters, waaronder:
- Toegangsbeheer beheren met behulp van rollen en rolbindingen in meerdere clusters.
- Het uitvoeren van infrastructuurtoepassingen, zoals Prometheus of Flux, die zich op alle clusters moeten bevinden.
Toepassingsontwikkelaars moeten Kubernetes-resources vaak om verschillende redenen implementeren op meerdere clusters, bijvoorbeeld:
- Implementatie van een videoverstrekkende applicatie in meerdere clusters in verschillende regio's voor een kijkervaring met lage latentie.
- Het implementeren van een winkelwagentoepassing in twee gekoppelde regio's voor klanten om te blijven winkelen tijdens een storing in één regio.
- Een batch-rekentoepassing implementeren in clusters met goedkope spot-knooppuntgroepen die beschikbaar zijn.
Het is tijdrovend en mogelijk foutgevoelig om Kubernetes-resources handmatig te maken, bij te werken en bij te houden in meerdere clusters.
In dit artikel verkennen we hoe u de intelligente resourceplaatsingscapaciteit van Fleet Manager kunt gebruiken om de distributie van op clusters en naamruimtes afgebakende Kubernetes-resources te beheren over lidclusters in een vloot.
De capaciteiten voor resourceplaatsing van de Fleet Manager zijn gebaseerd op het KubeFleet CNCF-project.
Overzicht van het resourceplaatsingsproces
Volg deze stappen om gebruik te maken van de intelligente plaatsing van resources van Fleet Manager:
- Resources voorbereiden op het hubcluster: gebruik Continuous Deployment, GitOps of een vergelijkbare methode om de manifesten voor resourcedistributies toe te passen op het Fleet Manager-hubcluster.
- Een plaatsing voor een resource maken: maak een plaatsingsmanifest dat de resource selecteert en een beleid definieert om te bepalen welke lidclusters de resource ontvangen.
- Plaatsing van resources toepassen op het hubcluster: pas het plaatsingsmanifest toe op het hubcluster om de resource te distribueren.
- Fleet Manager plant middelen in: Fleet Manager bekijkt de plaatsing van de middelen en het geselecteerde bereik en verdeelt de middelen.
- Bekijk de distributie via resourceplaatsing: voer een query uit op de plaatsing van resources in het hubcluster om de status van de resource te controleren terwijl deze wordt uitgerold.
Fleet Manager heeft een Azure portalervaring voor resourceplaatsing die een meer visuele weergave van de implementatie biedt.
Inleiding tot plaatsing van clusterresources
Gebruik een ClusterResourcePlacement (CRP) om een bepaalde set clusterresources of volledige naamruimten van het Fleet Manager-hubcluster te distribueren naar een of meer lidclusters.
Belangrijkste kenmerken:
- Clusterbereik: selecteert resources of naamruimten met clusterbereik.
-
Declaratief: gebruikt hetzelfde plaatsingsbeleid als
ResourcePlacementvoor consistent gedrag.
Met CRP kunt u het volgende doen:
- Selecteer welke Kubernetes-resources u wilt distribueren. Deze resources kunnen Kubernetes-resources op clusterniveau zijn die zijn gedefinieerd met Kubernetes Group Version Kind (GVK)-verwijzingen, of een naamruimte, waarmee de naamruimte en alle bijbehorende resources worden gedistribueerd.
- Geef plaatsingsbeleid op om lidclusters te selecteren. Met dit beleid kunnen clusters expliciet op naam worden geselecteerd of dynamisch clusters worden geselecteerd op basis van clusterlabels en -eigenschappen.
- Geef implementatiestrategieën op om eventuele updates van de geselecteerde Kubernetes-resources veilig uit te rollen naar meerdere doelclusters.
- Bekijk de voortgang van de implementatie voor elk doelcluster.
Zie voor scenario's die nauwkeurige controle vereisen over afzonderlijke resources binnen een naamruimte binnen een naamruimte, de plaatsing van resources binnen een naamruimte, waardoor specifieke resources kunnen worden gedistribueerd in plaats van volledige naamruimten.
Introductie van resourceplaatsing binnen het bereik van een naamruimte
Gebruik een ResourcePlacement (RP) om een bepaalde set resources binnen een specifieke naamruimte van het Fleet Manager-hubcluster te distribueren naar een of meer lidclusters. ResourcePlacement biedt nauwkeurige controle over hoe specifieke resources binnen een naamruimte worden verdeeld over lidclusters.
Belangrijkste kenmerken:
-
Naamruimtebereik: zowel
ResourcePlacementals de resources die het selecteert, bestaan binnen dezelfde naamruimte. - Selectief: Selecteert specifieke resources in de naamruimte op type, naam of labels in plaats van volledige naamruimten.
-
Declaratief: gebruikt hetzelfde plaatsingsbeleid als
ClusterResourcePlacementvoor consistent gedrag.
Wanneer gebruikt u ResourcePlacement?
ResourcePlacement is ideaal voor scenario's waarvoor gedetailleerde controle over resources met naamruimtebereik is vereist:
- Selectieve resourcedistributie: implementeer specifieke ConfigMaps, Geheimen of Services zonder dat dit van invloed is op de hele naamruimte.
- Omgevingen met meerdere tenants: hiermee kunnen verschillende teams hun resources onafhankelijk beheren binnen gedeelde naamruimten.
- Configuratiebeheer: omgevingsspecifieke configuraties verdelen over verschillende clusteromgevingen.
- Naleving en governance: verschillende beleidsregels toepassen op verschillende resourcetypen binnen dezelfde naamruimte.
- Progressieve implementaties: Implementeer resource-updates veilig in clusters met behulp van strategieën voor nul downtime.
In omgevingen met meerdere clusters bestaan workloads vaak uit zowel resources met clusterbereik als resources met naamruimtebereik, die u over verschillende clusters moet verdelen. Hoewel ClusterResourcePlacement (CRP) effectief clusterbronnen verwerkt, worden ook volledige naamruimten en hun inhoud beheerd. Voor sommige scenario's is echter fijnmazigere controle vereist over resources met naamruimtebereik binnen bestaande naamruimten.
ResourcePlacement (RP) lost deze kloof op door het volgende te bieden:
- Resourcebeheer met naamruimtebereik: doelspecifieke resources binnen een naamruimte zonder dat dit van invloed is op de hele naamruimte.
- Operationele flexibiliteit: hiermee kunnen teams verschillende resources binnen dezelfde naamruimte onafhankelijk beheren.
- Aanvullende functionaliteit: werk samen met CRP om een volledige oplossing voor resourcebeheer voor meerdere clusters te bieden.
Opmerking
U kunt ResourcePlacement samen met ClusterResourcePlacement gebruiken in de modus Alleen-naamruimte. Gebruik bijvoorbeeld CRP om de naamruimte te implementeren en gebruik RP voor gedetailleerd beheer van specifieke resources, zoals omgevingsspecifieke ConfigMaps of Geheimen in die naamruimte.
Resourceplaatsingscomponenten
Een plaatsing van resources, ongeacht het bereik (cluster of naamruimte), bestaat uit de volgende onderdelen:
-
Resourceselectors: selecteer de resources die u via
resourceSelectorswilt opnemen. -
Plaatsingsbeleid: definieer hoe u clusters kiest met
placementTypebehulp van een van dePickAll,PickFixedofPickNtypen. -
Implementatiestrategie: bepalen hoe resources worden geïmplementeerd in geselecteerde clusters door een optionele optie op te
strategyslaan.
In dit voorbeeld van ClusterResourcePlacement (CRP) wordt de naamruimte my-app op alle clusters in de vloot geplaatst. Omdat u geen expliciete strategie hebt gedefinieerd, gebruikt het proces een RollingUpdate.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: namespace-only-crp
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: my-app
version: v1
policy:
placementType: PickAll
In dit voorbeeld plaatst ResourcePlacement (RP) de ConfigMap met label app=my-application in de naamruimte my-app in de overeenkomende naamruimte van de twee genoemde clusters. Omdat u geen expliciete strategie hebt gedefinieerd, gebruikt het proces een RollingUpdate.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
Hulpbronnenselectors
Selecteer resources met behulp van een of meer resourceSelectors binnen een plaatsing. Elke hulpbronselector kan het volgende opgeven:
- Groep, versie, soort (GVK): het type Kubernetes-resource dat u wilt selecteren.
- Naam: De naam van een specifieke resource.
- Labelkiezers: Labels die overeenkomen met meerdere resources.
Selectiebereik van naamruimte
Wanneer u plaatsing binnen het clusterbereik gebruikt om een volledige naamruimte te selecteren, gebruikt u het selectionScope veld om te bepalen of alle onderliggende resources in de naamruimte moeten worden opgenomen of om een lege naamruimte te plaatsen.
-
Standaardgedrag (wanneer
selectionScopeniet is opgegeven): distribueert de naamruimte en alle resources erin. -
NamespaceOnly: distribueert alleen de naamruimtebron, zonder bronnen binnen de naamruimte. Deze optie is handig als u naamruimten tussen clusters wilt instellen terwijl u afzonderlijke resources afzonderlijk beheert met behulp vanResourcePlacement.
In dit voorbeeld ziet u hoe u alleen de naamruimte zonder de inhoud ervan distribueert.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: namespace-only-crp
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: my-app
version: v1
selectionScope: NamespaceOnly
policy:
placementType: PickAll
Deze aanpak maakt een werkstroom mogelijk waarbij platformbeheerders ClusterResourcePlacement gebruiken om naamruimten tot stand te brengen, terwijl toepassingsteams ResourcePlacement gebruiken voor fijnmazige controle over specifieke resources binnen die naamruimten.
Plaatsingsbeleid
De resourceplaatsing van Fleet Manager ondersteunt de volgende typen plaatsingsbeleid voor het bepalen van de manier waarop clusters worden geselecteerd:
- PickFixed plaatst resources op lidclusters met behulp van hun clusternamen.
- PickAll plaatst resources op alle lidclusters of alle lidclusters die voldoen aan een criterium. Dit beleid is handig voor het plaatsen van infrastructuurworkloads, zoals clusterbewaking of rapportagetoepassingen.
- PickN is de meest flexibele plaatsingsoptie. Hiermee kunt u clusters selecteren op basis van beperkingen voor affiniteit of topologiespreiding. Gebruik dit beleid wanneer u workloads verspreidt over meerdere vergelijkbare clusters om ervoor te zorgen dat de beschikbaarheid behouden blijft.
Plaatsingstype PickFixed
Gebruik PickFixed deze optie om de clusters op naam te selecteren. Geef namen op in de clusterNames matrix.
In dit voorbeeld ziet u hoe u de test-deployment naamruimte distribueert naar lidclusters cluster1 en cluster2.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-fixed
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-deployment
version: v1
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
In dit voorbeeld plaatst ResourcePlacement (RP) de ConfigMap met label app: my-application in de naamruimte my-app in de overeenkomende naamruimte van de twee genoemde clusters.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
PickAll-plaatsingstype
Gebruik PickAll dit om resources te distribueren over alle lidclusters of alle clusters die voldoen aan een criterium dat u opgeeft.
Wanneer u dit type plaatsing maakt, geeft u de volgende clusteraffiniteitstypen op:
- requiredDuringSchedulingIgnoredDuringExecution: omdat dit beleid is vereist tijdens het plannen, worden de clusters gefilterd op basis van de opgegeven criteria.
In dit voorbeeld ziet u hoe u de prod-deployment-naamruimte en alle onderliggende resources over alle lidclusters met het environment: production-label distribueert.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pickall
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
environment: production
In dit voorbeeld plaatst ResourcePlacement (RP) de ConfigMap die in de naamruimte app: my-application is gelabeldmy-app, in de overeenkomende naamruimte op alle clusters met environment: productionhet label :
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickall
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
environment: production
PickN-plaatstype
Gebruik PickN dit om resources te distribueren naar een configureerbaar aantal clusters op basis van zowel affiniteiten als limieten voor topologiespreiding.
Wanneer u dit type plaatsing maakt, geeft u de volgende clusteraffiniteitstypen op:
- requiredDuringSchedulingIgnoredDuringExecution: omdat dit beleid is vereist tijdens het plannen, worden de clusters gefilterd op basis van de opgegeven criteria.
- preferredDuringSchedulingIgnoredDuringExecution: omdat dit beleid de voorkeur heeft, maar niet vereist tijdens het plannen, worden clusters gerangschikt op basis van opgegeven criteria.
U kunt zowel vereiste als voorkeuraffiniteit instellen. Vereiste affiniteiten voorkomen plaatsing in clusters die niet overeenkomen. Voorkeursaffiniteiten bieden rangschikking van overeenkomende clusters.
PickN met affiniteiten
Het gebruik van affiniteiten met een PickN plaatsingsbeleid werkt op dezelfde manier als het gebruik van affiniteiten bij de planning van pods op één Kubernetes-cluster.
In het volgende voorbeeld ziet u hoe u een resource implementeert in drie clusters. Alleen clusters met het critical-allowed: "true" label zijn geldige plaatsingsdoelen en de voorkeur wordt gegeven aan clusters met het label critical-level: 1:
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pickn-critical-preferences
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickN
numberOfClusters: 3
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
weight: 20
preference:
- labelSelector:
matchLabels:
critical-level: 1
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
critical-allowed: "true"
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickn-critical-preferences
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickN
numberOfClusters: 3
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
weight: 20
preference:
- labelSelector:
matchLabels:
critical-level: 1
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
critical-allowed: "true"
PickN met beperkingen voor topologiespreiding
Gebruik topologiespreidingsbeperkingen om plaatsingen binnen topologiegrenzen af te dwingen om te voldoen aan beschikbaarheidsvereisten.
U kunt het gedrag van beperkingen voor topologiespreiding configureren met behulp van de whenUnsatisfiable eigenschap:
- DoNotSchedule: als er niet aan de beperking kan worden voldaan, mislukt de plaatsingsaanvraag.
- ScheduleAnyway: als niet aan de voorwaarde kan worden voldaan, worden resources toch geplaatst.
In het volgende voorbeeld ziet u hoe u resources over meerdere Azure regio's kunt verdelen en probeert te plannen tussen lidclusters met verschillende updatedagen met behulp van een aangepast labelupdateDay.
Wanneer de Azure regiospreiding niet kan worden bereikt, mislukt de plaatsing. Als niet aan de updateDay beperking wordt voldaan, gebeurt de plaatsing nog steeds.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pickn-locations-updates
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickN
topologySpreadConstraints:
- maxSkew: 2
topologyKey: fleet.azure.com/location
whenUnsatisfiable: DoNotSchedule
- maxSkew: 2
topologyKey: updateDay
whenUnsatisfiable: ScheduleAnyway
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickn-locations-updates
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickN
topologySpreadConstraints:
- maxSkew: 2
topologyKey: fleet.azure.com/location
whenUnsatisfiable: DoNotSchedule
- maxSkew: 2
topologyKey: updateDay
whenUnsatisfiable: ScheduleAnyway
Zie de KubeFleet-documentatie over topologiespreidingsbeperkingen voor meer informatie.
Clusters selecteren met behulp van labels en eigenschappen
Fleet Manager intelligente plaatsing van resources biedt een reeks krachtige criteria die u kunt gebruiken om te bepalen hoe u clusters selecteert bij het gebruik van de plaatsingstypen PickN en PickAll. In deze sectie leert u hoe u deze opties kunt gebruiken om beleidsregels te bouwen die aan uw behoeften voldoen.
Opties voor plaatsingsbeleid
In de volgende tabel ziet u de beschikbare planningsbeleidsvelden voor elk plaatsingstype.
| Beleidsveld | PickFixed | PickAll | PickN |
|---|---|---|---|
placementType |
✅ | ✅ | ✅ |
affinity |
❌ | ✅ | ✅ |
clusterNames |
✅ | ❌ | ❌ |
numberOfClusters |
❌ | ❌ | ✅ |
topologySpreadConstraints |
❌ | ❌ | ✅ |
Ledenclusterlabels
U kunt de MemberCluster resource in het hubcluster labelen zoals elke Kubernetes-resource.
Daarnaast voegt Fleet Manager automatisch de volgende alleen-lezen-labels toe aan alle lidclusters.
| Label | Beschrijving |
|---|---|
| fleet.azure.com/location | Azure regio van het cluster (westus) |
| fleet.azure.com/resource-group | Azure resourcegroep van het cluster (rg_prodapps_01) |
| fleet.azure.com/subscription-id | Azure abonnements-id waarin het cluster zich bevindt. Opgemaakt als UUID/GUID. |
| fleet.azure.com/cluster-name | De naam van het cluster dat is gekoppeld aan de fleet-lidclusterresource. |
| fleet.azure.com/member-name | De naam van het Fleet Manager-lidcluster dat overeenkomt met het cluster. |
Clustereigenschappen
Gebruik de volgende eigenschappen als onderdeel van plaatsingsbeleid.
| Naam van propertie | Beschrijving |
|---|---|
| kubernetes-fleet.io/node-count | Beschikbare knooppunten in het lidcluster. |
| resources.kubernetes-fleet.io/total-cpu | Totaal aantal CPU-resource-eenheden van het cluster. |
| resources.kubernetes-fleet.io/allocatable-cpu | Toewijsbare CPU-resource-eenheden van het cluster. |
| resources.kubernetes-fleet.io/available-cpu | Beschikbare CPU-resource-eenheden van het cluster. |
| resources.kubernetes-fleet.io/total-memory | Totale geheugenresource-eenheid van de cluster. |
| resources.kubernetes-fleet.io/allocatable-memory | Alloceerbare geheugenbron-eenheden van het cluster. |
| resources.kubernetes-fleet.io/available-memory | Beschikbare geheugenresource-eenheden van het cluster. |
| kubernetes.azure.com/per-cpu-core-cost (kosten per CPU-kern) | De kosten per CPU-kern van het cluster. |
| kubernetes.azure.com/kosten-per-gb-geheugen | De kosten per GiB-geheugen van het cluster. |
| kubernetes.azure.com/vm-sizes/{vm-sku-name}/count | Het beschikbare aantal bestaande knooppunten van het type vm-sku-naam in het cluster*. Voorbeeld van vm-SKU-naam: NV16as_v4. * In voorbeeldweergave via de v1beta1 API. |
| kubernetes.azure.com/vm-sizes/{vm-sku-name}/capacity | Het aantal potentiële nieuwe knooppunten van het type vm-sku-naam in de Azure-regio van het cluster*. Voorbeeld van vm-SKU-naam: NV16as_v4. * In voorbeeldweergave via de v1beta1 API. |
Kubernetes-resource-eenheden vertegenwoordigen CPU- en geheugeneigenschappen. Zie Resource-eenheden in Kubernetes voor meer informatie.
Kosteneigenschappen zijn decimalen die een kosten per uur in Amerikaanse dollars vertegenwoordigen voor de Azure rekenkracht die knooppunten binnen het cluster gebruiken. Kosten zijn gebaseerd op Azure openbare prijzen.
Selectiekoppelingscriteria
Wanneer u clustereigenschappen in een beleidscriteria gebruikt, geeft u het volgende op:
Naam: Naam van de eigenschap, een van de eigenschappen die worden vermeld in eigenschappen in dit artikel.
Operator: Een operator die de voorwaarde uitdrukt tussen de beperking of gewenste waarde en de waargenomen waarde op het cluster. De volgende operators worden momenteel ondersteund:
-
Gt(Groter dan): de waargenomen waarde van een bepaalde eigenschap van een cluster moet groter zijn dan de waarde in de voorwaarde voordat deze kan worden gekozen voor de plaatsing van middelen. -
Ge(Groter dan of gelijk aan): de waargenomen waarde van een cluster voor de opgegeven eigenschap moet groter dan of gelijk aan de waarde in de voorwaarde zijn voordat deze kan worden gekozen voor resource-allocatie. -
Lt(Kleiner dan): de waargenomen waarde van de gegeven eigenschap van een cluster moet kleiner zijn dan de waarde in de voorwaarde voordat deze kan worden gekozen voor de plaatsing van resources. -
Le(Kleiner dan of gelijk aan): De waargenomen waarde van de gespecificeerde eigenschap van een cluster moet kleiner zijn dan of gelijk zijn aan de waarde in de voorwaarde, voordat deze voor de plaatsing van middelen kan worden geselecteerd. -
Eq(Gelijk aan): de waargenomen waarde van een cluster van de gegeven eigenschap moet gelijk zijn aan de waarde in de voorwaarde voordat deze kan worden gekozen voor resource-toewijzing. -
Ne(Niet gelijk aan): de waargenomen waarde van een cluster van de opgegeven eigenschap mag niet gelijk zijn aan de waarde in de voorwaarde voordat deze kan worden gekozen voor plaatsing van resources.
Als u de operator
Gt,Ge,Lt,Le,EqofNegebruikt, moet de lijst met waarden in de voorwaarde precies één waarde hebben.-
Waarden: Een lijst met waarden, die mogelijke waarden van de eigenschap zijn.
Fleet evalueert elk cluster op basis van de eigenschappen die u in de voorwaarde opgeeft. Als een cluster niet voldoet aan de voorwaarden die worden vermeld onder requiredDuringSchedulingIgnoredDuringExecution, sluit Fleet het cluster uit van de plaatsing van resources.
Opmerking
Als een lidcluster niet beschikt over de eigenschap uitgedrukt in de voorwaarde, mislukt de voorwaarde automatisch.
Hier volgt een voorbeeld van plaatsingsbeleid om alleen clusters met vijf of meer knooppunten te selecteren.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pickall-five-nodes
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- propertySelector:
matchExpressions:
- name: "kubernetes-fleet.io/node-count"
operator: Ge
values:
- "5"
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickall-five-nodes
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- propertySelector:
matchExpressions:
- name: "kubernetes-fleet.io/node-count"
operator: Ge
values:
- "5"
De werking van rangschikking van eigenschappen
Wanneer u gebruikt preferredDuringSchedulingIgnoredDuringExecution, rangschikt een eigenschapssorteerder alle clusters in de vloot op basis van hun waarden in oplopende of aflopende volgorde. De gewichten die worden gebruikt voor bestellen, worden berekend op basis van de waarde die u opgeeft.
Een eigenschapssorteerder bestaat uit:
- Naam: Naam van de clustereigenschap.
-
Sorteervolgorde: De sorteervolgorde kan
AscendingofDescendingzijn. Wanneer u volgorde gebruiktAscending, hebben lidclusters met lagere waargenomen waarden de voorkeur. Wanneer u volgorde gebruiktDescending, hebben lidclusters met een hogere waargenomen waarde de voorkeur.
Zie de KubeFleet-documentatie over planning op basis van eigenschappen voor meer informatie.
Implementatiestrategie configureren
Fleet Manager-resourceplaatsing gebruikt een standaardstrategie RollingUpdate om te bepalen hoe resources naar lidclusters worden gedistribueerd.
In het volgende voorbeeld wordt de plaatsing opeenvolgend naar elk lidcluster uitgerold, met een wachttijd van ten minste unavailablePeriodSeconds tussen de clusters.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pick-all-rolling
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
policy:
placementType: PickAll
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
unavailablePeriodSeconds: 60
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickall-rolling
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickAll
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
unavailablePeriodSeconds: 60
De implementatiestatus wordt als geslaagd beschouwd als alle resources correct worden toegepast op het cluster. Deze status geeft de status van onderliggende resources niet door en bevestigt dus niet dat pods die door een Deployment op een membercluster zijn gemaakt, gereed zijn.
Zie de documentatie over implementatiestrategieën voor meer informatie.
Toleranties gebruiken
U kunt memberclusters net als knooppunten in een cluster van een taint voorzien.
Resource-toewijzingen ondersteunen het gebruik van toleranties, waarbij elke tolerantie bestaat uit de volgende velden:
-
key: De sleutel van de tolerantie. -
value: De waarde van de tolerantie. -
effect: Het effect van de tolerantie, zoalsNoSchedule. -
operator: De operator van de tolerantie, zoalsExistsofEqual.
Elke tolerantie wordt gebruikt om een of meer specifieke tainten die op een MemberCluster zijn toegepast, te verdragen. Zodra alle taints zijn getolereerd, kan Fleet Manager resources verdelen naar het lidcluster.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: test-ns
spec:
policy:
placementType: PickAll
tolerations:
- key: app-team-a
operator: Exists
resourceSelectors:
- group: ""
kind: Namespace
name: test-ns
version: v1
revisionHistoryLimit: 10
strategy:
type: RollingUpdate
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp-pickall-rolling
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickAll
tolerations:
- key: app-team-a
operator: Exists
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
unavailablePeriodSeconds: 60
Zie de documentatie over toleranties voor meer informatie.
Omhulselbronnen gebruiken
Het Fleet Manager-hubcluster is ook een Kubernetes-cluster. U past eerst een resource toe die u wilt distribueren naar het hubcluster. Deze aanpak kan leiden tot:
Onbedoelde bijwerkingen: ValidatingWebhookConfigurations, MutatingWebhookConfigurations of Admission Controllers worden actief op het hubcluster en kunnen mogelijk hubclusterbewerkingen onderscheppen en beïnvloeden.
Beveiligingsrisico's: RBAC-resources (Roles, ClusterRoles, RoleBindings, ClusterRoleBindings) die bedoeld zijn voor memberclusters kunnen machtigingen op het hubcluster verlenen of beperken.
Resourcebeperkingen: ResourceQuotas, FlowSchema of LimitRanges die zijn gedefinieerd voor lidclusters, worden van kracht op het hubcluster.
Om onnodige bijwerkingen te voorkomen, biedt Fleet Manager aangepaste envelopresources (ClusterResourceEnvelope en ResourceEnvelope) om objecten te verpakken en deze potentiële problemen te voorkomen.
U past de envelopresource toe op het hubcluster, maar de resources die deze bevat, worden geëxtraheerd en toegepast wanneer ze lidclusters bereiken.
Zie de documentatie over envelopobjecten voor meer informatie.
Plaatsingsstatus bepalen
Fleet Manager-resourceplaatsing biedt twee manieren om de status weer te geven, afhankelijk van het toegangsniveau en de vereisten van uw hubcluster:
-
ClusterResourcePlacement-status: de plaatsingsstatus rechtstreeks op de clusterresource
ClusterResourcePlacementweergeven. Gebruik deze functie wanneer u machtigingen op clusterniveau hebt en de status moet weergeven voor elke plaatsing in de hele vloot.
-
ResourcePlacementstatus: de plaatsingsstatus rechtstreeks weergeven op de resource binnen het naamruimtebereik
ResourcePlacement. Gebruik deze functie wanneer u machtigingen op naamruimteniveau hebt en de status moet weergeven voor een plaatsing binnen het bereik van een naamruimte in de hele vloot.
ClusterResourcePlacement-status weergeven
U kunt deze informatie weergeven met behulp van de kubectl describe resourceplacement <rp-name> opdracht.
kubectl describe resourceplacement place-cmap-1
-
ClusterResourcePlacementStatus (preview): de plaatsingsstatus weergeven via een resource met een naamruimtebereik
ClusterResourcePlacementStatus. Gebruik deze resource wanneer gebruikers met naamruimtebereik de plaatsingsstatus moeten weergeven zonder machtigingen op clusterniveau te verlenen. Zie de sectie ClusterResourcePlacementStatus voor meer informatie.
Beide benaderingen bieden de volgende informatie:
- De voorwaarden die momenteel van toepassing zijn op de plaatsing, waaronder of de plaatsing succesvol is voltooid.
- Een sectie over de plaatsingsstatus voor elk lidcluster, waarin de implementatiestatus voor dat cluster wordt weergegeven.
ClusterResourcePlacement-status gebruiken
In het volgende voorbeeld ziet u de weergavestatus rechtstreeks vanuit een ClusterResourcePlacement die de test naamruimte en de test-1 ConfigMap in twee lidclusters heeft geïmplementeerd met behulp van PickN. De plaatsing is voltooid en de resources zijn in de aks-member-1 en aks-member-2 clusters geplaatst.
U kunt deze informatie weergeven met behulp van de kubectl describe clusterresourceplacement <crp-name> opdracht.
kubectl describe clusterresourceplacement crp-1
Name: crp-1
Namespace:
Labels: <none>
Annotations: <none>
API Version: placement.kubernetes-fleet.io/v1
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
ClusterResourcePlacementStatus-resource gebruiken (preview)
De ClusterResourcePlacementStatus resource is naamruimtegebonden en biedt de plaatsingsstatus voor een overeenkomend ClusterResourcePlacement object dat clustergebonden is. Met deze resource kunnen gebruikers van de naamruimte zonder rechten op clusterniveau de status lezen.
Belangrijk
De ClusterResourcePlacementStatus resource en StatusReportingScope het veld zijn beschikbaar in de placement.kubernetes-fleet.io/v1beta1 API-versie als preview-functie. Ze zijn niet beschikbaar in de placement.kubernetes-fleet.io/v1 API.
Als u deze benadering wilt gebruiken, configureert u deze ClusterResourcePlacement met statusReportingScope: NamespaceAccessible behulp van de v1beta1 API.
Wanneer u statusReportingScope instelt op NamespaceAccessible, kunt u slechts één naamruimteresourceselector opgeven en kunt u deze na het maken niet meer wijzigen.
ClusterResourcePlacementStatus configureren
Als u deze functie wilt gebruiken, geeft u de versie van de v1beta1-API op in uw ClusterResourcePlacement:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp-with-status-reporting
spec:
statusReportingScope: NamespaceAccessible
resourceSelectors:
- group: ""
kind: Namespace
name: my-app
version: v1
policy:
placementType: PickAll
ClusterResourcePlacementStatus weergeven
U kunt de status weergeven met behulp van de kubectl describe opdracht:
kubectl describe clusterresourceplacementstatuses.v1beta1.placement.kubernetes-fleet.io crp-with-status-reporting -n my-app
De uitvoer bevat dezelfde statusinformatie als de ClusterResourcePlacement maar is toegankelijk voor gebruikers met alleen machtigingen op naamruimteniveau.
Zie de documentatie over het begrijpen van het plaatsingsresultaat voor meer informatie.
Triggers voor plaatsingswijziging
De Fleet Manager-scheduler geeft prioriteit aan de stabiliteit van bestaande resourceplaatsingen. Deze prioriteit beperkt het aantal wijzigingen waarbij een resource wordt verwijderd en opnieuw wordt gepland.
In de volgende scenario's kunnen plaatsingswijzigingen worden geactiveerd:
- Wijzigingen in het plaatsingsbeleid voor resources (
ClusterResourcePlacementofResourcePlacement) kunnen verwijdering en herplanning van een resource activeren.- Uitschaalbewerkingen (waarbij alleen
numberOfClusterswordt verhoogd, zonder andere wijzigingen) plaatsen workloads alleen op nieuwe clusters en hebben geen invloed op bestaande plaatsingen.
- Uitschaalbewerkingen (waarbij alleen
- Wijzigingen in lidclusters, waaronder:
- Een nieuw lidcluster dat in aanmerking komt en voldoet aan het beleid voor plaatsing, bijvoorbeeld een beleid van het type
PickAll. - Het verwijderen van een lidcluster uit de vloot. Afhankelijk van het beleid probeert de planner alle betrokken resources op resterende clusters te plaatsen zonder dat dit van invloed is op bestaande plaatsingen.
- Een nieuw lidcluster dat in aanmerking komt en voldoet aan het beleid voor plaatsing, bijvoorbeeld een beleid van het type
Het bijwerken van de geselecteerde resources (bijvoorbeeld het wijzigen van een Deployment) of het bijwerken van de resourceSelector in een resourceplaatsing zorgt ervoor dat Fleet Manager bestaande plaatsingen geleidelijk uitrolt, maar geen herplanning van de resource activeert (dat wil zeggen: het wijzigen van de gekozen clusters).
Samenwerken met ResourcePlacement en ClusterResourcePlacement
Hoewel ClusterResourcePlacement ervan wordt uitgegaan dat naamruimten toepassingsgrenzen vertegenwoordigen, zijn praktijkgebruikspatronen vaak complexer. Organisaties gebruiken vaak naamruimten als teamgrenzen in plaats van toepassingsgrenzen, wat leidt tot verschillende uitdagingen die ResourcePlacement rechtstreeks worden aangepakt:
Naamruimten voor meerdere toepassingen: In veel organisaties bevat één naamruimte meerdere onafhankelijke toepassingen die eigendom zijn van hetzelfde team. Deze toepassingen kunnen het volgende hebben:
- Verschillende levenscyclusvereisten (de ene toepassing heeft mogelijk frequente updates nodig terwijl een andere toepassing stabiel blijft).
- Verschillende behoeften voor clusterplaatsing (ontwikkeling versus productietoepassingen).
- Onafhankelijke schaal- en resourcevereisten.
- Afzonderlijke nalevings- of governancevereisten.
Afzonderlijke planningsbeslissingen: voor veel workloads, met name AI/ML-taken, zijn afzonderlijke planningsbeslissingen vereist:
- AI-taken: Machine learning-workloads bestaan vaak uit kortstondige, resource-intensieve taken die moeten worden gepland op basis van beschikbaarheid van clusterresources, GPU-beschikbaarheid of gegevenslocatie.
- Batch workloads: Verschillende batchtaken binnen dezelfde naamruimte kunnen op basis van rekenvereisten verschillende clustertypen gebruiken.
Volledig beheer van toepassingsteam: ResourcePlacement biedt toepassingsteams directe controle over hun resourceplaatsing zonder tussenkomst van het platformteam:
- Zelfbedieningsoperaties: Teams kunnen hun eigen strategieën voor de toewijzing van middelen beheren.
- Onafhankelijke implementatiecycli: verschillende toepassingen binnen een naamruimte kunnen onafhankelijke implementatieschema's hebben.
- Granulaire overschrijfmogelijkheden: Teams kunnen resourceconfiguraties per cluster aanpassen zonder invloed te hebben op andere toepassingen in de namespace.
Deze gedetailleerde benadering zorgt ervoor dat ResourcePlacement deze zich kan aanpassen aan diverse organisatiestructuren en workloadpatronen, terwijl de eenvoud en kracht van het Fleet-planningsframework behouden blijft.
Belangrijkste verschillen tussen ResourcePlacement en ClusterResourcePlacement
In de volgende tabel worden de belangrijkste verschillen tussen ResourcePlacement en ClusterResourcePlacement:
| Aspect | ResourcePlacement (RP) | ClusterResourcePlacement (CRP) |
|---|---|---|
| Scope | Alleen resources met naamruimtebereik | Resources met clusterbereik (met name naamruimten en hun inhoud) |
| Resource | Api-object met naamruimtebereik | API-object met clusterbereik |
| Selectiegrens | Beperkt tot hulpbronnen binnen dezelfde naamruimte als de RP | Kan elk cluster-toegewezen resource selecteren |
| Typische gebruiksvoorbeelden | AI/ML-taken, afzonderlijke workloads, specifieke ConfigMaps/Geheimen waarvoor onafhankelijke plaatsingsbeslissingen nodig zijn | Toepassingsbundels, volledige naamruimten, clusterbrede beleidsregels |
| Teameigendom | Naamruimte-eigenaren en -ontwikkelaars | Platformoperators |
Beide ResourcePlacement en ClusterResourcePlacement delen dezelfde kernmogelijkheden voor alle andere aspecten die niet worden vermeld in de verschillentabel.
Voorbeeldscenario met ResourcePlacement en ClusterResourcePlacement
ResourcePlacement werkt met ClusterResourcePlacement (CRP) om een volledige multiclusterresourcebeheeroplossing te bieden. Het begrijpen van deze relatie is van cruciaal belang voor effectief vlootbeheer.
Belangrijk
ResourcePlacement kan alleen resources met een naamruimtebereik plaatsen op clusters die al de doelnaamruimte hebben. Gebruik ClusterResourcePlacement om een naamruimte vast te stellen.
Typische workflow:
-
Platformbeheerders: gebruiken
ClusterResourcePlacementom naamruimten in de hele vloot te implementeren. -
Toepassingsteams: gebruiken
ResourcePlacementom specifieke resources binnen die gevestigde naamruimten te beheren.
In de volgende voorbeelden ziet u hoe u CRP en RP coördineert.
Platformbeheerder: Maak de naamruimte met behulp van ClusterResourcePlacement:
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: app-namespace-crp
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: my-app
version: v1
selectionScope: NamespaceOnly # only namespace itself is placed, no resources within the namespace
policy:
placementType: PickAll # If placement type is not PickAll, the application teams needs to know what are the clusters they can place their applications.
Toepassingsteam: Specifieke resources binnen de naamruimte beheren met behulp van ResourcePlacement:
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourcePlacement
metadata:
name: app-configs-rp
namespace: my-app
spec:
resourceSelectors:
- group: ""
kind: ConfigMap
version: v1
labelSelector:
matchLabels:
app: my-application
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
Aanbevolen procedures voor ResourcePlacement en ClusterResourcePlacement
Wanneer u ResourcePlacement met ClusterResourcePlacement gebruikt, volgt u deze aanbevolen werkwijzen:
-
Stel eerst naamruimten in: implementeer altijd naamruimten via CRP voordat u objecten maakt
ResourcePlacement. - Afhankelijkheden bewaken: Gebruik Fleet-bewaking om ervoor te zorgen dat CSP's op naamruimteniveau in orde zijn voordat afhankelijke RPs worden geïmplementeerd.
- Beleid coördineren: CRP- en RP-plaatsingsbeleid uitlijnen om conflicten te voorkomen. Als CRP bijvoorbeeld de naamruimte op clusters A, B en C plaatst, kan RP zich richten op een subset van deze clusters.
- Teamgrenzen: CRP gebruiken voor door het platform beheerde resources (naamruimten, RBAC) en RP voor door toepassingen beheerde resources (app-configuraties, geheimen).
Deze gecoördineerde aanpak zorgt ervoor dat ResourcePlacement de flexibiliteit biedt die teams nodig hebben, terwijl de basisinfrastructuur behouden blijft, beheerd door platformoperators.
Resourceselectie, plaatsing en implementatie
ResourcePlacement gebruikt dezelfde plaatsingspatronen als ClusterResourcePlacement:
-
Plaatsingsbeleid:
PickAll,PickFixedenPickNbeleidsregels werken identiek voor beide API's. - Implementatiestrategie: bepalen hoe updates worden doorgegeven in clusters met dezelfde rolling updatemechanismen.
-
Status en waarneembaarheid: de voortgang van de implementatie bewaken met behulp van
kubectl describe resourceplacement <name> -n <namespace>. - Geavanceerde functies: Gebruik toleranties, resourceoverschrijvingen, beperkingen voor topologiespreiding en affiniteitsregels.
Het belangrijkste verschil is in het bereik van resourceselectie . Hoewel ClusterResourcePlacement u doorgaans volledige naamruimten en de inhoud ervan selecteert, ResourcePlacement beschikt u over verfijnde controle over afzonderlijke resources met een naamruimtebereik.
:::zone-end
Volgende stappen
- Gebruik resourceplaatsing in Fleet Manager om workloads over meerdere clusters uit te rollen.
- ResourcePlacement gebruiken om resources met naamruimtebereik te implementeren.
- Intelligente plaatsing van Kubernetes-resources tussen clusters op basis van eigenschappen van lidclusters.
- Uitzetting en verstoring voor plaatsing van resources beheren.
- Een uitrolstrategie definiëren voor de plaatsing van resources.
- Veelgestelde vragen over de plaatsing van Fleet Manager-resources.