Förstå ögonblicksbilder för Azure Kubernetes Fleet Manager-resursplacering

Fleet Manager har en historik över de 10 senast använda principerna för schemaläggning av placeringar, tillsammans med resursversioner som den valda placeringen har valt. Dessa princip- och resursversioner lagras som ögonblicksbildsobjekt:

  • För ClusterResourcePlacement (CRP): ClusterSchedulingPolicySnapshot och ClusterResourceSnapshot (klusteromfattning)
  • För ResourcePlacement (RP): SchedulingPolicySnapshot och ResourceSnapshot (namnrymdsspecifik)

I den här artikeln utforskar vi dessa objekt så att du kan förstå dem om du vill arbeta med dem.

Anmärkning

Om du inte redan är bekant med Fleet Managers resursplacering:

Så här skapas resursögonblicksbilder

Alla ändringar av resurser som omfattas av crp- eller RP-resursväljarens omfång utlöser automatiskt skapandet av en ny resursögonblicksbild inom 60 sekunder.

Visa resursögonblicksbilder

Du kan visa resursögonblicksbilderna som finns i Fleet Manager med hjälp av följande steg när du är ansluten till Fleet Manager-hubbklustret.

Visa ClusterResourceSnapshot (för ClusterResourcePlacement)

Visa objekt för klusteromfångsplaceringar med hjälp av ClusterResourcePlacementClusterResourceSnapshot .

I det här exemplet använder vi en uppdaterad ConfigMap, vilket leder till två ögonblicksbilder.

kubectl get clusterresourcesnapshots --show-labels

Vi ser två ögonblicksbilder, där den senaste har markerats som den senaste (kubernetes-fleet.io/is-latest-snapshot=true), med ett resursindex på 1 (kubernetes-fleet.io/resource-index=1).

NAME                           GEN   AGE    LABELS
example-placement-0-snapshot   1     17m    kubernetes-fleet.io/is-latest-snapshot=false,kubernetes-fleet.io/parent-CRP=example-placement,kubernetes-fleet.io/resource-index=0
example-placement-1-snapshot   1     2m2s   kubernetes-fleet.io/is-latest-snapshot=true,kubernetes-fleet.io/parent-CRP=example-placement,kubernetes-fleet.io/resource-index=1

Vi kan granska innehållet i example-placement-1-snapshot objektet på följande sätt.

kubectl get clusterresourcesnapshots example-placement-1-snapshot -o yaml
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceSnapshot
metadata:
  ...
  labels:
    kubernetes-fleet.io/is-latest-snapshot: "true"
    kubernetes-fleet.io/parent-CRP: example-placement
    kubernetes-fleet.io/resource-index: "1"
  name: example-placement-1-snapshot
  ...
spec:
  selectedResources:
  - apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        kubernetes.io/metadata.name: test-namespace
      name: test-namespace
    spec:
      finalizers:
      - kubernetes
  - apiVersion: v1
    data:
      key: value2
    kind: ConfigMap
    metadata:
      name: test-cm
      namespace: test-namespace

Visa ResourceSnapshot (för ResourcePlacement)

För placeringar som omfattar ett namnområde med hjälp av ResourcePlacement, visa ResourceSnapshot objekt inom namnområdet.

Anmärkning

ResourcePlacement använder API-versionen placement.kubernetes-fleet.io/v1beta1 och är för närvarande i förhandsversion.

I det här exemplet har vi en ResourcePlacement i my-app namnrymden med uppdaterade ConfigMaps, vilket leder till två snapshots.

kubectl get resourcesnapshots -n my-app --show-labels

Vi ser två ögonblicksbilder, där den senaste har markerats som den senaste (kubernetes-fleet.io/is-latest-snapshot=true), med ett resursindex på 1 (kubernetes-fleet.io/resource-index=1).

NAME                               GEN   AGE    LABELS
app-configs-rp-0-snapshot          1     15m    kubernetes-fleet.io/is-latest-snapshot=false,kubernetes-fleet.io/parent-CRP=app-configs-rp,kubernetes-fleet.io/resource-index=0
app-configs-rp-1-snapshot          1     1m3s   kubernetes-fleet.io/is-latest-snapshot=true,kubernetes-fleet.io/parent-CRP=app-configs-rp,kubernetes-fleet.io/resource-index=1

Vi kan granska innehållet i app-configs-rp-1-snapshot objektet på följande sätt.

kubectl get resourcesnapshots app-configs-rp-1-snapshot -n my-app -o yaml
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ResourceSnapshot
metadata:
  ...
  labels:
    kubernetes-fleet.io/is-latest-snapshot: "true"
    kubernetes-fleet.io/parent-CRP: app-configs-rp
    kubernetes-fleet.io/resource-index: "1"
  name: app-configs-rp-1-snapshot
  namespace: my-app
  ...
spec:
  selectedResources:
  - apiVersion: v1
    data:
      config: updated-value
    kind: ConfigMap
    metadata:
      name: app-config
      namespace: my-app
      labels:
        app: my-application

Använda resursögonblicksbilder

Ögonblicksbilder kan användas som en del av stegvis utplacerade distributioner som hanteras via uppdateringskörningar som en återställningsmekanism. Både ClusterResourcePlacement och ResourcePlacement stöder stegvisa distributioner med sina respektive typer av ögonblicksbilder.

  • För ClusterResourcePlacement: Använder ClusterResourceSnapshot objekt med ClusterStagedUpdateRun
  • För ResourcePlacement: Använder ResourceSnapshot objekt med StagedUpdateRun

Mer information om hur du implementerar stegvis distributioner för båda resursplaceringstyperna finns i Stegvis distributionsstrategi.

Ändra gränsen för historik för ögonblicksbilder

Om du vill ändra antalet objekt som finns i historiken lägger du till ett revisionHistoryLimit fält i din placering och anger ett heltalsvärde. Standardvärdet är 10.

För ClusterResourcePlacement

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp-example
spec:
  revisionHistoryLimit: 20   # keep 20 items in history
  resourceSelectors:
    - group: ""
      kind: Namespace
      name: test-namespace
      version: v1
  policy:
    placementType: PickN
    numberOfClusters: 2
    affinity:
      clusterAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          clusterSelectorTerms:
            - labelSelector:
                matchLabels:
                  fleet.azure.com/location: westus
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 50%

För ResourcePlacement

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ResourcePlacement
metadata:
  name: rp-example
  namespace: my-app
spec:
  revisionHistoryLimit: 20   # keep 20 items in history
  resourceSelectors:
    - group: ""
      kind: ConfigMap
      version: v1
      labelSelector:
        matchLabels:
          app: my-application
  policy:
    placementType: PickN
    numberOfClusters: 2
    affinity:
      clusterAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          clusterSelectorTerms:
            - labelSelector:
                matchLabels:
                  fleet.azure.com/location: westus
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 50%

Nästa steg