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 ClusterResourcePlacement
aracı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ışı
MemberCluster
Nedir?
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.
ClusterResourcePlacement
Nedir?
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 ClusterResourcePlacement
aş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: production
gö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 cluster2
gö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: 1
sahip 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 PickN
ad 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.
- Ölçeği genişletme işlemleri (başka bir değişiklik olmadan artar
- 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.
- Yeni bir kümenin uygun hale gelmesi, yerleştirme ilkesine (örneğin bir
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ğinNoSchedule
.operator
: veyaEqual
gibiExists
tolerans işleci.
Her tolerans, üzerinde ClusterResourcePlacement
uygulanan 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.
Azure Kubernetes Service