GNU/Linux >> Tutoriels Linux >  >> Linux

Cluster Kubernetes utilisant K3S avec Multipass de Canonical

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


Linux
  1. Qu'est-ce que Kubernetes ? Guide complet

  2. Comment configurer un cluster Kubernetes avec Rancher

  3. Comment déployer un cluster Redis sur Kubernetes

  4. Comment déployer votre premier pod sur un cluster Kubernetes

  5. Configurer le cluster Kubernetes avec Rancher

Comment créer un cluster Kubernetes avec AWS CLI

Comment déployer un cluster Kubernetes sur AWS avec Amazon EKS

Commencez à apprendre Kubernetes depuis votre machine locale

Créer un cluster Kubernetes à plan de contrôle unique avec kubeadm

Utilisation de Grafana &Prometheus Kubernetes Cluster Monitoring

Comment installer le cluster Kubernetes sur CentOS 8