ACK One, uygulamaları bir filoya dağıtmak için yayılım ilkelerini ve geçersiz kılma ilkelerini kullanır. Yayılım ilkesi, hangi kaynakların hangi kümelere dağıtılacağını tanımlar. Geçersiz kılma ilkesi ise bu kaynaklara küme bazlı yapılandırma değişiklikleri uygular.
Yayılım ilkeleri
Bir yayılım ilkesi, Kubernetes kaynaklarını seçer ve bunları bir veya daha fazla üye kümeye dağıtır. Bir PropagationPolicy veya ClusterPropagationPolicy tanımlayın; her ikisi de açık kaynaklı Karmada projesine dayanır ve Karmada API ile uyumludur.
PropagationPolicy: Ad alanı düzeyindeki kaynakları dağıtır. Yalnızca ilkenin tanımlandığı ad alanı içinde geçerlidir.ClusterPropagationPolicy: Küme kapsamındaki kaynakları (PersistentVolume,StorageClass,Namespace,CustomResourceDefinition) ve sistem ad alanları dışındaki tüm ad alanlarında bulunan ad alanı düzeyindeki kaynakları dağıtır. Kaynak dağıtımı için Rol Tabanlı Erişim Kontrolü (RBAC), çok küme filo RBAC izinleri tarafından yönetilir.
Aşağıdaki örnekte, statik çoğaltma ağırlıkları kullanılarak bir Deployment ve bir ConfigMap iki kümeye dağıtılmaktadır:
apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: PropagationPolicy
metadata:
name: web-demo
namespace: demo
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: web-demo
- apiVersion: v1
kind: ConfigMap
name: cm-demo
- apiVersion: apps/v1
kind: Deployment
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- xxxx
preserveResourcesOnDeletion: true
placement:
clusterAffinity:
clusterNames:
- cxxxxx # Your cluster ID.
- cxxxxx # Your cluster ID.
replicaScheduling:
replicaSchedulingType: Divided
replicaDivisionPreference: Weighted
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- cxxxxx
weight: 2
- targetCluster:
clusterNames:
- cxxxxxx
weight: 1
Parametreler
| Parametre | Zorunlu | Açıklama | Örnek |
|---|---|---|---|
apiVersion |
Evet | API sürümü. | policy.one.alibabacloud.com/v1alpha1 |
kind |
Evet | İlke kapsamı. PropagationPolicy kaynakları kendi ad alanı içinde dağıtır. ClusterPropagationPolicy küme kapsamındaki kaynakları ve sistem dışı herhangi bir ad alanındaki kaynakları dağıtır. |
PropagationPolicy |
namespace |
Hayır | kind değeri PropagationPolicy olduğunda gereklidir. Mevcut bir ad alanı belirtin. |
demo |
name |
Hayır | Yayılım ilkesinin adı. | policy-xxxx |
resourceSelectors |
Hayır | Dağıtılacak Kubernetes kaynaklarını seçer. Belirtilmezse hiçbir kaynak seçilmez. Bkz. resourceSelector parametreleri. | — |
propagateDeps |
Hayır | Seçilen iş yükünün bağımlı olduğu kaynakların (örneğin, bir Deployment tarafından başvurulan ConfigMap) otomatik olarak dağıtılıp dağıtılmayacağını belirtir. | true |
placement |
Evet | Hedef kümeleri ve çoğaltma zamanlamasını belirtir. clusterAffinity ve replicaScheduling içerir. Bkz. clusterAffinity parametreleri ve replicaScheduling parametreleri. |
— |
dependentOverrides |
Hayır | Kaynaklar dağıtılmadan önce uygulanması gereken OverridePolicy nesnelerini listeler. |
- overridePolicy1 |
failover |
Hayır | Bir uygulama sağlıksız duruma geçtiğinde davranışı kontrol eder. Bkz. Yük devretme yapılandırması. | — |
preserveResourcesOnDeletion |
Evet | İlke silindikten sonra üye kümelerdeki dağıtılmış kaynakların korunup korunmayacağını belirtir. Varsayılan: true. |
false |
resourceSelector parametreleri
| Parametre | Zorunlu | Açıklama | Örnek |
|---|---|---|---|
apiVersion |
Evet | Dağıtılacak kaynağın API sürümü. | v1 |
kind |
Evet | Kaynak türü. | Deployment |
namespace |
Hayır | Kaynağın ad alanı. PropagationPolicy kullanırken bu değer, ilkenin tanımlandığı ad alanıyla eşleşmelidir; diğer değerlerin etkisi yoktur. |
demo |
name |
Hayır | Kaynağın adı. | web-demo |
labelSelector |
Hayır | Kaynakları etiketlere göre seçer. matchLabels (anahtar-değer çiftleri) ve matchExpressions (key, operator ve values içeren ifadeler) desteklenir. Belirtilmezse, ad alanındaki belirtilen kind türündeki tüm kaynaklar seçilir. |
— |
clusterAffinity parametreleri
Hedef kümeleri aşağıdaki alanların herhangi bir kombinasyonunu kullanarak belirtin:
Küme kimliğine göre
clusterAffinity:
clusterNames:
- cxxxx
- cxxxx
Etiket seçicisine göre
clusterAffinity:
labelSelector:
matchLabels:
region: A
az: zone0
matchExpressions:
- key: app
operator: In
values:
- nginx
Hariç tutmaya göre
clusterAffinity:
excludeClusters:
- cxxxx
- cxxxx
| Parametre | Zorunlu | Açıklama |
|---|---|---|
clusterNames |
Hayır | Dahil edilecek küme kimlikleri. |
excludeClusters |
Hayır | Hariç tutulacak küme kimlikleri. |
labelSelector |
Hayır | Kümeleri etikete göre seçer. |
replicaScheduling parametreleri
| Parametre | Zorunlu | Açıklama | Örnek |
|---|---|---|---|
replicaSchedulingType |
Hayır | Çoğaltmaların kümeler arasında nasıl dağıtılacağı. Duplicated tam çoğaltma sayısını her kümede çalıştırır. Divided çoğaltmaları kümeler arasında bölerek toplamın iş yükü teknik özelliklerinde belirtilen sayıyla eşleşmesini sağlar. |
Divided |
customSchedulingType |
Hayır | Özel zamanlama ilkesi. Şu anda yalnızca iş iş yükleri için Gang zamanlaması desteklenmektedir. |
Gang |
replicaDivisionPreference |
Hayır | replicaSchedulingType değeri Divided olduğunda kullanılır. Weighted çoğaltmaları ağırlığa göre böler. Aggregated çoğaltmaları daha yüksek puanlı kümelerde yoğunlaştırır. |
Weighted |
weightPreference |
Hayır | Weighted bölme işlemi için statik veya dinamik ağırlıkları belirtir. Aşağıdaki örnekleri inceleyin. |
— |
Statik ağırlık örneği — Cluster1 üzerinde weight: 2 ve Cluster2 üzerinde weight: 1 ile toplam üç çoğaltma, Cluster1'e iki ve Cluster2'ye bir olacak şekilde zamanlanır:
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- cxxxxx # Cluster1 ID
weight: 2
- targetCluster:
clusterNames:
- cxxxxxx # Cluster2 ID
weight: 1
Dinamik ağırlık örneği — Çoğaltmaları her kümenin mevcut kapasitesine orantılı olarak dağıtır:
weightPreference:
dynamicWeight: AvailableReplicas
Yük devretme yapılandırması
Bir uygulama sağlıksız duruma geçtiğinde ACK One'ın nasıl yanıt vereceğini kontrol etmek için failover alanını yapılandırın:
failover:
application:
decisionConditions:
tolerationSeconds: 30
purgeMode: Immediately
| Parametre | Açıklama | Varsayılan |
|---|---|---|
decisionConditions.tolerationSeconds |
Sağlıksız bir uygulamayı başarısız olarak kabul etmeden önce ne kadar bekleneceği. | 300s |
purgeMode |
Sağlıksız uygulama ile ilgili yapılacak işlem. Immediately uygulamayı tahliye eder ve yenisini zamanlar. Graciously uygulamanın kurtulmasını bekler; gracePeriodSeconds içinde kurtulursa tahliye iptal edilir. Never uygulamayı yerinde bırakır ve manuel müdahale gerektirir. |
— |
gracePeriodSeconds |
purgeMode değeri Graciously olduğunda nazikçe tahliye için maksimum bekleme süresi. |
600s |
Geçersiz kılma ilkeleri
Bir geçersiz kılma ilkesi, yayılım ilkesi tarafından dağıtım için zaten seçilmiş olan kaynaklara küme bazlı yapılandırma uygular. Bir ClusterOverridePolicy veya OverridePolicy tanımlayın; her ikisi de açık kaynaklı Karmada projesine dayanır ve Karmada'nın ClusterOverridePolicy ve OverridePolicy arayüzleriyle uyumludur.
OverridePolicy: Kendi ad alanı içindeki ad alanı düzeyindeki kaynakları geçersiz kılar.ClusterOverridePolicy: Küme kapsamındaki kaynakları (PersistentVolume,StorageClass,Namespace,CustomResourceDefinition) ve sistem dışı herhangi bir ad alanındaki kaynakları geçersiz kılar.
Aşağıdaki örnekte, belirli bir kümedeki bir Deployment için çoğaltma sayısı ve görüntü kayıt defteri geçersiz kılınmaktadır:
apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: OverridePolicy
metadata:
name: demo
namespace: demo
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: example
overrideRules:
- targetCluster:
clusterNames:
- cxxxxx # Your cluster ID
overriders:
plaintext:
- operator: replace
path: /spec/replicas
value: 1
imageOverrider:
- component: Registry
operator: add
value: registry.cn-hangzhou.aliyuncs.com/xxxx
Ana parametreler
| Parametre | Zorunlu | Açıklama | Örnek |
|---|---|---|---|
apiVersion |
Evet | API sürümü. | policy.one.alibabacloud.com/v1alpha1 |
kind |
Evet | İlke kapsamı. OverridePolicy kendi ad alanı içinde uygulanır. ClusterOverridePolicy küme kapsamındaki kaynaklara ve sistem dışı herhangi bir ad alanındaki kaynaklara uygulanır. |
OverridePolicy |
namespace |
Hayır | kind değeri OverridePolicy olduğunda gereklidir. Mevcut bir ad alanı belirtin. |
demo |
name |
Evet | Geçersiz kılma ilkesinin adı. | demo |
resourceSelectors |
Evet | Geçersiz kılınacak kaynakları seçer. Bkz. resourceSelector parametreleri. | — |
overrideRules |
Evet | Her biri belirli kümeleri hedefleyen ve uygulanacak geçersiz kılmaları belirten geçersiz kılma kuralları dizisi. Bkz. overrideRules parametreleri. | — |
resourceSelector parametreleri
| Parametre | Zorunlu | Açıklama | Örnek |
|---|---|---|---|
apiVersion |
Evet | Kaynağın API sürümü. | v1 |
kind |
Evet | Kaynak türü. | Deployment |
namespace |
Hayır | Kaynağın ad alanı. OverridePolicy kullanırken bu değer, ilkenin ad alanıyla eşleşmelidir. |
demo |
name |
Hayır | Kaynak adı. | example |
labelSelector |
Hayır | Kaynakları etikete göre seçer. Belirtilmezse, ad alanındaki belirtilen kind türündeki tüm kaynaklar seçilir. |
— |
overrideRules parametreleri
overrideRules içindeki her giriş, bir targetCluster ve bir overriders bloğu içerir:
| Parametre | Zorunlu | Açıklama |
|---|---|---|
targetCluster |
Evet | Geçersiz kılmanın hangi kümelere uygulanacağını belirtir; yayılım ilkelerindekiyle aynı clusterAffinity yapısını kullanır. Bkz. clusterAffinity parametreleri. |
overriders |
Evet | Neyin geçersiz kılınacağını tanımlar. imageOverrider ve plaintext desteklenir. Aynı kuralda her ikisi de belirtildiğinde, önce imageOverrider ardından plaintext uygulanır. |
overriders parametreleri
imageOverrider — Görüntü kayıt defterini, deposunu veya etiketini değiştirir:
| Parametre | Zorunlu | Açıklama |
|---|---|---|
predicate |
Hayır | Değiştirilecek belirli görüntü alanının yolu (örneğin, /spec/template/spec/containers/0/image). Belirtilmezse, kaynaktaki tüm görüntüler değiştirilir. |
component |
Evet | Değiştirilecek görüntü bileşeni. Geçerli değerler: Registry, Repository, Tag. Görüntü biçimi [registry/]repository[:tag] şeklindedir. |
operator |
Evet | İşlem. Geçerli değerler: add, replace, remove. |
value |
Koşullu | Yeni değer. operator değeri add veya replace olduğunda gereklidir. |
Örnek — Tüm konteyner görüntülerinin başına bir kayıt defteri ekler:
imageOverrider:
- component: Registry
operator: add
value: registry.cn-hangzhou.aliyuncs.com
Sonuç: Başlangıçta nginx:latest olarak belirtilen bir görüntü, registry.cn-hangzhou.aliyuncs.com/nginx:latest haline gelir.
plaintext — JSON Patch (RFC 6902) kullanarak herhangi bir kaynak alanını değiştirir:
| Parametre | Zorunlu | Açıklama |
|---|---|---|
path |
Evet | Hedef alanın JSON Patch yolu (örneğin, /spec/replicas). |
value |
Koşullu | Yeni değer. operator değeri add veya replace olduğunda gereklidir. operator değeri remove olduğunda atlayın. |
operator |
Evet | İşlem. Geçerli değerler: add, replace, remove. |
Örnek — Belirli bir kümede çoğaltma sayısını 1 olarak ayarlar:
plaintext:
- operator: replace
path: /spec/replicas
value: 1
Sonuç: Deployment'ın spec.replicas alanı, hedef kümede orijinal değerinden 1 değerine değiştirilir.
Sonraki adımlar
Bir filo örneğinde uygulama oluşturma ve çok küme dağıtımı için yayılım ve geçersiz kılma ilkelerini yapılandırma konusunda uçtan uca bir kılavuz için bkz. Uygulama dağıtımı hızlı başlangıç.