Certaines applications nécessitent qu'un pod conserve la même adresse IP. Cette rubrique explique comment configurer un pod Elastic Container Instance (ECI) afin d'utiliser une adresse IP fixe.
Fonctionnement
Par défaut, lors de la création d'un pod ECI, le système attribue au pod une adresse IP aléatoire issue du bloc CIDR du vSwitch spécifié dans le profil eci-profile. Lorsqu'un pod est supprimé suite à une défaillance, le système libère son adresse IP et en attribue une nouvelle au pod de remplacement. Dans certains scénarios, par exemple lorsqu'un service est exposé directement via son adresse IP, un pod peut nécessiter une adresse IP fixe pour garantir la continuité des activités.
Pour répondre à ces besoins, ECI propose la fonctionnalité d'adresse IP fixe. Lorsque vous créez un pod ECI avec cette fonctionnalité activée, le système alloue deux adresses IP depuis le vSwitch configuré : une adresse IP dynamique, invisible au sein du cluster, et une adresse IP fixe. Après la suppression du pod, le système conserve son adresse IP fixe pendant une période déterminée, qui est de 48 heures par défaut. Si un nouveau pod est créé durant cette période de conservation et présente le même ID de cluster, le même namespace et le même nom de pod que le pod supprimé, tout en ayant également la fonctionnalité d'adresse IP fixe activée, le système attribue l'adresse IP conservée au nouveau pod. Cela garantit la stabilité de l'adresse IP du pod.
Dans ce scénario, utilisez un StatefulSet pour déployer votre application. Lorsqu'un pod d'un StatefulSet est supprimé, le système crée automatiquement un nouveau pod avec le même namespace et le même nom de pod.
Configuration
Ajoutez des annotations aux métadonnées du pod pour activer la fonctionnalité d'adresse IP fixe et configurer la durée de conservation de cette adresse. Le tableau suivant décrit ces annotations.
|
Annotation |
Exemple |
Description |
|
k8s.aliyun.com/eci-fixed-ip |
"true" |
Définissez sur |
|
k8s.aliyun.com/eci-fixed-ip-retain-hour |
"24" |
Nombre d'heures pendant lesquelles l'adresse IP fixe est conservée après la suppression du pod. Si omis, la valeur par défaut est de 48 heures. |
Procédure
-
Créez un Service et un StatefulSet.
kubectl apply -f fixedIp.yamlLe fichier
fixedIp.yamlsuivant définit un Service et un StatefulSet. Le StatefulSet inclut un pod ECI avec l'annotation qui active la fonctionnalité d'adresse IP fixe.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" # Enable the fixed IP address feature. 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 -
Exécutez la commande suivante pour surveiller les changements d'état des pods.
kubectl get pod -o wide -wLa sortie indique que le StatefulSet a créé un pod nommé
web-0avec l'adresse 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> -
Ouvrez un nouveau terminal pour vous connecter au cluster et exécutez la commande suivante afin de supprimer le pod du StatefulSet.
kubectl delete pod web-0 -
Revenez au premier terminal et continuez d'observer les changements d'état du pod.
La sortie montre qu'après la suppression du pod initial, le StatefulSet crée automatiquement un nouveau pod qui réutilise l'adresse IP d'origine.
RemarqueLa création du nouveau pod peut être retardée car l'adresse IP reste occupée jusqu'à la suppression complète du pod précédent.
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>