Ce tutoriel va vous montrer comment installer pas à pas un cluster Kubernetes sur des machines physiques ou virtuelles. La distribution Linux utilisée est Ubuntu 22.04 LTS. La distribution Kubernetes utilisée est microk8s.
Site de microk8s : https://microk8s.io/
Pour ce tutoriel, nous avons utilisé le matériel suivant :
-
3 mini-PC
- AMD Ryzen 7 5800U 8 Cores up to 4.4GHz,
- 32GB DDR4
- 1TB SSD
J'ai acheté les 3 PCs sur le site de Geekbuying
-
Réseau local
- lab1.local (10.0.0.124)
- lab2.local (10.0.0.125)
- lab3.local (10.0.0.123)
Pour ce tutoriel, je vais supposer que vous avez déjà installé Ubuntu 22.04 LTS sur vos machines et que vous pouvez accéder à vos machines via SSH.
J'ai nommé mes machines lab1, lab2 et lab3. Vous pouvez les nommer comme vous le souhaitez. Vous pouvez également utiliser des machines virtuelles.
Important : Je me connecte en root sur les machines. Si ce n'est pas votre cas, vous devez utiliser sudo pour les commandes qui le nécessitent.
snap install microk8s --classic
Une fois installé, vous pouvez vérifier que microk8s est bien installé en exécutant la commande suivante :
microk8s status --wait-ready
microk8s est livré avec une CLI qui vous permet de gérer votre cluster Kubernetes. Cette CLI est appelée microk8s.
microk8s vous permet de lancer des commandes kubectl directement.
microk8s kubectl get nodes
Sur la machine lab1, exécutez la commande suivante :
microk8s add-node
Cette commande va vous afficher une commande à exécuter sur les autres machines pour les ajouter au cluster.
microk8s join
Exécutez cette commande sur les machines lab2 et lab3.
Sur la machine lab1, exécutez la commande suivante :
microk8s kubectl get nodes
Vous devriez voir les 3 machines dans le cluster.
microk8s est livré avec des addons. Les addons sont des applications qui peuvent être installées sur votre cluster Kubernetes.
Pour lister les addons disponibles, vous pouvez aller sur le site officiel de microk8s : https://microk8s.io/docs/addons
Vous remarquerez que les addons sont classés en 3 catégories :
- Core addons
- Community addons
- Disabled addons
Pour installer un addon, vous pouvez utiliser la commande suivante :
microk8s enable <addon>
Par exemple, pour installer l'addon dns :
microk8s enable dns
Pour désinstaller un addon, vous pouvez utiliser la commande suivante :
microk8s disable <addon>
Par exemple, pour désinstaller l'addon dns :
microk8s disable dns
Nous allons installer les addons suivants :
- rbac
- community
- metallb
- traefik
microk8s enable rbac
microk8s enable community
microk8s enable metallb:10.0.0.150-10.0.0.200
microk8s enable traefik
microk8s kubectl get service -n traefik traefik
On va obtennir l'adresse IP du service traefik.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
traefik LoadBalancer 10.152.183.47 10.0.0.150 80:31541/TCP,443:32594/TCP 20s
On peut maintenant lancer un curl sur l'adresse IP du service traefik.
curl 10.0.0.150
On obtient le résultat suivant :
404 page not found
Qui montre que le service traefik est bien installé et fonctionnel.
microk8s est livré avec un addon qui permet de gérer les volumes. Cependant ce volume n'est pas fait pour la production. Il est destiné à être utilisé pour des tests uniquement. Si vous souhaitez utiliser un volume pour la production, vous devez utiliser rook-ceph par exemple.
microk8s enable hostpath-storage
Pour pouvoir utiliser kubectl sur votre machine, vous devez importer le fichier kubeconfig.
microk8s config > kubeconfig.yml
Une fois le fichier kubeconfig.yml généré, vous devez le copier sur votre machine (en scp par exemple).
Le plugin konfig de kubectl permet d'importer un fichier kubeconfig. Ce plugin peut être obtenu à l'aide de krew.
Maintenant à l'aide du plugin konfig de kubectl, vous pouvez importer le fichier kubeconfig.
kubectl konfig import --save kubeconfig.yml
Une fois importé, vous pouvez vérifier que le fichier kubeconfig est bien importé.
kubectl ctx
et sélectionner le contexte microk8s.
kubectl ctx microk8s
Vous pouvez maintenant utiliser kubectl sur votre machine.
kubectl get nodes
Le fichier test.yml contient tout ce qu'il faut pour déployer notre service whoami sur notre cluster.
---
apiVersion: v1
kind: Service
metadata:
name: whoami
spec:
ports:
- protocol: TCP
name: web
port: 80
selector:
app: whoami
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: traefik-ingress-controller
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: whoami
labels:
app: whoami
spec:
replicas: 2
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami
image: traefik/whoami
ports:
- name: web
containerPort: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: simpleingressroute
spec:
entryPoints:
- web
routes:
- match: Host(`lb.local`)
kind: Rule
services:
- name: whoami
port: 80
vous pouvez déployer ce fichier sur votre cluster.
kubectl apply -f test.yml
Une fois déployé, vous pouvez vérifier que le service est bien déployé.
kubectl get service
et vous pouvez vérifier que le service est bien accessible.
curl lb.local
après avoir ajouté lb.local dans votre fichier hosts.
lb.local 10.0.0.150
Vous recevrez le résultat suivant :
Hostname: whoami-8c9864b56-m9fq7
IP: 127.0.0.1
IP: ::1
IP: 10.1.197.66
IP: fe80::6462:68ff:fe56:d793
RemoteAddr: 10.1.197.65:48788
GET / HTTP/1.1
Host: lb.local
User-Agent: curl/8.1.2
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.1.127.128
X-Forwarded-Host: lb.local
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: traefik-857c7dbc5d-xwmhz
X-Real-Ip: 10.1.127.128
Nous avons vu comment installer un cluster Kubernetes avec microk8s. Nous avons vu comment installer des addons et comment déployer une application sur notre cluster.