Bootstrap rapidement son cluster
Pour bootstrap rapidement un cluster, on peut utiliser RKE, un outil Rancher. A noter que nous allons utiliser RKE et non RKEv2 car ce dernier se base sur K3S et non K8S, qui nous apporte beaucoup moins de fonctionnalités.
Pour faire simple, RKE c'est un binary et un fichier cluster.yaml. RKE est initialement un simple binaire pouvant être exécuté depuis le serveur lui même, ou bien en remote. Vous trouverez la dernière version ici.
Voici un exemple de fichier cluster.yml
####################################
## CLUBIC Rancher master cluster ##
####################################
cluster_name: K8S-CC-Preprod
# Nodes definition
# ---
nodes:
- address: master01.rancher.k8s.local
role: [controlplane, etcd, worker]
internal_address: 192.168.1.220
hostname_override: master01.rancher.k8s
user: mgmt-rancher
port: "1998"
ssh_key_path: ~/.ssh/id_ed25519
- address: master02.rancher.k8s.local
role: [controlplane, etcd, worker]
internal_address: 192.168.1.221
hostname_override: master02.rancher.k8s
user: mgmt-rancher
port: "1998"
ssh_key_path: ~/.ssh/id_ed25519
- address: master03.rancher.k8s.local
role: [controlplane, etcd, worker]
internal_address: 192.168.1.222
hostname_override: master03.rancher.k8s
user: mgmt-rancher
port: "1998"
ssh_key_path: ~/.ssh/id_ed25519
- address: node01.rancher.k8s.local
role: [worker]
internal_address: 192.168.1.210
hostname_override: node01.rancher.k8s
user: mgmt-rancher
port: "1998"
ssh_key_path: ~/.ssh/id_ed25519
- address: node02.rancher.k8s.local
role: [worker]
internal_address: 192.168.1.211
hostname_override: node02.rancher.k8s
user: mgmt-rancher
port: "1998"
ssh_key_path: ~/.ssh/id_ed25519
- address: node03.rancher.k8s.local
role: [worker]
internal_address: 192.168.1.212
hostname_override: node03.rancher.k8s
user: mgmt-rancher
port: "1998"
ssh_key_path: ~/.ssh/id_ed25519
# Service settings
# ---
services:
kube-api:
extra-args:
external-hostname: rancher.k8s.domain.tld
etcd:
snapshot: true
creation: 6h
retention: 24h
# Authentication settings
# ---
authentication:
strategy: x509
sans:
- rancher.k8s.domain.tld
# NGINX ingress controller settings
# ---
ingress:
provider: nginx
network_mode: hostNetwork
options:
use-forwarded-headers: "true"
Une fois toute l'infrastructure décrite, une simple commande suffit : rke up
Ce cluster.yaml est compatible avec Kubernetes 1.22.
Comme vous pouvez le voir, nous spécifions à rancher que nous souhaitons utiliser l'user mgmt-rancher pour déployer Rancher. Nous discernons ici les noeuds master de worker.
L'adresse spécifiée doit idéalement être sur un réseau privé et être résolvable.
Voici un fichier hosts idéal pour faire fonctionner notre cluster K8S
# K8S
192.168.1.220 master01.vlan master01.rancher.k8s master01.rancher.k8s.local
192.168.1.221 master02.vlan master02.rancher.k8s master02.rancher.k8s.local
192.168.1.222 master03.vlan master03.rancher.k8s master03.rancher.k8s.local
192.168.1.210 node01.vlan node01.rancher.k8s node01.rancher.k8s.local
192.168.1.211 node02.vlan node02.rancher.k8s node02.rancher.k8s.local
192.168.1.212 node03.vlan node03.rancher.k8s node03.rancher.k8s.local
Nous activons également quelques options supplémentaires tel que le snapshot automatique de l'etcd toutes les 6h. Des examples sont dispoibles sur le site officiel de Rancher. Il est possible par exemple d'envoyer les snapshot automatiquement dans un S3