← Retour aux guides

02 Talos Linux – mise en place d'un cluster

Configuration et initialisation d'un cluster Kubernetes avec Talos Linux, Cilium et cert-manager

taloskubernetesbootstrap

Table des matières


Prérequis

  • talosctl installé
  • kubectl installé
  • Machine physique ou VM avec au moins 2 cœurs CPU et 4 Go de RAM.
  • Image Talos Linux avec les extensions siderolabs/util-linux-tools et siderolabs/iscsi-tools (voir https://factory.talos.dev/).

Initialiser le cluster

1. Générer la configuration du cluster

Ce bloc définira certaines variables que nous utiliserons par la suite.

  • CLUSTER_NAME : le nom que le cluster Kubernetes et Talos Linux auront.
  • Endpoint : l’adresse IP sur laquelle l’API Kubernetes sera exposée (port 6443/tcp).
  • talos_Endpoint : l’adresse IP sur laquelle l’API du cluster Talos Linux sera exposée (port 50000/tcp). Contrairement à Kubernetes, ceci n’empêche pas la communication directe avec les hôtes si l’API n’est pas disponible.
  • patchbase_conf : la configuration de base qui sera utilisée pour définir le cluster. Dans cet exemple, il s’agit de la configuration du chapitre précédent.
  • talosctl gen config : la commande qui génère la base du cluster Kubernetes.
export CLUSTER_NAME="skube-dev"
export Endpoint="https://192.168.0.2:6443"
export talos_Endpoint="192.168.0.3"
export patchbase_conf="./model_kube/BASE_nocni_longhors.yaml"
talosctl gen config ${CLUSTER_NAME} $Endpoint \
  --config-patch @${patchbase_conf} \
  --output ./clusters/${CLUSTER_NAME}/talos

Dans ./clusters/${CLUSTER_NAME}/talos, trois fichiers ont été générés :

  • controlplane.yaml
  • worker.yaml
  • talosconfig

1.2 Cluster autonome (optionnel)

ce petie commande va generer un configuration pour les node controlplane avec le role worker: attention ne pas utiliser en prod sans prendre en conte les risque de securiter.

INPUT="./clusters/${CLUSTER_NAME}/talos/controlplane.yaml"
OUTPUT="./clusters/${CLUSTER_NAME}/talos/autonome.yaml"
grep -v "node.kubernetes.io/exclude-from-external-load-balancers: " "$INPUT" \
    | grep -v "taints:" \
    | grep -v "node-role.kubernetes.io/control-plane: NoSchedule" \
    > "$OUTPUT"

2. Générer et déployer la configuration d’un nœud

  • talossrv : variable contenant les paramètres permettant de décider quel nœud on souhaite communiquer.
  • talos_hostname : le nom du fichier de configuration du nœud.
  • talos_roles : le rôle du nœud parmi controlplane, worker, autonome via le fichier de configuration généré plus haut.
  • talosctl machineconfig patch : fusionne les différentes configurations pour laisser, à la fin, un fichier unique pour chaque hôte.
  • talosctl apply-config : applique les configurations au nœud sélectionné.

Adaptez talossrv et talos_hostname à chaque nœud. Le fichier ${talos_hostname}.yaml doit exister dans ./model_node/.

export talossrv="--insecure --nodes 192.168.0.3"
export talos_hostname="astate"
export talos_roles="controlplane"
talosctl machineconfig patch ./clusters/${CLUSTER_NAME}/talos/${talos_roles}.yaml \
  --patch @./model_node/${talos_hostname}.yaml \
  --output ./clusters/${CLUSTER_NAME}/node/${talos_hostname}.yaml

# Application sur le nœud :
talosctl apply-config ${talossrv} --file ./clusters/${CLUSTER_NAME}/node/${talos_hostname}.yaml

3. Mise en place du cluster

Une fois que tous les nœuds sont configurés, il faut initialiser le cluster.

  • talosctl config endpoints : définit l’endpoint par défaut dans talosconfig. Peut être modifié avec -e, par exemple : talossrv=“-n ${ip node} -e ${ip node} –talosconfig=./clusters/${CLUSTER_NAME}/talos/talosconfig”
  • talosctl bootstrap : Attention — à lancer une seule fois. Cette commande initialise la création des objets dans le cluster Kubernetes.
  • talosctl kubeconfig : exporte le fichier kubeconfig vers $HOME/.kube, ce qui vous permet d’accéder au cluster en administrateur via kubectl.
  • talosctl health : journal de l’ensemble du cluster.
  • kubectl get nodes : liste les nœuds vus par Kubernetes pour valider que le cluster fonctionne et est accessible.
export talossrv="-n ${talos_Endpoint} --talosconfig=./clusters/${CLUSTER_NAME}/talos/talosconfig"

talosctl config endpoints ${talos_Endpoint} --talosconfig=./clusters/${CLUSTER_NAME}/talos/talosconfig
talosctl bootstrap ${talossrv}
talosctl kubeconfig ${talossrv}
talosctl health ${talossrv}
kubectl get nodes