Deploy virtual node (VNode) di kluster Kubernetes yang dikelola sendiri Anda di ECS untuk menjadwalkan Pod melalui Elastic Container Instance (ECI) dalam VPC yang sama.
Latar Belakang
Elastic Container Instance (ECI) mengelola penjadwalan Pod dan sumber daya pada lapisan infrastruktur, sedangkan Kubernetes menangani manajemen beban kerja di atasnya. Tambahkan VNode ke kluster yang dikelola sendiri Anda di ECS untuk memanfaatkan ECI. Prosedur integrasi lengkap tersedia di Hubungkan kluster Kubernetes yang dikelola sendiri ke ECI.
Prasyarat
-
Kluster Kubernetes yang dikelola sendiri (v1.13–v1.30) di ECS, dibuat dengan kubeadm.
-
Plugin jaringan Flannel, Calico, atau Cilium telah di-deploy di kluster.
Instal vnodectl
ECI menyediakan vnodectl untuk menghubungkan dan mengelola VNode. Kami merekomendasikan menginstalnya pada node bidang kontrol kluster Anda.
-
Hubungkan ke kluster Kubernetes Anda.
-
Unduh paket vnodectl.
wget https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnodectl_0.0.5-beta_linux_amd64.tar.gz -O vnodectl.tar.gz -
Ekstrak paket tersebut.
tar xvf vnodectl.tar.gz -
Pindahkan binari ke direktori dalam PATH Anda.
cp vnodectl /usr/local/bin/vnode
Konfigurasi file ~/.vnode/config
-
Modifikasi file
~/.vnode/config.vim ~/.vnode/configTambahkan konfigurasi Anda. Contoh:
Penting-
kubeconfig memerlukan izin
cluster-admin. Alternatif dengan izin terbatas dijelaskan dalam Konfigurasi kluster. -
VNode harus dapat mengakses alamat server API yang tercantum dalam kubeconfig.
kind: vnode contexts: - name: default # Nama konteks. region-id: cn-hangzhou # ID wilayah. access-key-id: <yourAccessKeyID> # ID AccessKey. access-key-secret: <yourAccessKeySecret> # Rahasia AccessKey. vswitch-id: vsw-7xv2yk45qp5etidgf**** # ID vSwitch tempat VNode berada. security-group-id: sg-7xv5tcch4kjdr65t**** # ID grup keamanan tempat VNode berada. kubeconfig: /path/to/kubeconfig # Path ke file kubeconfig kluster. current-context: default -
-
Tetapkan konteks aktif.
vnode config set-context <context-name>
Buat VNode
-
Buat VNode.
vnode createOutput mencakup VirtualNodeId:
{"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"} -
Verifikasi node tersebut.
kubectl get nodeVNode muncul dengan STATUS Ready:
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
Cegah penjadwalan DaemonSet ke VNode
Karena VNode adalah node virtual, ia tidak dapat menjalankan DaemonSet. Setelah membuat VNode, Anda harus memodifikasi DaemonSet kube-proxy dan mengonfigurasi nodeAffinity agar tidak dijadwalkan ke VNode.
-
Modifikasi konfigurasi DaemonSet.
kubectl -n kube-system edit ds kube-proxy -
Konfigurasi nodeAffinity.
Tambahkan konten YAML berikut ke
spec.template.spec:affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet
Jadwalkan Pod ke VNode
Setelah membuat VNode, Anda dapat menjadwalkan Pod ke VNode dengan salah satu metode berikut:
-
Penjadwalan manual
Anda dapat menjadwalkan Pod secara manual ke VNode dengan mengonfigurasi nodeSelector dan tolerations, atau dengan menentukan nodeName. Untuk informasi lebih lanjut, lihat Jadwalkan Pod ke VNode.
-
Penjadwalan otomatis
Setelah Anda deploy komponen eci-profile, Anda dapat mengonfigurasi selector kustom untuk secara otomatis menjadwalkan Pod yang memenuhi syarat ke VNode. Untuk informasi lebih lanjut, lihat Gunakan eci-profile untuk menjadwalkan Pod ke VNode.
Buat konektivitas jaringan Pod
Pod pada VNode menerima ENI dan alamat IP internal dari vSwitch VPC.
Secara default, Pod VNode tidak dapat mengakses Pod pada jaringan overlay kluster (Flannel, Calico, atau Cilium), meskipun sebaliknya berfungsi. Tambahkan entri rute ke tabel rute VPC untuk mengarahkan lalu lintas outbound dari Pod VNode ke node ECS yang tepat.
Contoh konfigurasi rute:
-
Skenario contoh
Dalam contoh ini, test1 berjalan di VNode dan test2 di node ECS. Secara default, test2 dapat mengakses test1, tetapi tidak sebaliknya.
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> -
Prosedur
-
Masuk ke Konsol VPC.
-
Di panel navigasi kiri, klik Route Tables.
-
Beralih ke wilayah kluster Anda, temukan tabel rute VPC, lalu klik ID-nya.
-
Pada tab Route Entry List, klik tab Custom Route.
-
Klik Add Route Entry.
-
Pada panel Add route entry, konfigurasikan entri rute lalu klik OK.
Contoh konfigurasi:
-
Destination CIDR Block: Masukkan blok CIDR untuk Pod pada node ECS target, misalnya 10.88.1.0/24.
-
Next Hop Type: Pilih ECS Instance.
-
ECS Instance: Pilih node ECS target.
-
-
-
Verifikasi hasil
Jalankan
kubectl execuntuk membuka shell di test1 dan ping test2. Tanggapan sukses mengonfirmasi bahwa test1 kini dapat mengakses test2.
Dokumen terkait
-
Untuk menghubungkan tanpa vnodectl, gunakan Konsol atau OpenAPI. Hubungkan ke VNode (Manual).