Déploiement d'un contrôleur Ingress Kubernetes avec DaemonSet

Solution d'haute disponibilité pour Ingress Controller

Les contrôleurs Ingress sont généralement déployés via DaemonSet avec nodeSelector sur des nœuds spécifiques, qui sont ensuite intégrés à un équilibreur de charge externe pour exposer les services.

Exemple de déploimeent multi-instance d'Ingress Controller

1. Vérification de l'état actuel
[root@k8s-master ingress]# kubectl get pod -n ingress-nginx 
NAME                                       READY   STATUT    REDEMARRAGES   ÂGE
nginx-ingress-controller-5dc64b58f-ctjfd   1/1     Running   0          23h
2. Suppression du déploiement existant
[root@k8s-master ingress]# kubectl delete deploy nginx-ingress-controller -n ingress-nginx 
déploiement "nginx-ingress-controller" supprimé
3. Configuration du déploiement
Étiquetage des nœuds
[root@k8s-master ~]# kubectl label nodes k8s-node1 role=ingress
node/k8s-node1 étiqueté
    
[root@k8s-master ~]# kubectl label nodes k8s-node2 role=ingress
node/k8s-node2 étiqueté
Modification du manifeste YAML
kind: DaemonSet  # Anciennement Deployment
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx
spec:
  selector:
    matchLabels:
      app: nginx-ingress
  template:
    spec:
      nodeSelector:
        role: ingress  # Sélection par étiquette personnalisée
      hostNetwork: true
      containers:
        - name: controller
          image: registry.example.com/nginx-ingress:1.2.3
          ports:
            - containerPort: 80
            - containerPort: 443
          env:
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          livenessProbe:
            httpGet:
              path: /healthz
              port: 10254
          readinessProbe:
            httpGet:
              path: /healthz
              port: 10254
Déploiement et validation
[root@k8s-master ~]# kubectl apply -f ingress-controller.yaml 
espace de noms/ingress-nginx créé
daemonset.apps/nginx-ingress-controller déployé

[root@k8s-master ~]# kubectl get pods -n ingress-nginx -o wide
NAME                             READY   STATUT    REDEMARRAGES   ÂGE   IP            NOEUD       NOEUD DÉSIGNÉ   GATES
nginx-ingress-controller-k9cf9   1/1     Running   0          2m    192.168.0.202   k8s-node1   <none>           <none>
nginx-ingress-controller-kvxr8   1/1     Running   0          2m    192.168.0.203   k8s-node2   <none>           <none></none></none></none></none>

Étiquettes: kubernetes ingress daemonset node-selector High-Availability

Publié le 19 août à 07h45