Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi.

Équilibreur de charge de cluster

Cette section décrit comment installer un équilibreur de charge externe devant les nœuds serveur d’un cluster K3s à haute disponibilité (HA). Deux exemples sont fournis : Nginx et HAProxy.

Les équilibreurs de charge externes ne doivent pas être confondus avec le ServiceLB intégré, qui est un contrôleur intégré permettant d’utiliser les services Kubernetes LoadBalancer sans déployer un contrôleur d’équilibreur de charge tiers. Pour plus de détails, voir ServiceLB.

Les équilibreurs de charge externes peuvent être utilisés pour fournir une adresse d’enregistrement fixe pour l’enregistrement des nœuds, ou pour l’accès externe au serveur API Kubernetes. Pour exposer les services LoadBalancer, les équilibreurs de charge externes peuvent être utilisés en complément ou à la place de ServiceLB, mais dans la plupart des cas, des contrôleurs d’équilibreur de charge de remplacement tels que MetalLB ou Kube-VIP sont un meilleur choix.

Conditions préalables

Tous les nœuds dans cet exemple fonctionnent sous Ubuntu 20.04.

Pour les deux exemples, supposons qu’un cluster HA K3s avec etcd intégré a été installé sur 3 nœuds.

Chaque serveur k3s est configuré avec :

# /etc/rancher/k3s/config.yaml
token: lb-cluster-gd
tls-san: 10.10.10.100

Les nœuds ont des noms d’hôte et des adresses IP de :

  • serveur-1 : 10.10.10.50

  • serveur-2 : 10.10.10.51

  • serveur-3 : 10.10.10.52

Deux nœuds supplémentaires pour l’équilibrage de la charge sont configurés avec des noms d’hôte et des adresses IP de :

  • lb-1 : 10.10.10.98

  • lb-2 : 10.10.10.99

Trois nœuds supplémentaires existent avec des noms d’hôte et des adresses IP de :

  • agent-1 : 10.10.10.101

  • agent-2 : 10.10.10.102

  • agent-3 : 10.10.10.103

Configurer l’équilibreur de charge

  • HAProxy

  • Nginx

HAProxy est une option Open Source qui fournit un équilibreur de charge TCP. Il prend également en charge la haute disponibilité pour l’équilibreur de charge lui-même, garantissant la redondance à tous les niveaux. Voir Documentation HAProxy pour plus d’informations.

De plus, nous utiliserons KeepAlived pour générer une adresse IP virtuelle (VIP) qui sera utilisée pour accéder au cluster. Voir Documentation KeepAlived pour plus d’informations.

  1. Installer HAProxy et KeepAlived :

    sudo apt-get install haproxy keepalived
  2. Ajouter ce qui suit à /etc/haproxy/haproxy.cfg sur lb-1 et lb-2 :

    frontend k3s-frontend
        bind *:6443
        mode tcp
        option tcplog
        default_backend k3s-backend
    
    backend k3s-backend
        mode tcp
        option tcp-check
        balance roundrobin
        default-server inter 10s downinter 5s
        server server-1 10.10.10.50:6443 check
        server server-2 10.10.10.51:6443 check
        server server-3 10.10.10.52:6443 check
  3. Ajouter ce qui suit à /etc/keepalived/keepalived.conf sur lb-1 et lb-2 :

    global_defs {
      enable_script_security
      script_user root
    }
    
    vrrp_script chk_haproxy {
        script 'killall -0 haproxy' # faster than pidof
        interval 2
    }
    
    vrrp_instance haproxy-vip {
        interface eth1
        state <STATE> # MASTER on lb-1, BACKUP on lb-2
        priority <PRIORITY> # 200 on lb-1, 100 on lb-2
    
        virtual_router_id 51
    
        virtual_ipaddress {
            10.10.10.100/24
        }
    
        track_script {
            chk_haproxy
        }
    }
  4. Redémarrer HAProxy et KeepAlived sur lb-1 et lb-2 :

    systemctl restart haproxy
    systemctl restart keepalived
  5. Sur agent-1, agent-2 et agent-3, exécutez la commande suivante pour installer k3s et rejoindre le cluster :

    curl -sfL https://get.k3s.io | INSTALL_K3S_ARTIFACT_URL=<PRIME-ARTIFACTS-URL>/k3s K3S_TOKEN=lb-cluster-gd sh -s - agent --server https://10.10.10.100:6443

    INSTALL_K3S_ARTIFACT_URL est l’URL des artefacts Prime

    Vous pouvez maintenant utiliser kubectl depuis le nœud serveur pour interagir avec le cluster.

    root@server-1 $ k3s kubectl get nodes -A
    NAME       STATUS   ROLES                       AGE     VERSION
    agent-1    Ready    <none>                      32s     v1.27.3+k3s1
    agent-2    Ready    <none>                      20s     v1.27.3+k3s1
    agent-3    Ready    <none>                      9s      v1.27.3+k3s1
    server-1   Ready    control-plane,etcd,master   4m22s   v1.27.3+k3s1
    server-2   Ready    control-plane,etcd,master   3m58s   v1.27.3+k3s1
    server-3   Ready    control-plane,etcd,master   3m12s   v1.27.3+k3s1

Nginx ne prend pas en charge nativement une configuration de haute disponibilité (HA). Si vous configurez un cluster HA, avoir un seul équilibreur de charge devant K3s réintroduira un point de défaillance unique.

Nginx Open Source fournit un équilibreur de charge TCP. Voir Utiliser nginx comme équilibreur de charge HTTP pour plus d’informations.

  1. Créez un fichier nginx.conf sur lb-1 avec le contenu suivant :

    events {}
    
    stream {
      upstream k3s_servers {
        server 10.10.10.50:6443;
        server 10.10.10.51:6443;
        server 10.10.10.52:6443;
      }
    
      server {
        listen 6443;
        proxy_pass k3s_servers;
      }
    }
  2. Exécutez l’équilibreur de charge Nginx sur lb-1:

    En utilisant Docker :

    docker run -d --restart unless-stopped \
        -v ${PWD}/nginx.conf:/etc/nginx/nginx.conf \
        -p 6443:6443 \
        nginx:stable

    Ou installez nginx puis exécutez :

    cp nginx.conf /etc/nginx/nginx.conf
    systemctl start nginx
  3. Sur agent-1, agent-2 et agent-3, exécutez la commande suivante pour installer k3s et rejoindre le cluster :

    curl -sfL https://get.k3s.io | INSTALL_K3S_ARTIFACT_URL=<PRIME-ARTIFACTS-URL>/k3s K3S_TOKEN=lb-cluster-gd sh -s - agent --server https://10.10.10.98:6443

    Vous pouvez maintenant utiliser kubectl depuis le nœud serveur pour interagir avec le cluster.

    root@server1 $ k3s kubectl get nodes -A
    NAME       STATUS   ROLES                       AGE     VERSION
    agent-1    Ready    <none>                      30s     v1.27.3+k3s1
    agent-2    Ready    <none>                      22s     v1.27.3+k3s1
    agent-3    Ready    <none>                      13s     v1.27.3+k3s1
    server-1   Ready    control-plane,etcd,master   4m49s   v1.27.3+k3s1
    server-2   Ready    control-plane,etcd,master   3m58s   v1.27.3+k3s1
    server-3   Ready    control-plane,etcd,master   3m16s   v1.27.3+k3s1