Untuk menghubungkan kluster Kubernetes yang dikelola sendiri yang dihosting pada instance Elastic Compute Service (ECS) ke Elastic Container Instance, Anda harus menyebarkan VNode di dalam kluster. Topik ini menjelaskan cara menyebarkan VNode di kluster Kubernetes yang dikelola sendiri di dalam virtual private cloud (VPC) yang sama.
Informasi latar belakang
Integrasi Elastic Container Instance dengan Kubernetes memberikan solusi bertingkat untuk manajemen sumber daya Kubernetes. Elastic Container Instance menjadwalkan dan mengelola pod di arsitektur bawah, sedangkan Kubernetes mengelola beban kerja di lapisan platform. Jika Anda membuat kluster Kubernetes yang dikelola sendiri pada instance ECS, Anda dapat menyebarkan VNode di dalam kluster untuk menggunakan Elastic Container Instance. Untuk informasi lebih lanjut, lihat Menghubungkan Kluster Kubernetes yang Dikelola Sendiri ke Elastic Container Instance.
Prasyarat
Kluster Kubernetes yang dikelola sendiri versi 1.13 hingga 1.30 telah dibuat pada instance ECS menggunakan kubeadm.
Plug-in jaringan Flannel, Calico, atau Cilium telah diterapkan di dalam kluster.
Instal VNodectl
Elastic Container Instance menyediakan CLI VNodectl untuk menyebarkan dan mengelola VNode. Disarankan untuk menginstal VNodectl pada node master dari kluster Kubernetes.
Hubungkan ke kluster Kubernetes Anda.
Unduh paket instalasi VNodectl.
wget https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnodectl_0.0.5-beta_linux_amd64.tar.gz -O vnodectl.tar.gzEkstrak file paket VNodectl yang telah diunduh.
tar xvf vnodectl.tar.gzSalin file paket yang diekstrak ke direktori yang ditentukan.
cp vnodectl /usr/local/bin/vnode
Konfigurasikan file ~/.vnode/config
Ubah isi file
~/.vnode/config.vim ~/.vnode/configUbah isi file
~/.vnode/configberdasarkan kebutuhan bisnis Anda. Contoh:PentingFile kubeconfig harus memiliki izin
cluster-admin. Jika Anda ingin mengurangi ruang lingkup izin file kubeconfig, lihat Konfigurasikan Kluster.Pastikan alamat apiserver yang ditentukan dalam file kubeconfig dapat diakses oleh VNode.
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 yang terhubung ke VNode. security-group-id: sg-7xv5tcch4kjdr65t**** # ID grup keamanan tempat VNode berada. kubeconfig: /path/to/kubeconfig # File kubeconfig dari kluster. current-context: defaultJalankan VNode untuk memuat konfigurasi dalam konteks.
vnode config set-context <context-name>
Buat VNode
Buat VNode.
vnode createContoh kode berikut menunjukkan contoh keluaran. Nilai parameter VirtualNodeId adalah ID VNode yang dihasilkan.
{"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"}Lihat informasi tentang node.
kubectl get nodeContoh kode berikut menunjukkan contoh keluaran, yang menunjukkan bahwa VNode telah disebarkan di dalam kluster.
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 DaemonSets dijadwalkan ke VNode
DaemonSets tidak dapat berjalan di VNode karena VNode bukanlah node nyata. Setelah Anda membuat VNode, Anda perlu memodifikasi DaemonSet di kube-proxy dan mengonfigurasi nodeAffinity untuk mencegah DaemonSets dijadwalkan ke VNode.
Modifikasi konfigurasi DaemonSet.
kubectl -n kube-system edit ds kube-proxyKonfigurasikan 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 Anda membuat VNode, Anda dapat menggunakan salah satu metode berikut untuk menjadwalkan pod ke VNode. Kemudian, Anda dapat menjalankan pod sebagai instance kontainer elastis di dalam VNode.
Penjadwalan Manual
Anda dapat mengonfigurasi parameter nodeSelector dan tolerations atau menentukan parameter nodeName untuk menjadwalkan pod ke VNode. Untuk informasi lebih lanjut, lihat Jadwalkan Pod ke VNode.
Penjadwalan Otomatis
Setelah Anda menyebarkan komponen eci-profile, Anda dapat menentukan parameter Selector. Dengan cara ini, sistem secara otomatis menjadwalkan pod yang memenuhi kondisi yang ditentukan oleh Selector ke VNode. Untuk informasi lebih lanjut, lihat Gunakan eci-profile untuk Menjadwalkan Pod ke VNode.
Jadikan pod di jaringan overlay kluster Kubernetes yang dikelola sendiri dapat diakses oleh pod berbasis Elastic Container Instance
Pod yang dijadwalkan ke VNode menggunakan antarmuka jaringan elastis (ENI) dari vSwitch di VPC tempat pod tersebut berada. Secara default, pod diberi alamat IP internal.
Pod berbasis Elastic Container Instance tidak dapat mengakses pod di jaringan overlay (Flannel, Calico, atau Cilium) dari kluster Kubernetes yang dikelola sendiri. Namun, pod di jaringan overlay dari kluster Kubernetes yang dikelola sendiri dapat mengakses pod berbasis Elastic Container Instance. Jika pod berbasis Elastic Container Instance perlu mengakses pod di jaringan overlay dari kluster yang dikelola sendiri, tambahkan entri rute ke tabel rute VPC tempat pod berbasis Elastic Container Instance berada. Dengan cara ini, paket dari pod berbasis Elastic Container Instance dapat dirutekan melalui entri rute ke node ECS yang sesuai di kluster yang dikelola sendiri.
Konfigurasi Contoh:
Skenario Contoh
Misalnya, sebuah kluster berisi dua pod. Satu pod (test1) berjalan di VNode. Pod lainnya (test2) berjalan di node ECS. Secara default, test2 dapat mengakses test1, tetapi test1 tidak dapat mengakses test2.
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 sebelah kiri, klik Route Tables.
Beralih ke wilayah tempat instance kontainer elastis berada, temukan tabel rute dari VPC tempat pod berbasis Elastic Container Instance berada, dan klik ID tabel rute.
Pada tab Route Entry List, klik tab Custom Route.
Klik Add Route Entry.
Di kotak dialog yang muncul, konfigurasikan entri rute dan klik OK.
Dalam contoh ini, konfigurasi berikut digunakan:
Destination CIDR Block: Masukkan blok CIDR dari vSwitch yang terhubung ke node ECS. Contoh: 10.88.1.0/24.
Next Hop Type: Pilih ECS Instance dari daftar drop-down.
ECS Instance: Pilih node ECS.
Verifikasi Hasil
Jalankan perintah
kubectl execuntuk masuk ke kontainer test1 dan kemudian jalankan perintahping. Jika Anda dapat melakukan ping ke alamat IP test2, koneksi antara kedua pod telah terbentuk dan test1 dapat mengakses test2.
Referensi
Untuk informasi tentang cara menggunakan VNodectl untuk menyebarkan VNode di kluster Kubernetes yang dikelola sendiri, lihat Gunakan VNodectl untuk Menghubungkan VNode ke Kluster Kubernetes yang Dikelola Sendiri.
Jika Anda tidak ingin menginstal VNodectl, Anda dapat menggunakan konsol Elastic Container Instance atau memanggil operasi API untuk menyebarkan VNode. Untuk informasi lebih lanjut, lihat Secara Manual Menghubungkan VNode ke Kluster Kubernetes yang Dikelola Sendiri.