02 Talos Linux – mise en place d'un cluster
Configuration et initialisation d'un cluster Kubernetes avec Talos Linux, Cilium et cert-manager
Table des matières
Prérequis
talosctlinstallékubectlinstallé- 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-toolsetsiderolabs/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
talossrvettalos_hostnameà chaque nœud. Le fichier${talos_hostname}.yamldoit 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