Trafik artışlarını karşılamak için işinizi ölçeklendirdiğinizde veya büyük çaplı işler çalıştırdığınızda ECI pod'larının oluşturulması başarısız olabilir. Yaygın nedenler arasında bir kullanılabilirlik alanında yetersiz örnek envanteri veya bir vSwitch'teki IP adreslerinin tükenmesi yer alır. Oluşturma başarı oranını artırmak ve iş sürekliliğini sağlamak için ECI pod'larını birden fazla kullanılabilirlik alanında oluşturun.
Ön koşullar
Hedef VPC içindeki farklı kullanılabilirlik alanlarında birden fazla vSwitch oluşturmuş olmanız gerekir.
vSwitch oluşturma hakkında bilgi için bkz. vSwitch oluşturma ve yönetme.
ECI'yi destekleyen bölgeler ve kullanılabilirlik alanları hakkında bilgi için bkz. Bölgeler ve alanlar.
Arka plan bilgileri
Seçilen örnek türü belirtilen bölge ve kullanılabilirlik alanında geçici olarak tükendiyse Elastic Container Instance oluşturma işlemi OperationDenied.NoStock hata koduyla başarısız olur. Bu hata, kullanılamayan OpenAPI kanalı kotasından ziyade yetersiz envanter olduğunu gösterir. Konsol ve OpenAPI aynı kaynak havuzunu kullanır.
Bir ECI örneği oluştururken birden fazla vSwitch sağlayarak birden fazla kullanılabilirlik alanı belirtebilirsiniz. Sistem yükü dengelemek amacıyla istekleri belirtilen kullanılabilirlik alanları arasında rastgele dağıtır. Bir kullanılabilirlik alanında yetersiz envanter varsa sistem örneği başka bir belirtilen kullanılabilirlik alanında otomatik olarak oluşturmaya çalışır.
Birden fazla kullanılabilirlik alanı (vSwitch) belirtirken aşağıdaki sınırlamalar geçerlidir:
Belirtilen tüm vSwitch'ler aynı VPC'ye ait olmalıdır.
En fazla 10 vSwitch belirtebilirsiniz.
Birden fazla kullanılabilirlik alanı ve birden fazla örnek türünü birleştirmek örnek oluşturma başarı oranını daha da artırır.
Yapılandırma
Birden fazla kullanılabilirlik alanını küme düzeyinde veya belirli bir ECI pod'u için yapılandırabilirsiniz:
Küme: Küme için birden fazla vSwitch belirtin. Bu yapılandırma küme içindeki tüm ECI pod'larına uygulanır.
ECI pod'u: Bir ECI pod'u oluştururken birden fazla vSwitch belirtin. Bu yapılandırma yalnızca bu belirli ECI pod'una uygulanır.
Yeni küme yapılandırması
Bir küme oluşturmadan önce kullanmayı planladığınız VPC içindeki farklı kullanılabilirlik alanlarında birden fazla vSwitch oluşturmanızı öneririz. Kümeyi oluştururken çoklu kullanılabilirlik alanı özelliğini etkinleştirmek için birden fazla vSwitch yapılandırabilirsiniz. Aşağıdaki örnek Container Service for Kubernetes (ACK) konsolunda bir ACK Serverless kümesi nasıl oluşturulacağını göstermektedir.
Virtual Private Cloud bölümünde Use Existing seçeneğini belirleyin ve hedef VPC'yi belirtin. Ardından vSwitch bölümünde farklı kullanılabilirlik alanlarından birden fazla vSwitch seçin (1 ile 10 arasında vSwitch seçebilirsiniz ve sistem Recommended kullanılabilirlik alanlarını işaretler).
Mevcut küme yapılandırması
Yapılandırma yöntemi VK'nın (ack-virtual-node bileşeni) sürümüne bağlıdır.
VK sürümünüz v2.0.0.90-15deb126e-aliyun veya üzeriyse eci-profile dosyasını değiştirin.
VK sürümünüz v2.0.0.90-15deb126e-aliyun sürümünden önceyse ortam değişkenini değiştirin.
Eci-profile
Birden fazla kullanılabilirlik alanı kullanmak için eci-profile adlı ConfigMap'i düzenleyin ve vSwitch kimliklerini data.vSwitchIds alanına ekleyin.
-
eci-profile dosyasını düzenleyin.
kubectl edit cm -n kube-system eci-profile -
vSwitchIdsalanının değerini değiştirin.Virgülle ayırarak vSwitch kimliklerini ekleyin.
data: enableClusterIp: "true" enableHybridMode: "false" enablePrivateZone: "false" resourceGroupId: "" securityGroupId: sg-2ze0b9o8pjjzts4h**** selectors: "" vSwitchIds: vsw-2zeet2ksvw7f14ryz****,vsw-2ze94pjtfuj9vaymf**** vpcId: vpc-2zeghwzptn5zii0w7**** Değişiklikleri kaydedin ve çıkın.
Ortam değişkeni
Yeni özellikleri kullanmak için VK bileşenini en son sürüme yükseltmenizi öneririz.
VK'yı dağıtma şeklinize bağlı olarak birden fazla kullanılabilirlik alanı kullanmak üzere Deployment veya StatefulSet için ECI_VSWITCH ortam değişkenini güncelleyebilirsiniz. Aşağıdaki örnekte bir Deployment kullanılmaktadır:
-
Deployment'ı düzenleyin.
kubectl -n kube-system edit deployment/virtual-node-controller -
ECI_VSWITCHortam değişkenini değiştirin.ECI_VSWITCHortam değişkeninin değerine vSwitch kimliklerini ekleyin. Birden fazla vSwitch kimliğini virgülle ayırın.- name: ECI_VSWITCH value: vsw-bp1xpiowfm5vo8o3c****,vsw-bp1rkyjgr1xwoho6k**** Değişiklikleri kaydedin ve çıkın.
ECI pod yapılandırması
Birden fazla kullanılabilirlik alanı belirtmek için Pod meta verilerinde aşağıdaki ek açıklamaları kullanın:
-
k8s.aliyun.com/eci-vswitch: Birden fazla kullanılabilirlik alanı kullanmak için birden fazla vSwitch belirtin.
NotBir ECI pod'u
k8s.aliyun.com/eci-vswitchek açıklamasını kullanıyorsa dinamik olarak sağlanan bir diski bağlarkenWaitForFirstConsumertüründe bir StorageClass kullanmayı desteklemez. -
k8s.aliyun.com/eci-schedule-strategy: Birden fazla kullanılabilirlik alanı için zamanlama ilkesini yapılandırır. Geçerli değerler
VSwitchOrderedveVSwitchRandomşeklindedir. Bu ilkeler aşağıdaki tabloda açıklanmıştır.NotÇoklu kullanılabilirlik alanı zamanlama ilkesi belirtmezseniz varsayılan olarak
VSwitchRandomilkesi kullanılır.Zamanlama ilkesi
Açıklama
VSwitchOrdered (Sıralı)
-
ECI pod'u bir disk bağlarsa diskin kullanılabilirlik alanı ile Pod'un kullanılabilirlik alanı eşleşmelidir. Bu gereksinimi karşılamayan kullanılabilirlik alanları filtrelenir.
-
Sistem belirtilen kullanılabilirlik alanlarını sırayla deneyerek kaynağı oluşturmaya çalışır. İlk kullanılabilirlik alanında yetersiz envanter varsa ikinciyi dener ve kaynak başarıyla oluşturulana kadar bu şekilde devam eder.
VSwitchRandom (Envanter optimizasyonlu)
-
ECI pod'u bir disk bağlarsa diskin kullanılabilirlik alanı ile Pod'un kullanılabilirlik alanı eşleşmelidir. Bu gereksinimi karşılamayan kullanılabilirlik alanları filtrelenir.
-
Alibaba Cloud optimal envanter zamanlama stratejisine dayalı olarak uygun bir vSwitch (ve buna karşılık gelen kullanılabilirlik alanı) seçer.
-
ECI pod'u bir örnek türü belirtirse zamanlayıcı bu tür için eşleşen rezerve edilmiş örneğe sahip kullanılabilirlik alanlarına öncelik verir.
-
Daha iyi depolama performansına sahip kullanılabilirlik alanlarına öncelik verilir. Aşağıdaki eski kullanılabilirlik alanlarının zamanlama önceliği daha düşüktür:
-
cn-beijing-e, cn-beijing-d
-
cn-shenzhen-a, cn-shenzhen-b, cn-shenzhen-c
-
cn-hangzhou-b, cn-hangzhou-e, cn-hangzhou-f
-
cn-shanghai-a, cn-shanghai-c
-
-
Ek açıklamalar pod'un yapılandırma dosyasındaki meta verilere eklenmelidir. Örneğin bir Deployment oluştururken ek açıklamaları spec.template.metadata bölümüne eklemeniz gerekir.
Elastic Container Instance ile ilgili ek açıklamalar yalnızca bir pod oluşturulduğunda uygulanır. Mevcut bir pod'a bu ek açıklamaları eklemek veya bunları değiştirmek herhangi bir etkiye sahip olmaz.
Aşağıda örnek bir yapılandırma verilmiştir:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-vswitch: "vsw-bp1xpiowfm5vo8o3c****,vsw-bp1rkyjgr1xwoho6k****" # Specify multiple vSwitch IDs.
k8s.aliyun.com/eci-schedule-strategy: "VSwitchOrdered" # Configure the multi-availability zone scheduling policy.
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
Sonraki adımlar
Örneğiniz internete bağlanmak için bir NAT Gateway kullanıyorsa birden fazla vSwitch belirttikten sonra SNAT girişlerinizi güncellemeniz gerekir.
Örneğin mevcut SNAT girişleriniz vSwitch düzeyinde yapılandırılmışsa yeni eklenen vSwitch'ler için yeni girişler eklemeniz gerekir. Bu yeni vSwitch'lerde başlatılan ECI örneklerinin internete erişebilmesini sağlar.