DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»Configuration du cluster Kubernetes sur Ubuntu, expliquée
    Uncategorized

    Configuration du cluster Kubernetes sur Ubuntu, expliquée

    février 28, 2023
    Configuration du cluster Kubernetes sur Ubuntu, expliquée
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Introduction

    Le but de cet article est de fournir des directives aux personnes intéressées par les détails de la configuration du cluster Kubernetes, la compréhension de l’interconnexion des pods et d’autres aspects liés au cluster Kubernetes.

    Cet article a fourni les détails de la configuration du cluster Kubernetes sur Ubuntu. Les sujets principaux sont les suivants :

    • Présentation de l’architecture Kubernetes
    • Interface réseau de conteneurs avec Calico
    • Procédures détaillées de configuration du cluster Kubernetes
    • Procédures de dépannage

    Pour la configuration de Kubernetes, j’utilise un cluster à trois nœuds dans lequel nous avons un nœud maître et deux nœuds de travail. Voici les types spécifiques pour le cluster Kubernetes

    • Exécution du conteneur : conteneur
    • Stratégie réseau et CNI : Calicot
    • Système opérateur: Ubuntu

    Présentation de l’architecture

    Le schéma suivant illustre les composants des clusters Kubernetes. Les nœuds Kubernetes se divisent en deux catégories : le plan de contrôle et les nœuds de travail. Toutes les applications s’exécutent sur les nœuds de travail en tant que conteneurs à l’intérieur du pod.

    Cliquez ici pour plus de détails.

    Quelques points clés à noter :

    • Le serveur d’API est le cerveau du cluster. Pratiquement toute la communication et l’administration sont réalisées par ce composant
    • La communication entre les nœuds de travail et le plan de contrôle se fait via des kubelets et un serveur API.

    Architecture des composants Kubernetes

    Architecture des composants Kubernetes

    Pour la politique CNI/réseau, j’utilise Calio. Il existe de nombreux fournisseurs de CNI. Le tableau suivant est un résumé clé des fournisseurs CNI open source :

    Flanelle Calicot le cil Filet Canal
    Mode de déploiement Ensemble de démons Ensemble de démons Ensemble de démons Ensemble de démons Ensemble de démons
    Encapsulation et routage VxLAN IPinIP, BGP, eBPF VxLAN, eBPF VxLAN VxLAN
    Prise en charge des politiques de réseau Oui Oui Oui Oui Oui
    Magasin de données utilisé etc. etc. etc. Non etc.
    Chiffrement Oui Oui Oui Oui Non
    Prise en charge de l’entrée Non Oui Oui Oui Oui
    Assistance aux entreprises Oui Oui Non Oui Non

    Trois grands fournisseurs de cloud, Azure, GCP et AWS ont le CNI suivant :

    • Microsoft a Azure CNI
    • Google GKE utilise kubenet CNI qui se trouve au-dessus de Calico
    • AWS utilise Amazon VPN CNI

    Mise en réseau des pods Kubernetes avec Calico

    Mise en réseau des pods Kubernetes avec Calico

    Détails de configuration

    Dans cette section, je décrirai les détails de la configuration du cluster Kubernetes.

    Pré-installation

    Configurez la saisie semi-automatique de Kubeetc sur le nœud maître :

    Ajoutez ce qui suit au ~/.bashrc sur le nœud maître :

    source <(kubectl completion bash) # set up autocomplete in bash into the current shell, bash-completion package should be installed first.
    echo "source <(kubectl completion bash)" >> ~/.bashrc # add autocomplete permanently to your bash shell.

    alias k=kubectl
    complete -o default -F __start_kubectl k

    Visitez la feuille de triche de Kubectl

    Commandes communes sur tous les nœuds

    Changer le nom d’hôte

    sudo hostnamectl set-hostname "k8smaster.ggl.com" 
    sudo hostnamectl set-hostname "k8sworker1.ggl.com" 
    sudo hostnamectl set-hostname "k8sworker2.ggl.com"

    Ajouter des entrées à /Etc/Hosts

    172.31.105.189 k8smaster.ggl.com k8smaster
    172.31.104.148 k8sworker1.ggl.com k8sworker1
    172.31.100.4 k8sworker1.ggl.com k8sworker2

    Désactiver l’échange

    sudo swapoff -a
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    cat /etc/fstab

    Remarque : La raison de la désactivation de l’échange de mémoire (swapoff) est pour des raisons de stabilité et de performances. Il s’agit de l’étape requise dans toute configuration Kubernetes (AKS, GKE, EKS).

    Charger les modules du noyau

    sudo tee /etc/modules-load.d/containerd.conf <<EOF
    overlay
    br_netfilter
    EOF
    sudo modprobe overlay
    sudo modprobe br_netfilter
    lsmod | egrep "overlay|br_net"

    Remarque : Kubernetes utilise un module de noyau superposé pour les systèmes de fichiers. Noyau Linux br_netfilter sert à transférer le trafic IP4 et à permettre à iptable de voir le trafic ponté.

    Définir les paramètres du noyau

    sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    sudo sysctl --system

    Activer le référentiel Docker

    sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

    Installer et activer le runtime en conteneur

    sudo apt update
    sudo apt install -y containerd.io
    containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
    sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
    cat /etc/containerd/config.toml
    
    sudo systemctl restart containerd.service
    sudo systemctl enable containerd
    sudo systemctl status containerd

    Ajouter un référentiel Kubernetes

    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
    sudo apt update

    Installer kubeadm kubelet kubectl

    sudo apt install -y kubelet kubeadm kubectl
    
    

    Après avoir exécuté les commandes ci-dessus sur tous les nœuds (nœuds maître et nœud de travail), nous devrons effectuer les opérations suivantes :

    1. Initialiser les clusters Kubernetes avec la commande kubeadm init
    2. Faire en sorte que les noeuds worker rejoignent le cluster

    Commandes de configuration du plan de contrôle

    Initialiser le cluster Kubernetes

    sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint=k8smaster.ggl.com
    

    Voici la sortie de la commande kubeadm init :

    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    Alternatively, if you are the root user, you can run:
    
      export KUBECONFIG=/etc/kubernetes/admin.conf
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    You can now join any number of control-plane nodes by copying certificate authorities
    and service account keys on each node and then running the following as root:
    
      kubeadm join k8smaster.ggl.com:6443 --token 7sx7ky.z54u1q0pexh5vh25 \
    	--discovery-token-ca-cert-hash sha256:6cce1257cfdbd54c981ad64e2a553711e276afc402a52e3899a4725470902686 \
    	--control-plane
    
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join k8smaster.ggl.com:6443 --token 7sx7ky.z54u1q0pexh5vh25 \
    	--discovery-token-ca-cert-hash sha256:6cce1257cfdbd54c981ad64e2a553711e276afc402a52e3899a4725470902686
    
    

    Note: the joining commands for master nodes and worker node are different with only option --control-plane.

    Vous pouvez exécuter kubectl get nodes pour vérifier le nœud, mais vous verrez que le nœud est dans l’état NOT ready. C’est parce que nous n’avons pas installé le CNI.

    Installer l’interface réseau de conteneurs Calico (CNI)

    kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml

    Vérifier les informations du cluster

    $ kubectl get nodes
    NAME STATUS ROLES AGE VERSION
    k8smaster.ggl.com Ready control-plane 6m22s v1.26.1

    Remarque : Pour le moment, nous n’avons pas encore rejoint le nœud de travail. Ainsi, nous n’avons qu’un seul nœud à l’état prêt.

    Ouvrir les ports Kubernetes

    $ sudo lsof -iTCP -nP | egrep LISTEN
    systemd-r 515 systemd-resolve 14u IPv4 15918 0t0 TCP 127.0.0.53:53 (LISTEN)
    sshd 935 root 3u IPv4 17128 0t0 TCP *:22 (LISTEN)
    sshd 935 root 4u IPv6 17130 0t0 TCP *:22 (LISTEN)
    node 1464 root 18u IPv4 20071 0t0 TCP *:31297 (LISTEN)
    container 3743 root 13u IPv4 35540 0t0 TCP 127.0.0.1:45019 (LISTEN)
    kube-sche 6398 root 7u IPv4 47451 0t0 TCP 127.0.0.1:10259 (LISTEN)
    kube-cont 6425 root 7u IPv4 47423 0t0 TCP 127.0.0.1:10257 (LISTEN)
    kube-apis 6446 root 7u IPv6 48257 0t0 TCP *:6443 (LISTEN)
    etcd 6471 root 7u IPv4 47402 0t0 TCP 172.31.105.189:2380 (LISTEN)
    etcd 6471 root 8u IPv4 47406 0t0 TCP 127.0.0.1:2379 (LISTEN)
    etcd 6471 root 9u IPv4 47407 0t0 TCP 172.31.105.189:2379 (LISTEN)
    etcd 6471 root 14u IPv4 48266 0t0 TCP 127.0.0.1:2381 (LISTEN)
    kubelet 6549 root 23u IPv6 47676 0t0 TCP *:10250 (LISTEN)
    kubelet 6549 root 26u IPv4 47683 0t0 TCP 127.0.0.1:10248 (LISTEN)
    kube-prox 6662 root 14u IPv4 49323 0t0 TCP 127.0.0.1:10249 (LISTEN)
    kube-prox 6662 root 15u IPv6 49330 0t0 TCP *:10256 (LISTEN)
    calico-no 7377 root 10u IPv4 55531 0t0 TCP 127.0.0.1:9099 (LISTEN)

    Ouvrir les ports pour la communication des pods

    sudo ufw status verbose
    sudo ufw allow 6443/tcp
    sudo ufw allow 10250/tcp
    sudo ufw allow 2379:2380/tcp

    C’est une étape très importante pour ouvrir tous les ports nécessaires. Sinon, nous ne pourrons pas rejoindre le noeud worker. Dans les autres environnements Linux, nous devons désactiver le pare-feu pour que le nœud de travail rejoigne le cluster.

    Commandes d’impression pour que le nœud de travail rejoigne le cluster

    sudo kubeadm token create --print-join-command

    Commandes de nœud de travail

    Rejoignez le cluster Kubernetes

    sudo kubeadm join k8smaster.example.net:6443 \
    --token ufkijl.ukrhpo372w6eoung \
    --discovery-token-ca-cert-hash sha256:e6b04ca3f6f4258b027d22a5de4284d03d543331b81cae93ec4c982ab94c342f

    Ouvrir les ports sur le nœud de travail

    sudo ufw status
    sudo ufw allow 10250
    sudo ufw allow 30000:32767/tcp
    sudo ufw status

    Vérifier la configuration de Kubernetes

    Créer un déploiement NGINX

    kubectl create deployment...
    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.