Ceci est une autre entrée de bloc-notes liée à Kubernetes dans laquelle je documenterai la procédure de configuration d'un cluster Kubernetes à l'aide de K3S dans des machines virtuelles créées avec Multipass de Canonical. De plus, je décrirai comment configurer kubectl, l'outil de gestion de cluster en ligne de commande de Kubernetes pour gérer le cluster K3S depuis l'extérieur des machines virtuelles sur lesquelles le cluster sera exécuté.
Multipass peut être exécuté sous Windows, Mac OS X et Linux. La procédure décrite dans cet article doit donc s'appliquer à tous les environnements mentionnés ci-dessus, même si je ne l'ai testée que sous Mac OS X.
Contexte
Le lecteur astucieux se souviendra d'un de mes articles récents dans lequel j'ai décrit comment exécuter un cluster Kubernetes dans Docker et peut se demander pourquoi je suis maintenant passé à K3S au lieu de Kind.
Il y a deux raisons à cela :
- K3S prétend être prêt pour la production.
Peut-être pas prêt pour la production à l'échelle de Google, mais suffisant pour mes besoins, je suppose. - K3S ressemble davantage à un véritable cluster Kubernetes.
Pendant la courte période où j'ai travaillé avec Kind, j'ai rencontré deux problèmes qui m'ont amené à jeter un œil à K3S : - – Le cluster Kind ne peut pas être redémarré.
- – Kind ne prend pas en charge le type LoadBalancer.
Prérequis
Pour me préparer à K3S, je vais installer quelques outils dont j'aurai besoin, puis créer les machines virtuelles sur lesquelles K3S s'exécutera.
Outils
Avant d'installer K3S, les outils suivants doivent être installés sur l'ordinateur qui doit servir d'hôte pour les machines virtuelles :
- Multipasse
La machine virtuelle de Canonical dans laquelle les instances d'Ubuntu peuvent être exécutées.
Les instructions d'installation de Multipass sont disponibles ici. - kubectl
Comme auparavant, kubectl est l'outil de gestion de cluster en ligne de commande de Kubernetes.
Les instructions d'installation de kubectl sont disponibles ici.
Machines virtuelles
Je vais créer un cluster Kubernetes composé de deux nœuds ; un maître et un agent. Pour cela, j'aurai besoin de deux machines virtuelles.
Après avoir installé Multipass, ouvrez une fenêtre de terminal :
- Créez et démarrez la machine virtuelle du nœud maître :
multipass launch --name k3s-master --mem 4G --disk 5G 18.04
multipass launch --name k3s-agent --mem 4G --disk 5G 18.04
- Vérifiez les deux machines virtuelles :
multipass list
Le résultat doit ressembler à ce qui suit :
Name State IPv4 Image
k3s-agent Running 192.168.64.10 Ubuntu 18.04 LTS
k3s-master Running 192.168.64.7 Ubuntu 18.04 LTS
Notez l'adresse IP du maître k3s - elle sera nécessaire plus tard lors de l'installation de K3S sur le nœud de l'agent.
Installer K3S
La section suivante décrit comment installer K3S sur les nœuds maître et agent.
Installer K3S sur le nœud maître
Dans cette étape, nous allons installer K3S sur le nœud maître et récupérer le jeton du nœud maître dont nous aurons besoin plus tard pour créer un nœud K3S qui doit être géré par le gestionnaire.
- Ouvrez une fenêtre de terminal si nécessaire.
- Ouvrez un shell sur la VM k3s-master :
multipass shell k3s-master
curl -sfL https://get.k3s.io | sh -
Une sortie semblable à la suivante doit apparaître dans la console :
[INFO] Finding latest release
[INFO] Using v1.17.4+k3s1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
chcon: can't apply partial context to unlabeled file '/usr/local/bin/k3s'
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
Vérifiez l'installation de K3S :
k3s -version
donc la sortie de la commande ci-dessus ressemble à ceci :
k3s version v1.17.4+k3s1 (3eee8ac3)
Récupérez le jeton du nœud maître :
sudo cat /var/lib/rancher/k3s/server/node-token
K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8
Quittez le shell de la machine virtuelle k3s-master :
exit
Installer K3S sur le nœud de l'agent
Avec l'adresse IP et le jeton de nœud du maître K3S, je suis maintenant prêt à installer K3S sur le nœud agent :
- Ouvrez une fenêtre de terminal si nécessaire.
- Ouvrez un shell sur la VM k3s-agent :
multipass shell k3s-agent
- Installez la dernière version de K3S pour un nœud d'agent.
Remplacez l'adresse IP du maître k3s dans la variable K3S_URL et le jeton de nœud dans la variable K3S_TOKEN :
curl -sfL https://get.k3s.io | K3S_URL="https://192.168.64.7:6443" K3S_TOKEN="K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8" sh -
Une sortie similaire à celle-ci devrait apparaître dans la console :
[INFO] Finding latest release
[INFO] Using v1.17.4+k3s1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
chcon: can't apply partial context to unlabeled file '/usr/local/bin/k3s'
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO] systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO] systemd: Starting k3s-agent
Quittez le shell de la machine virtuelle k3s-agent :
exit
Vérifier le cluster
Avant de configurer kubectl dans l'hôte de VM Multipass (ou ailleurs, en dehors des machines virtuelles K3S), je souhaite vérifier rapidement que le cluster K3S est correctement configuré.
- Ouvrez une fenêtre de terminal si nécessaire.
- Ouvrez un shell sur la VM k3s-master :
multipass shell k3s-master
Répertoriez les nœuds du cluster :
sudo kubectl get nodes -o wide
Dans mon cas, la liste des nœuds ressemble à ceci :
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k3s-agent Ready <none> 5m31s v1.17.4+k3s1 192.168.64.10 <none> Ubuntu 18.04.4 LTS 4.15.0-91-generic containerd://1.3.3-k3s2
k3s-master Ready master 39m v1.17.4+k3s1 192.168.64.7 <none> Ubuntu 18.04.4 LTS 4.15.0-91-generic containerd://1.3.3-k3s2
exit
Configurer un kubectl externe
Avec le cluster K3S opérationnel, je vais maintenant configurer kubectl que j'ai installé sur l'hôte VM, qui est mon ordinateur de développement, pour pouvoir gérer le cluster K3S.
Récupérer la configuration kubectl du nœud maître
Afin de pouvoir configurer un outil de gestion externe de kubectl pour gérer le cluster K3S qui vient d'être créé, je copie la configuration de kubectl depuis le nœud maître et j'apporte ensuite quelques modifications :
- Ouvrez une fenêtre de terminal si nécessaire.
- Ouvrez un shell sur la VM k3s-master :
multipass shell k3s-master
- Afficher la configuration kubectl du nœud maître :
sudo kubectl config view
Dans mon cas, cela ressemble à ceci :
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://127.0.0.1:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
password: ea3527757bd8c5c9ae8dbb00fef7595c
username: admin
Notez que votre fichier de configuration ne sera pas identique à celui ci-dessus – le mot de passe sera différent par exemple.
- Quitter le shell de la VM k3s-master :
exit
Remplacer la configuration de kubectl
Je peux maintenant remplacer la configuration kubectl dans l'hôte VM par une version modifiée de la configuration kubectl du nœud maître :
- Ouvrez une fenêtre de terminal si nécessaire.
- Modifiez, ou créez si elle n'existe pas, la configuration kubectl locale :
vi ~/.kube/config
- Remplacez le contenu, le cas échéant, par la configuration kubectl du nœud maître.
- Remplacez l'adresse IP du cluster par l'adresse IP de la VM k3s-master et configurez pour ignorer la vérification TLS.
Le résultat ressemblera à ceci, les lignes 4 et 5 étant modifiées :
apiVersion: v1
clusters:
- cluster:
insecure-skip-tls-verify: true
server: https://192.168.64.7:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
password: ea3527757bd8c5c9ae8dbb00fef7595c
username: admin
- Enregistrez la configuration et quittez vi :
:wq - Vérifiez la configuration :
kubectl get nodes
Les mêmes nœuds que ceux répertoriés à l'intérieur du nœud maître doivent également être répertoriés maintenant, bien que dans une liste plus compacte :
NAME STATUS ROLES AGE VERSION
k3s-master Ready master 66m v1.17.4+k3s1
k3s-agent Ready <none> 32m v1.17.4+k3s1
Redémarrer un cluster K3S
Comme dans l'introduction, l'une des raisons du passage de Kind à K3S est la possibilité de pouvoir redémarrer un cluster K3S. Si je dois interrompre mon travail lié à Kubernetes, j'éteins simplement mon ordinateur, celui qui héberge les machines virtuelles K3S. Lorsque je redémarrerai l'ordinateur plus tard, tout ce que j'aurai à faire pour redémarrer le cluster K3S et le restaurer à son état précédent sera de redémarrer les machines virtuelles du cluster avec les deux commandes suivantes :
multipass start k3s-master
multipass start k3s-agent