Aller au contenu

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