ECS üzerinde çalışan kendi yönettiğiniz Kubernetes kümenizde sanal bir düğüm (VNode) dağıtarak aynı VPC içindeki Elastic Container Instance (ECI) üzerinden podları zamanlayabilirsiniz.
Arka plan
ECI, altyapı katmanında pod zamanlamasını ve kaynak yönetimini üstlenir; Kubernetes ise bunun üzerinde iş yükü yönetimini sağlar. ECI kullanmak için ECS üzerindeki kendi yönettiğiniz kümenize bir VNode ekleyin. Kendi yönettiğiniz Kubernetes kümesini ECI'ye bağlama konusu, entegrasyon sürecinin tamamını kapsar.
Ön koşullar
kubeadm ile oluşturulmuş, ECS üzerinde çalışan kendi yönettiğiniz bir Kubernetes kümesi (v1.13–1.30).
Kümede Flannel, Calico veya Cilium ağ eklentisinin dağıtılmış olması.
vnodectl yükleme
ECI, VNode'ları bağlamak ve yönetmek için vnodectl aracını sağlar. Bu aracı, kümenizin kontrol düzlemi düğümlerinden birine yüklemeniz önerilir.
Kubernetes kümenize bağlanın.
-
VNodectl paketini indirin.
wget https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnodectl_0.0.5-beta_linux_amd64.tar.gz -O vnodectl.tar.gz -
Paketi çıkarın.
tar xvf vnodectl.tar.gz -
İkili dosyayı PATH değişkeninizdeki bir dizine taşıyın.
cp vnodectl /usr/local/bin/vnode
~/.vnode/config dosyasını yapılandırma
-
~/.vnode/configdosyasını düzenleyin.vim ~/.vnode/configYapılandırmanızı ekleyin. Örnek:
Önemlikubeconfig dosyasının
cluster-adminizinlerine sahip olması gerekir. Sınırlı izinlere sahip alternatif yaklaşımlar için Küme yapılandırması konusuna bakın.VNode'un, kubeconfig içindeki API sunucu adresine erişebilmesi gerekir.
kind: vnode contexts: - name: default # The name of the context. region-id: cn-hangzhou # The region ID. access-key-id: <yourAccessKeyID> # The AccessKey ID. access-key-secret: <yourAccessKeySecret> # The AccessKey secret. vswitch-id: vsw-7xv2yk45qp5etidgf**** # The ID of the vSwitch to which the VNode belongs. security-group-id: sg-7xv5tcch4kjdr65t**** # The ID of the security group to which the VNode belongs. kubeconfig: /path/to/kubeconfig # The path to the cluster's kubeconfig file. current-context: default -
Aktif bağlamı ayarlayın.
vnode config set-context <context-name>
VNode oluşturma
-
Bir VNode oluşturun.
vnode createÇıktı, VirtualNodeId değerini içerir:
{"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"} -
Düğümü doğrulayın.
kubectl get nodeVNode, STATUS Ready durumuyla listelenir:
NAME STATUS ROLES AGE VERSION cn-hangzhou.vnd-7xvetkyase7gb62u**** Ready agent 174m v1.20.6 vnode-test001 Ready control-plane,master 23h v1.20.6 vnode-test002 Ready <none> 22h v1.20.6
DaemonSet'in VNode'a zamanlanmasını engelleme
VNode sanal bir düğümdür ve DaemonSet'leri çalıştıramaz. Bir VNode oluşturduktan sonra, DaemonSet'lerin VNode'a zamanlanmasını önlemek için kube-proxy DaemonSet'ine bir nodeAffinity eklemeniz gerekir.
-
DaemonSet yapılandırmasını düzenleyin.
kubectl -n kube-system edit ds kube-proxy -
nodeAffinity yapılandırmasını ekleyin.
Aşağıdaki YAML bloğunu
spec.template.specbölümüne ekleyin:affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet
Podları VNode'a zamanlama
Bir VNode oluşturduktan sonra, podları VNode üzerinde ECI örnekleri olarak çalışacak şekilde zamanlamak için aşağıdaki yöntemleri kullanabilirsiniz.
-
Manuel zamanlama
nodeSelector ve tolerations yapılandırarak veya nodeName belirterek podları manuel olarak bir VNode'a zamanlayabilirsiniz. Daha fazla bilgi için Podları VNode'a zamanlama konusuna bakın.
-
Otomatik zamanlama
eci-profile bileşenini dağıttıktan sonra, eşleşen podları otomatik olarak VNode'a zamanlamak için özel bir seçici yapılandırabilirsiniz. Daha fazla bilgi için eci-profile kullanarak podları VNode'a zamanlama konusuna bakın.
Pod ağ bağlantısını kurma
VNode üzerindeki podlar, VPC vSwitch'ten bir ENI ve bir iç IP adresi alır.
Varsayılan olarak, VNode podları küme overlay ağındaki (Flannel, Calico veya Cilium) podlara ulaşamaz; ancak tersi mümkündür. VNode podlarının giden trafiğini doğru ECS düğümlerine yönlendirmek için VPC yönlendirme tablosuna bir rota girişi ekleyin.
Örnek rota yapılandırması:
-
Örnek senaryo
Bu örnekte test1 VNode üzerinde, test2 ise bir ECS düğümünde çalışır. Varsayılan olarak test2, test1'e ulaşabilir; ancak test1, test2'ye ulaşamaz.
NAME READY RESTARTS AGE IP NODE NOMINATED NODE READINESS NODE test1 1/1 0 58s 192.168.0.245 cn-hangzhou.vnd-7xvetkyase7gb62u**** <none> <none> test2 1/1 0 35s 10.88.1.4 vnode-test002 <none> <none> -
Yordam
VPC konsolu üzerinden oturum açın.
Sol gezinme bölmesinde Route Tables seçeneğine tıklayın.
Kümenizin bulunduğu bölgeye geçin, VPC yönlendirme tablosunu bulun ve kimliğine tıklayın.
Route Entry List sekmesinde Custom Route sekmesine tıklayın.
Add Route Entry seçeneğine tıklayın.
-
Rota girişi ekleme panelinde rotayı yapılandırın ve OK seçeneğine tıklayın.
Örnek yapılandırma:
Destination CIDR Block: Hedef ECS düğümündeki podlar için CIDR bloğunu girin (örneğin, 10.88.1.0/24).
Next Hop Type: ECS Instance seçeneğini belirleyin.
ECS Instance: Hedef ECS düğümünü seçin.
-
Sonucu doğrulama
test1 podunda bir kabuk açmak ve test2'yi ping etmek için
kubectl execkomutunu çalıştırın. Başarılı bir yanıt, test1'in artık test2'ye erişebildiğini gösterir.
İlgili belgeler
VNodectl olmadan bağlanmak için konsolu veya OpenAPI'yı kullanın. VNode'a manuel bağlanma konusuna bakın.