Beberapa aplikasi memerlukan pod yang mempertahankan alamat IP konsisten. Topik ini menjelaskan cara mengonfigurasi pod Elastic Container Instance (ECI) agar menggunakan alamat IP tetap.
Cara Kerja
Secara default, saat Anda membuat pod ECI, sistem menetapkan alamat IP acak dari Blok CIDR vSwitch yang ditentukan dalam eci-profile. Jika pod dilepas akibat kegagalan, alamat IP-nya akan dilepaskan dan alamat baru diberikan kepada pod penggantinya. Dalam skenario tertentu—misalnya ketika layanan diekspos langsung melalui alamat IP-nya—pod mungkin memerlukan alamat IP tetap untuk memastikan kelangsungan bisnis.
Untuk mengatasi hal tersebut, ECI menyediakan fitur alamat IP tetap. Saat Anda membuat pod ECI dengan fitur ini diaktifkan, sistem mengalokasikan dua alamat IP dari vSwitch yang dikonfigurasi: alamat IP dinamis (tidak terlihat di dalam kluster) dan alamat IP tetap. Setelah pod dilepas, sistem menyimpan alamat IP tetap tersebut selama periode retensi—secara default 48 jam. Jika pod baru dibuat dalam periode retensi ini dengan ID kluster, namespace, dan nama pod yang sama seperti pod sebelumnya serta juga mengaktifkan fitur alamat IP tetap, sistem akan menetapkan kembali alamat IP yang disimpan ke pod baru. Hal ini memastikan konsistensi alamat IP pod.
Dalam skenario ini, Anda dapat menggunakan StatefulSet untuk men-deploy aplikasi Anda. Saat sebuah pod dalam StatefulSet dilepas, sistem secara otomatis membuat pod baru dengan namespace dan nama pod yang sama.
Konfigurasi
Tambahkan Anotasi ke metadata pod untuk mengaktifkan fitur alamat IP tetap dan mengonfigurasi periode retensi alamat IP tersebut. Tabel berikut menjelaskan anotasi-anotasi tersebut.
|
Anotasi |
Contoh |
Deskripsi |
|
k8s.aliyun.com/eci-fixed-ip |
"true" |
Atur ke |
|
k8s.aliyun.com/eci-fixed-ip-retain-hour |
"24" |
Jumlah jam untuk menyimpan alamat IP tetap setelah pod dilepas. Jika tidak ditentukan, nilai default-nya adalah 48 jam. |
Prosedur
-
Buat Service dan StatefulSet.
kubectl apply -f fixedIp.yamlFile
fixedIp.yamlberikut mendefinisikan Service dan StatefulSet. StatefulSet mencakup pod ECI dengan anotasi yang mengaktifkan fitur alamat IP tetap.apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: selector: matchLabels: app: nginx serviceName: "nginx" minReadySeconds: 10 template: metadata: annotations: k8s.aliyun.com/eci-fixed-ip: "true" # Aktifkan fitur alamat IP tetap. labels: app: nginx alibabacloud.com/eci: "true" spec: containers: - name: nginx image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 ports: - containerPort: 80 name: web -
Jalankan perintah berikut untuk memantau perubahan status pod.
kubectl get pod -o wide -wOutput menunjukkan bahwa StatefulSet membuat pod bernama
web-0dengan alamat IP172.16.0.129.d:~$ kubectl get pod -o wide -w NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES web-0 0/1 Pending 0 9s <none> <none> <none> <none> web-0 0/1 Pending 0 20s <none> <none> <none> <none> web-0 0/1 Pending 0 20s <none> virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 Pending 0 20s <none> virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 ContainerCreating 0 69s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none> web-0 1/1 Running 0 76s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none> -
Buka terminal baru untuk terhubung ke kluster dan jalankan perintah berikut untuk menghapus pod dalam StatefulSet.
kubectl delete pod web-0 -
Kembali ke terminal pertama dan terus amati perubahan status pod.
Output menunjukkan bahwa setelah pod asli dihapus, StatefulSet secara otomatis membuat pod baru yang menggunakan kembali alamat IP aslinya.
CatatanPembuatan pod baru mungkin tertunda karena alamat IP tetap masih dalam keadaan terpakai hingga pod sebelumnya benar-benar dihapus.
1:~$ kubectl get pod -o wide -w NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES web-0 0/1 Pending 0 9s <none> <none> <none> <none> web-0 0/1 Pending 0 20s <none> <none> <none> <none> web-0 0/1 Pending 0 20s <none> virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 Pending 0 20s <none> virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 ContainerCreating 0 69s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none> web-0 1/1 Running 0 76s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none> web-0 1/1 Terminating 0 2m37s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 Terminating 0 2m39s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 Terminating 0 2m55s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 Terminating 0 2m55s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 Pending 0 0s <none> <none> <none> web-0 0/1 Pending 0 0s <none> <none> <none> web-0 0/1 Pending 0 1s <none> <none> <none> web-0 0/1 Pending 0 1s <none> <none> <none> web-0 0/1 Pending 0 17s <none> <none> <none> web-0 0/1 Pending 0 17s <none> virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 Pending 0 17s <none> virtual-kubelet-cn-beijing-h <none> <none> web-0 0/1 ContainerCreating 0 69s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none> web-0 1/1 Running 0 76s 172.16.0.129 virtual-kubelet-cn-beijing-h <none> <none>