Hub kümesinden üye kümelere Kubernetes kaynağı yayma

Bu makalede, Azure Kubernetes Fleet Manager (Fleet) kullanılarak hub kümelerinden üye kümelere Kubernetes kaynak yayma kavramı açıklanmaktadır.

Platform yöneticilerinin genellikle çeşitli nedenlerle Kubernetes kaynaklarını birden çok kümeye dağıtması gerekir, örneğin:

  • Birden çok kümedeki rolleri ve rol bağlamalarını kullanarak erişim denetimini yönetme.
  • Tüm kümelerde olması gereken Prometheus veya Flux gibi altyapı uygulamalarını çalıştırma.

Uygulama geliştiricilerinin genellikle çeşitli nedenlerle Kubernetes kaynaklarını birden çok kümeye dağıtması gerekir, örneğin:

  • Düşük gecikme süresi izleme deneyimi için uygulamayı farklı bölgelerdeki birden çok kümeye sunan bir video dağıtma.
  • Müşterilerin tek bir bölge kesintisi sırasında alışveriş yapmaya devam etmesi için bir alışveriş sepeti uygulamasını iki eşleştirilmiş bölgeye dağıtma.
  • Uygun maliyetli spot düğüm havuzlarına sahip kümelere toplu işlem uygulaması dağıtma.

Bu Kubernetes kaynaklarını birden çok kümede el ile oluşturmak, güncelleştirmek ve izlemek yorucudur. Fleet, Kubernetes kaynaklarının ölçekli yönetimini etkinleştirmek için Kubernetes kaynak yayma olanağı sağlar. Fleet ile hub kümesinde Kubernetes kaynakları oluşturabilir ve bunları Kubernetes Özel Kaynakları: MemberCluster ve ClusterResourcePlacementaracılığıyla seçili üye kümelerine yayabilirsiniz. Fleet, açık kaynak buluta özel çok kümeli çözümü temel alan bu özel kaynakları destekler. Daha fazla bilgi için yukarı akış Fleet belgelerine bakın.

Önemli

Azure Kubernetes Fleet Manager önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. Azure Kubernetes Fleet Manager önizlemeleri, müşteri desteği kapsamındadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır.

Kaynak yayma iş akışı

Kubernetes kaynağının üye kümelere nasıl yayıldığını gösteren diyagram.

MemberClusterNedir?

Bir küme bir filoya katıldıktan sonra, merkez kümesinde karşılık gelen MemberCluster bir özel kaynak oluşturulur. Kaynak yaymada hedef kümeleri seçmek için bu özel kaynağı kullanabilirsiniz.

Kaynak yaymada hedef küme seçimi için aşağıdaki etiketler kullanılabilir ve tüm üye kümelere otomatik olarak eklenir:

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

Daha fazla bilgi için bkz . MemberCluster API başvurusu.

ClusterResourcePlacementNedir?

ClusterResourcePlacement Fleet zamanlayıcısına hub kümesinden üye kümelere belirli bir küme kapsamlı nesne kümesinin nasıl yerleştirileceğini bildirmek için bir nesne kullanılır. Dağıtımlar, StatefulSets, DaemonSets, ConfigMap'ler, Gizli Diziler ve PersistentVolumeClaims gibi ad alanı kapsamlı nesneler, içeren ad alanları seçildiğinde eklenir.

ile ClusterResourcePlacementşunları yapabilirsiniz:

  • Üye kümelere hangi küme kapsamlı Kubernetes kaynaklarının yayıldığını seçin.
  • Bir alt kümeyi veya tüm üye kümeleri hedef küme olarak el ile seçmek veya otomatik olarak seçmek için yerleştirme ilkelerini belirtin.
  • Seçilen Kubernetes kaynaklarının güncelleştirmelerini birden çok hedef kümeye güvenli bir şekilde dağıtacak dağıtım stratejilerini belirtin.
  • Her hedef kümeye yayma ilerleme durumunu görüntüleyin.

nesnesi, ClusterResourcePlacement istenmeyen yan etkiler olmadan üye kümelere yayılmaya yardımcı olmak için nesneyi zarflama amacıyla ConfigMap'in kullanılmasını destekler. Seçim yöntemleri şunlardır:

  • Grup, sürüm ve tür: Verilen türdeki tüm kaynakları seçin ve yerleştirin.
  • Grup, sürüm, tür ve ad: Belirli bir türe ait belirli bir kaynağı seçin ve yerleştirin.
  • Grup, sürüm, tür ve etiketler: Verilen etiketlerle eşleşen belirli bir türdeki tüm kaynakları seçin ve yerleştirin.

Daha fazla bilgi için bkz ClusterResourcePlacement . API başvurusu.

oluşturulurken ClusterResourcePlacementaşağıdaki bencelik türleri belirtilebilir:

  • requiredDuringSchedulingIgnoredDuringExecution: Bu benzini zamanlama sırasında gerekli türde olduğundan, kümeleri özelliklerine göre filtreler .
  • preferredDuringSchedulingIgnoredDuringExecution: Bu benterlilik yalnızca tercih edilen türde olduğundan ancak zamanlama sırasında gerekli olmadığından, maliyet veya kaynak kullanılabilirliği gibi sizin belirttiğiniz özelliklere göre kümelere tercihli derecelendirme sağlar.

Kubernetes kaynağının yayılması gereken küme sayısını denetlemek için birden çok yerleştirme türü kullanılabilir:

  • PickAll kaynakları tüm kullanılabilir üye kümelerine yerleştirir. Bu ilke, küme izleme veya raporlama uygulamaları gibi altyapı iş yüklerini yerleştirmek için kullanışlıdır.
  • PickFixed kaynakları ada göre belirli bir üye küme listesine yerleştirir.
  • PickN en esnek yerleştirme seçeneğidir ve bence veya topoloji yayma kısıtlamalarına göre küme seçimine olanak tanır ve kullanılabilirliğin istendiğinden emin olmak için iş yüklerini birden çok uygun kümeye dağıtırken yararlıdır.

PickAll yerleştirme ilkesi

Bir iş yükünü filodaki tüm üye kümelere dağıtmak için yerleştirme ilkesi kullanabilirsiniz PickAll (isteğe bağlı olarak bir ölçüt kümesiyle eşleşir).

Aşağıdaki örnekte, ile etiketlenmiş tüm kümelerde bir prod-deployment ad alanının ve tüm nesnelerinin nasıl dağıtılacağı environment: productiongösterilmektedir:

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

Bu basit ilke, ad alanını prod-deployment ve içindeki tüm kaynakları alır ve verilen environment etiketle filodaki tüm üye kümelerine dağıtır. Tüm kümeler istenirse terimi tamamen kaldırabilirsiniz affinity .

PickFixed yerleştirme ilkesi

İş yükünü bilinen bir üye küme kümesine dağıtmak istiyorsanız, kümeleri ada göre seçmek için bir PickFixed yerleştirme ilkesi kullanabilirsiniz.

Aşağıdaki örnekte ad alanının üye kümelere nasıl dağıtılacağı test-deployment ve cluster2gösterilmektedircluster1:

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 yerleştirme ilkesi

Yerleştirme PickN ilkesi en esnek seçenektir ve kaynakların hem benşimlere hem de topoloji yayma kısıtlamalarına göre yapılandırılabilir sayıda kümeye yerleştirilmesine olanak tanır.

PickN benziteleri olan

Bir yerleştirme ilkesiyle PickN benzeşimleri kullanma, pod zamanlaması ile benzeşimleri kullanmaya benzer şekilde çalışır. Hem gerekli hem de tercih edilen benziteleri ayarlayabilirsiniz. Gerekli ben dizimler, bu belirtilen benetlerle eşleşmeyen kümelere yerleştirmeyi engeller ve tercih edilen bencelikler, yerleştirme kararı alınırken geçerli küme kümesinin sıralanmasını sağlar.

Aşağıdaki örnekte bir iş yükünün üç kümeye nasıl dağıtılacağı gösterilmektedir. Yalnızca etiketi olan critical-allowed: "true" kümeler geçerli yerleştirme hedefleridir ve etiketine critical-level: 1sahip kümelere tercih edilir:

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 topoloji yayma kısıtlamalarıyla

Kullanılabilirlik gereksinimlerini karşılamak için küme yerleşimlerinin topoloji sınırları arasında bölünmesini zorlamak için topoloji yayma kısıtlamalarını kullanabilirsiniz; örneğin, yerleşimleri bölgelere bölme veya halkaları güncelleştirme. Ayrıca, sınırlama karşılanamazsa () veya mümkünwhenUnsatisfiable: ScheduleAnyway olan en iyi şekilde zamanlanamazsa (whenUnsatisfiable: DoNotSchedule) zamanlamayı önlemek için topoloji yayma kısıtlamalarını yapılandırabilirsiniz.

Aşağıdaki örnekte, belirli bir kaynak kümesinin birden çok bölgeye nasıl yayıldığı ve farklı güncelleştirme günleriyle üye kümeler arasında zamanlamaya nasıl çalışıldığı gösterilmektedir:

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

Daha fazla bilgi için yukarı akış topolojisi yayma kısıtlamaları Fleet belgelerine bakın.

Güncelleştirme stratejisi

Fleet, güncelleştirmelerin birden çok küme yerleşimi arasında nasıl dağıtıldığından emin olmak için sıralı bir güncelleştirme stratejisi kullanır.

Aşağıdaki örnekte, varsayılan ayarları kullanarak sıralı güncelleştirme stratejisinin nasıl yapılandırılır gösterilmektedir:

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

Zamanlayıcı, her kümeye yönelik güncelleştirmeleri sırayla dağıtır ve en azından unavailablePeriodSeconds kümeler arasında bekler. Tüm kaynaklar kümeye doğru şekilde uygulandıysa dağıtım durumu başarılı olarak kabul edilir. Dağıtım durumu denetimi alt kaynaklara art arda gelmez; örneğin, dağıtım tarafından oluşturulan podların hazır hale geldiğini onaylamaz.

Daha fazla bilgi için yukarı akış dağıtım stratejisi Fleet belgelerine bakın.

Yerleştirme durumu

Fleet zamanlayıcı, yerleştirme kararlarıyla ilgili ayrıntıları ve durumu nesneye ClusterResourcePlacement güncelleştirir. Komutunu kullanarak kubectl describe crp <name> bu bilgileri görüntüleyebilirsiniz. Çıktı aşağıdaki bilgileri içerir:

  • Yerleştirmenin başarıyla tamamlandığını içeren, yerleştirme için geçerli olan koşullar.
  • Her üye kümesi için, bu kümeye dağıtımın durumunu gösteren bir yerleştirme durumu bölümü.

Aşağıdaki örnekte, kullanarak PickNad alanını test ve ConfigMap'i test-1 iki üye kümeye dağıtan bir ClusterResourcePlacement gösterilmektedir. Yerleştirme başarıyla tamamlandı ve kaynaklar ve aks-member-2 kümelerine yerleştirildiaks-member-1.

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

Yerleştirme değişiklikleri

Filo zamanlayıcı, mevcut iş yükü yerleşimlerinin kararlılığını önceliklendirir. Bu öncelik belirleme, bir iş yükünün kaldırılmasına ve yeniden zamanlanmasına neden olan değişiklik sayısını sınırlayabilir. Aşağıdaki senaryolar yerleştirme değişikliklerini tetikleyebilir:

  • Nesnedeki ClusterResourcePlacement yerleştirme ilkesi değişiklikleri, bir iş yükünün kaldırılmasını ve yeniden zamanlanması tetikleyebilir.
    • Ölçeği genişletme işlemleri (başka bir değişiklik olmadan artar numberOfClusters ) iş yüklerini yalnızca yeni kümelere yerleştirir ve mevcut yerleşimleri etkilemez.
  • Küme değişiklikleri, örneğin:
    • Yeni bir kümenin uygun hale gelmesi, yerleştirme ilkesine (örneğin bir PickAll ilke) uygunsa yerleştirmeyi tetikleyebilir.
    • Bir yerleşimi olan bir küme filodan kaldırılır, etkilenen tüm iş yüklerini diğer yerleşimlerini etkilemeden değiştirmeyi dener.

Yalnızca kaynak değişiklikleri (kaynakları güncelleştirme veya nesnedeki güncelleştirme) mevcut yerleştirmelerde aşamalı olarak dağıtılır, ancak iş yükünün yeniden zamanlanması tetiklenmez.ResourceSelector ClusterResourcePlacement

Toleranslar

ClusterResourcePlacement nesneleri, nesneye uygulanan toleransların belirtimini ClusterResourcePlacement destekler. Her tolerans nesnesi aşağıdaki alanlardan oluşur:

  • key: Toleransın anahtarı.
  • value: Toleransın değeri.
  • effect: Toleransın etkisi, örneğin NoSchedule.
  • operator: veya Equalgibi Exists tolerans işleci.

Her tolerans, üzerinde ClusterResourcePlacementuygulanan bir veya daha fazla özel tonlamayı tolere etmek için kullanılır. Üzerindeki MemberCluster tüm lekeler tolere edilince zamanlayıcı kaynakları kümeye yayabilir. Bir nesne oluşturulduktan sonra toleransları ClusterResourcePlacement güncelleştiremez veya kaldıramazsınız.

Daha fazla bilgi için yukarı akış Fleet belgelerine bakın.

Fleet kaynak kümesinin Kubernetes API'sine erişme

Hub kümesi etkin bir Azure Kubernetes Fleet Manager kaynağı oluşturduysanız, Kubernetes nesne yayma gibi senaryoları merkezi olarak denetlemek için bunu kullanabilirsiniz. Fleet kaynak kümesinin Kubernetes API'sine erişmek için Azure Kubernetes Fleet Manager ile Fleet kaynak kümesinin Kubernetes API'sine erişme'deki adımları izleyin.

Sonraki adımlar

Hub kümesinden üye kümelere Kubernetes kaynak yayma özelliğini ayarlayın.