Condividi tramite


Informazioni sugli snapshot per il posizionamento delle risorse in Azure Kubernetes Fleet Manager

Fleet Manager mantiene una cronologia dei 10 criteri di pianificazione del posizionamento usati più di recente, insieme alle versioni delle risorse selezionate. Questi criteri e le versioni delle risorse vengono mantenuti come oggetti snapshot:

  • Per ClusterResourcePlacement (CRP): ClusterSchedulingPolicySnapshot e ClusterResourceSnapshot (a livello di cluster)
  • Per ResourcePlacement (RP): SchedulingPolicySnapshot e ResourceSnapshot (limitato al namespace)

In questo articolo vengono esaminati questi oggetti in modo che sia possibile comprenderli nel caso in cui si desideri usarli.

Annotazioni

Se non si ha già familiarità con il posizionamento delle risorse di Fleet Manager:

Modalità di creazione degli snapshot delle risorse

Qualsiasi modifica alle risorse coperte dall'ambito del selettore di risorse CRP o RP attiverà automaticamente la creazione di un nuovo snapshot di risorsa entro 60 secondi.

Visualizzazione degli snapshot delle risorse

È possibile visualizzare gli snapshot delle risorse mantenuti da Fleet Manager seguendo questa procedura quando si è connessi al cluster hub di Fleet Manager.

Visualizzazione di ClusterResourceSnapshot (per ClusterResourcePlacement)

Per i posizionamenti a livello di cluster tramite ClusterResourcePlacement, visualizza gli oggetti ClusterResourceSnapshot.

In questo esempio viene usato un configmap aggiornato, che porta a due snapshot.

kubectl get clusterresourcesnapshots --show-labels

Vengono visualizzati due snapshot, con quello più recente contrassegnato come più recente (kubernetes-fleet.io/is-latest-snapshot=true), con un indice delle risorse pari a 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

È possibile esaminare il contenuto dell'oggetto example-placement-1-snapshot come indicato di seguito.

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

Visualizzazione di ResourceSnapshot (per ResourcePlacement)

Per i posizionamenti con ambito di spazio dei nomi usando ResourcePlacement, visualizza gli oggetti ResourceSnapshot all'interno dello spazio dei nomi.

Annotazioni

ResourcePlacement usa la versione dell'API placement.kubernetes-fleet.io/v1beta1 ed è attualmente in anteprima.

In questo esempio, è presente un ResourcePlacement nello spazio dei nomi my-app con ConfigMaps aggiornati, con due snapshot.

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

Vengono visualizzati due snapshot, con quello più recente contrassegnato come più recente (kubernetes-fleet.io/is-latest-snapshot=true), con un indice delle risorse pari a 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

È possibile esaminare il contenuto dell'oggetto app-configs-rp-1-snapshot come indicato di seguito.

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

Usare snapshot delle risorse

Gli snapshot possono essere usati come parte delle implementazioni a fasi gestite tramite le esecuzioni di aggiornamento come meccanismo di rollback. Sia ClusterResourcePlacement che ResourcePlacement supportano implementazioni a fasi con i rispettivi tipi di snapshot:

  • Per ClusterResourcePlacement: usa oggetti ClusterResourceSnapshot con ClusterStagedUpdateRun
  • Per ResourcePlacement: usa oggetti ResourceSnapshot con StagedUpdateRun

Per informazioni dettagliate su come implementare implementazioni a fasi per entrambi i tipi di posizionamento delle risorse, vedere Strategia di implementazione a fasi.

Modificare il limite della storia degli snapshot

Per modificare il numero di elementi contenuti nella cronologia, aggiungere un revisionHistoryLimit campo alla posizione e fornire un valore intero. Il valore predefinito è 10.

Per 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%

Per 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%

Passaggi successivi