Bagikan melalui


Gunakan Azure Kubernetes Fleet Manager ResourcePlacement untuk menyebarkan sumber daya yang terlingkup namespace di beberapa kluster (pratinjau)

Artikel ini menjelaskan cara menggunakan Azure Kubernetes Fleet Manager ResourcePlacement untuk menyebarkan sumber daya dengan cakupan namespace di seluruh kluster dalam armada.

Penting

Fitur pratinjau Azure Kubernetes Fleet Manager tersedia secara layanan mandiri dan berdasarkan sistem pendaftaran. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan pratinjau tersebut dikecualikan dari perjanjian tingkat layanan (SLA) serta garansi terbatas. Pratinjau Azure Kubernetes Fleet Manager sebagian dicakup oleh dukungan pelanggan berdasarkan upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi.

Prasyarat

Membuat namespace di seluruh kluster anggota

Sebelum Anda dapat menggunakan ResourcePlacement untuk menyebarkan sumber daya yang terlingkup namespace, namespace target harus ada di kluster anggota. Contoh ini menunjukkan cara membuat namespace layanan pada kluster hub dan menyebarkannya ke kluster anggota menggunakan ClusterResourcePlacement.

Nota

Contoh berikut menggunakan placement.kubernetes-fleet.io/v1beta1 versi API. Bidang selectionScope: NamespaceOnly ini adalah fitur pratinjau yang tersedia di v1beta1 dan tidak tersedia di API v1 yang stabil.

  1. Buat namespace pada kluster hub.

    kubectl create namespace my-app
    
  2. Buat ClusterResourcePlacement objek untuk menyebarkan namespace ke semua kluster anggota. Simpan YAML berikut ke file bernama namespace-crp.yaml:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ClusterResourcePlacement
    metadata:
      name: my-app-namespace
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          name: my-app
          version: v1
          selectionScope: NamespaceOnly
      policy:
        placementType: PickAll
    
  3. Terapkan ClusterResourcePlacement pada kluster hub:

    kubectl apply -f namespace-crp.yaml
    
  4. Verifikasi bahwa namespace berhasil disebarluaskan:

    kubectl get clusterresourceplacement my-app-namespace
    

    Output Anda akan terlihat serupa dengan contoh berikut:

    NAME                GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    my-app-namespace    1     True        1               True        1               15s
    

Menggunakan ResourcePlacement untuk menempatkan sumber daya dengan cakupan namespace

Objek ResourcePlacement dibuat dalam namespace layanan pada kluster hub dan digunakan untuk menyebarkan sumber daya khusus yang terlingkup namespace layanan ke kluster anggota. Contoh ini menunjukkan cara menyebarluaskan ConfigMaps ke kluster anggota tertentu menggunakan ResourcePlacement objek dengan PickFixed kebijakan penempatan.

Untuk informasi selengkapnya, lihat penempatan sumber daya dengan cakupan namespace menggunakan Azure Kubernetes Fleet Manager ResourcePlacement.

  1. Buat ConfigMaps di namespace pada kluster hub. ConfigMaps ini akan disebarkan ke kluster anggota yang dipilih:

    kubectl create configmap app-config \
      --from-literal=environment=production \
      --from-literal=log-level=info \
      -n my-app
    
    kubectl create configmap feature-flags \
      --from-literal=new-ui=enabled \
      --from-literal=api-v2=disabled \
      -n my-app
    
  2. Buat ResourcePlacement objek untuk menyebarluaskan ConfigMaps. Simpan YAML berikut ke file bernama app-configs-rp.yaml:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ResourcePlacement
    metadata:
      name: app-configs
      namespace: my-app
    spec:
      resourceSelectors:
        - group: ""
          kind: ConfigMap
          version: v1
          name: app-config
        - group: ""
          kind: ConfigMap
          version: v1
          name: feature-flags
      policy:
        placementType: PickFixed
        clusterNames:
          - membercluster1
          - membercluster2
    

    Nota

    Ganti membercluster1 dan membercluster2 dengan nama aktual kluster anggota Anda. Anda dapat mencantumkan kluster anggota yang tersedia menggunakan kubectl get memberclusters.

  3. Terapkan ResourcePlacement ke kluster hub:

    kubectl apply -f app-configs-rp.yaml
    
  4. Periksa kemajuan penyebaran sumber daya:

    kubectl get resourceplacement app-configs -n my-app
    

    Output Anda akan terlihat serupa dengan contoh berikut:

    NAME          GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    app-configs   1     True        1               True        1               20s
    
  5. Lihat detail objek penempatan:

    kubectl describe resourceplacement app-configs -n my-app
    

    Output Anda akan terlihat serupa dengan contoh berikut:

    Name:         app-configs
    Namespace:    my-app
    Labels:       <none>
    Annotations:  <none>
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         ResourcePlacement
    Metadata:
      Creation Timestamp:  2025-11-13T22:08:12Z
      Finalizers:
        kubernetes-fleet.io/crp-cleanup
        kubernetes-fleet.io/scheduler-cleanup
      Generation:        1
      Resource Version:  12345
      UID:               cec941f1-e48a-4045-b5dd-188bfc1a830f
    Spec:
      Policy:
        Cluster Names:
          membercluster1
          membercluster2
        Placement Type:  PickFixed
      Resource Selectors:
        Group:                 
        Kind:                  ConfigMap
        Name:                  app-config
        Version:               v1
        Group:                 
        Kind:                  ConfigMap
        Name:                  feature-flags
        Version:               v1
      Revision History Limit:  10
      Strategy:
        Type:  RollingUpdate
    Status:
      Conditions:
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                found all cluster needed as specified by the scheduling policy, found 2 cluster(s)
        Observed Generation:    1
        Reason:                 SchedulingPolicyFulfilled
        Status:                 True
        Type:                   ResourcePlacementScheduled
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                All 2 cluster(s) start rolling out the latest resource
        Observed Generation:    1
        Reason:                 RolloutStarted
        Status:                 True
        Type:                   ResourcePlacementRolloutStarted
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                No override rules are configured for the selected resources
        Observed Generation:    1
        Reason:                 NoOverrideSpecified
        Status:                 True
        Type:                   ResourcePlacementOverridden
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                Works(s) are succcesfully created or updated in 2 target cluster(s)' namespaces
        Observed Generation:    1
        Reason:                 WorkSynchronized
        Status:                 True
        Type:                   ResourcePlacementWorkSynchronized
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources are successfully applied to 2 cluster(s)
        Observed Generation:    1
        Reason:                 ApplySucceeded
        Status:                 True
        Type:                   ResourcePlacementApplied
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources in 2 cluster(s) are available now
        Observed Generation:    1
        Reason:                 ResourceAvailable
        Status:                 True
        Type:                   ResourcePlacementAvailable
      Observed Resource Index:  0
      Placement Statuses:
        Cluster Name:  membercluster1
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster1": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
        Cluster Name:             membercluster2
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster2": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
      Selected Resources:
        Kind:       ConfigMap
        Name:       app-config
        Namespace:  my-app
        Version:    v1
        Kind:       ConfigMap
        Name:       feature-flags
        Namespace:  my-app
        Version:    v1
    Events:
      Type    Reason                     Age   From                            Message
      ----    ------                     ----  ----                            -------
      Normal  PlacementRolloutStarted       37s   placement-controller  Started rolling out the latest resources
      Normal  PlacementOverriddenSucceeded  36s   placement-controller  Placement has been successfully overridden
      Normal  PlacementWorkSynchronized     36s   placement-controller  Work(s) have been created or updated successfully for the selected cluster(s)
      Normal  PlacementApplied              36s   placement-controller  Resources have been applied to the selected cluster(s)
      Normal  PlacementAvailable            36s   placement-controller  Resources are available on the selected cluster(s)
      Normal  PlacementRolloutCompleted     36s   placement-controller  Placement has finished the rollout process and reached the desired status
    

Memverifikasi sumber daya pada kluster anggota

Anda dapat memverifikasi bahwa ConfigMaps berhasil disebarkan ke kluster anggota.

  1. Dapatkan kredensial untuk salah satu kluster anggota Anda:

    az aks get-credentials --resource-group <resource-group> --name membercluster1
    
  2. Verifikasi bahwa namespace ada:

    kubectl get namespace my-app
    
  3. Verifikasi bahwa ConfigMaps ada di namespace:

    kubectl get configmap -n my-app
    

    Output Anda harus menampilkan kedua ConfigMaps:

    NAME             DATA   AGE
    app-config       2      2m
    feature-flags    2      2m
    
  4. Lihat konten ConfigMap:

    kubectl describe configmap app-config -n my-app
    

Membersihkan sumber daya

Jika Anda tidak lagi ingin menggunakan ResourcePlacement objek, Anda dapat menghapusnya menggunakan kubectl delete perintah :

kubectl delete resourceplacement app-configs -n my-app

Untuk juga menghapus namespace ClusterResourcePlacement :

kubectl delete clusterresourceplacement my-app-namespace

Untuk menghapus namespace dan semua sumber daya di dalamnya dari kluster hub:

kubectl delete namespace my-app

Untuk mempelajari selengkapnya tentang penempatan sumber daya dengan cakupan namespace, lihat sumber daya berikut ini: