Le but de cette série de billets est de montrer comment on peut simplement, facilement et gratuitement (à partir du moment ou vous avez un ordinateur suffisamment performant pour développer) faire du kubernetes et déployer des applications conteneurisées. Et concernant ces dernières, je montrerai en quoi Quarkus est le candidat idéal (A Kubernetes Native Java stack).
J’ai choisi pour cela de vous présenter dans cet article un outil qui est Microk8s, développé par les équipes de Canonical (Ubuntu). Il existe d’autres alternatives comme minikube, minishift, docker desktop mais je vais focus sur Microk8s qui me semble intéressant à découvrir et à utiliser.
MicroK8s is a CNCF (Cloud Native Computing Foundation) certified upstream Kubernetes deployment that runs entirely on your workstation or edge device
Nous avons bien là un « vrai » k8s et nous allons voir comment l’installer, le configurer et l’utiliser sans avoir spécialement de compétences Ops. C’est pour cela que cet outil est présenté comme Low-ops.
Cette article est tiré d’un apéro-code (webinar) que j’ai réalisé pour Sedona, et au cours duquel j’installe Microk8s en live en quelques minutes puis je déploie une application Quarkus « hello world! », également en quelques minutes. Vous pouvez trouver la vidéo sur la chaine youtube de Sedona, et le code source sur mon github. Le code source est plus élaboré que le « hello world » du webinar afin d’aller plus loin qu’un petit live coding et de montrer que Quarkus et Microk8s nous permettent de faire des choses avancées tout en restant simple et facile d’approche.
Single-node cluster
Installation de Microk8s
Commençons par installer Microk8s! Je travaille sur un macOS Big Sur 11.2.3. Mais vous pouvez aussi l’installer sur du Windows ou du Linux. Dans le cas d’une installation sur un macOS, Microk8S conseille d’avoir au minimum 4GB de RAM et 40GB de disque dur de disponible.
Tout d’abord téléchargeons l’installateur Microk8s à l’aide de homebrew, le gestionnaire de paquet pour macOS
1 |
$ brew install ubuntu/microk8s/microk8s |
Une fois installé, lançons à présent l’installation d’un Microk8s simplement à l’aide de la commande suivante (vous devez accepter d’installer Multipass, le gestionnaire de VMs ubuntu, nous reviendrons sur ce composant un peu plus tard dans l’article)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ microk8s install Support for 'multipass' needs to be set up. Would you like to do that it now? [y/N]: y ==> Downloading https://github.com/CanonicalLtd/multipass/releases/download/v1.6.2/multipass-1.6.2+mac-Darwin.pkg Already downloaded: /Users/coloneld/Library/Caches/Homebrew/downloads/64f65f71508526f4215f89bec1a12bbc130d408d2bd22f9460fc792fe5aa09f6--multipass-1.6.2+mac-Darwin.pkg ==> Installing Cask multipass ==> Running installer for multipass; your password may be necessary. Package installers may write to any location; options such as `--appdir` are ignored. installer: Package name is multipass installer: Installing at base path / installer: The install was successful. 🍺 multipass was successfully installed! Waiting for multipass... Launched: microk8s-vm 2021-03-30T17:50:25Z INFO Waiting for automatic snapd restart... microk8s v1.20.4 from Canonical✓ installed microk8s-integrator-macos 0.1 from Joe Borg (joeborg) installed MicroK8s is up and running. See the available commands with `microk8s --help`. |
A présent, vérifions que Microk8s est bien installé comme suit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
$ microk8s status microk8s is running high-availability: no datastore master nodes: 127.0.0.1:19001 datastore standby nodes: none addons: enabled: ha-cluster # Configure high availability on the current node disabled: ambassador # Ambassador API Gateway and Ingress cilium # SDN, fast with full network policy dashboard # The Kubernetes dashboard dns # CoreDNS fluentd # Elasticsearch-Fluentd-Kibana logging and monitoring gpu # Automatic enablement of Nvidia CUDA helm # Helm 2 - the package manager for Kubernetes helm3 # Helm 3 - Kubernetes package manager host-access # Allow Pods connecting to Host services smoothly ingress # Ingress controller for external access istio # Core Istio service mesh services jaeger # Kubernetes Jaeger operator with its simple config keda # Kubernetes-based Event Driven Autoscaling knative # The Knative framework on Kubernetes. kubeflow # Kubeflow for easy ML deployments linkerd # Linkerd is a service mesh for Kubernetes and other frameworks metallb # Loadbalancer for your Kubernetes cluster metrics-server # K8s Metrics Server for API access to service metrics multus # Multus CNI enables attaching multiple network interfaces to pods portainer # Portainer UI for your Kubernetes cluster prometheus # Prometheus operator for monitoring and logging rbac # Role-Based Access Control for authorisation registry # Private image registry exposed on localhost:32000 storage # Storage class; allocates storage from host directory traefik # traefik Ingress controller for external access |
Comme vous pouvez le constater Microk8s est bien installé et démarré en mode single-node.
Add-ons
Vous pouvez voir aussi dans les logs de la console que Microk8s amène une notion de add-ons, ci-dessus vous pouvez voir ceux qui sont activés ou non. En somme je peux rajouter des composants (add-ons) qui me seront nécessaires très simplement (loggins, monitoring, rbac, knative…). Pour les besoins de mon projet de démonstration je vais avoir besoin de :
- Ingress : Accéder à k8s depuis l’extérieur du cluster
- Storage : Profiter de d’un volume persistant
- Dashboard : Le dashboard standard de k8s
- Dns : Résolution des adresses de services
- Istio : Pouvoir profiter d’un service mesh (cela concernera un prochain article dédié à Istio)
Donc pour activer les add-ons nécessaires il suffit simplement de lancer la ligne de commande suivante :
1 |
$ microk8s enable ingress storage dashboard dns istio |
Clean up
Pour désactiver les add-ons on lance simplement
1 |
$ microk8s uninstall add-on1 add-on2 ... |
Et si vous voulez désinstaller tout microk8s proprement, vous pouvez juste jouer
1 2 |
$ microk8s uninstall Thank you for using MicroK8s! |
Dashboard k8s
Revenons à notre précédente installation de Microk8s et vérifions que nous avons bien accès à la console k8s et que tout est proprement déployé et fonctionnel, nous allons démarrer le dashboard k8s pour cela de la façon suivante
1 2 3 4 5 6 |
$ microk8s dashboard-proxy Checking if Dashboard is running. Dashboard will be available at https://192.168.64.2:10443 Use the following token to login: eyJhbGciOiJSUzI1NiIsImtpZCI6InVGclcyOEdtb01ZVFA0OXpKaDB5Wm10YlNSc1FsNGxHNTJoZEhIOHNhZjAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXc4bGdoIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI1N2RlOTA4Ny1iZmJhLTRlYWUtOTQ0ZS0wMTM3YzJhZTZjYTciLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.KGObAz3BCQmLG-B97UTGnHsMVnBZWeARsF7N-xFxgQbBv97tNWbvHOzyw5xU2c0MR3-Sf-W3IRqP7JA9_XDV2kT7jxGJ5lXjiNh_8AVxfdcBDq06CsZKG20xwTMdiBsA3rqjqQkcy3JCVtPEpNI5M2IXnaOSoDtrEzrzXQoDSsOztXcWNbi6lQvIE34KApzmrgfRtGeVHZ-OSADTd4BfRQHQ0NUbpGiwRAUz3x58C2h68VY36B_AxilQJRKpWqW0_UOcSglhEwi6hxi6zE6ckIU6_o8AnQrekvdzQMKMV4jNrmPgVBqkKb9qAW0h4WmjmBfy07Hf-pz-0XwvMy7ZsA Forwarding from 0.0.0.0:10443 -> 8443 |
Ouvrons un Firefox (avec chrome impossible d’ouvrir le site considéré comme non sécurisé) et allons sur l’url https://192.168.64.2:10443 comme indiqué en sortie de console, nous arrivons donc sur la page de login du Dashboard
Vous avez deux possibilités pour vous connecter à la console k8s, par token ou grâce à un fichier de configuration de kubectl (le cli k8s) dit kubeconfig.
Si on se connecte par token, celui-ci est fournit après avoir lancé le Dashboard dans les logs de la console, copier-coller ce token dans la console et connectez-vous.
Sinon vous pouvez choisir de vous connecter à l’aide de kubeconfig, il faut pour cela que vous ayez précédemment joué la ligne de commande suivante qui a pour effet de configurer et de pouvoir se servir du cli k8s local (kubectl)
1 |
$ sudo microk8s kubectl config view --raw > $HOME/.kube/config |
Ensuite il ne vous reste plus qu’à sélectionner le bon fichier de config qui se trouve dans le répertoire local $HOME/.kube/config
Après vous être connecté par la méthode que vous préférez, le Dashboard se lance et nous voyons ci-dessous
Notre kube est donc bien démarré et fonctionnel.
Namespace
Nous allons donc commencer par créer un namespace pour accueillir notre future application Quarkus (nous pourrions ne pas le faire et déployer dans le namespace par défaut de k8s mais ce n’est pas la bonne façon de faire, il est préférable de bien cloisonner ses projets même pour des tests)
1 2 |
$ kubectl create ns quarkus-apero-code namespace/quarkus-apero-code created |
OK! Notre kube est prêt pour accueillir notre solution basée sur Quarkus! Chose que nous verrons lors du prochain article.
Multipass
Petite précision sur les VMs utilisées pour déployer Microk8s, on s’appuie sur Multipass (qui s’appuie sur HyperKit sous macOS, il est installé lors de l’installation de Microk8s comme évoqué précédemment), ce sont des VMs Ubuntu (encore des outils Canonical :)).
Vous avez la possibilité d’accéder à vos VMs très simplement, voyons ce qui a été installé comme VM en affichant la liste des VMs instanciées
1 2 3 4 |
$ multipass ls Name State IPv4 Image microk8s-vm Running 192.168.64.2 Ubuntu 18.04 LTS 10.1.254.6 |
Nous avons donc une VM Ubuntu/Microk8s qui tourne, nous pouvons y accéder à l’aide de la commande suivante
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ multipass shell microk8s-vm Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-140-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Tue Mar 30 20:03:28 CEST 2021 System load: 1.78 Processes: 222 Usage of /: 10.3% of 48.29GB Users logged in: 0 Memory usage: 47% IP address for enp0s2: 192.168.64.2 Swap usage: 0% 0 packages can be updated. 0 of these updates are security updates. New release '20.04.2 LTS' available. Run 'do-release-upgrade' to upgrade to it. Last login: Tue Mar 30 20:01:32 2021 from 192.168.64.1 ubuntu@microk8s-vm:~$ |
Vous pouvez donc travailler directement très facilement dans la VM si le besoin s’en fait sentir.
Multi-node cluster
Pour aller plus loin avec Microk8s, l’outil nous offre la possibilité de mettre en place un cluster multi-node et ainsi faire de la haute disponibilité, activée par défaut mais réellement opérationnelle seulement lorsque au moins 3 noeuds sont activés. Pour ajouter un noeud au master c’est très simple
1 |
$ microk8s add-node |
Installation des noeuds
Faisons l’exercice, pour cela je vais m’appuyer sur Multipass, évoqué précédemment dans le billet, je vais donc créer 3 VMs et installer Microk8s dessus et enfin je finirai par relier ces 3 noeuds.
1 2 3 4 5 6 |
$ multipass launch --name master -m 2G Launched: master $ multipass launch --name worker1 -m 2G Launched: worker1 $ multipass launch --name worker2 -m 2G Launched: worker2 |
J’ai donc créé 3 VMs, une master, et deux workers (worker1 et worker2). A présent il faut donc installer Microk8s sur chacune d’entre elle. Commençons par le master
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
$ multipass shell master Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-67-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Tue Mar 16 13:58:32 CET 2021 System load: 0.04 Processes: 119 Usage of /: 26.8% of 4.67GB Users logged in: 0 Memory usage: 9% IPv4 address for enp0s2: 192.168.64.7 Swap usage: 0% 1 update can be installed immediately. 0 of these updates are security updates. To see these additional updates run: apt list --upgradable To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. # On installe microk8s ubuntu@master:~$ sudo snap install microk8s --classic microk8s (1.20/stable) v1.20.4 from Canonical✓ installed # On configure les droits de l'utilisateur ubuntu ubuntu@master:~$ sudo usermod -a -G microk8s $USER ubuntu@master:~$ sudo chown -f -R $USER ~/.kube # On se déconnecte et se reconnecte pour activer les permissions ubuntu@master:~$ logout $ multipass shell master Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-67-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information disabled due to load higher than 1.0 1 update can be installed immediately. 0 of these updates are security updates. To see these additional updates run: apt list --upgradable Last login: Tue Mar 16 13:58:32 2021 from 192.168.64.1 # Vérifions l'état de l'installation de microk8s ubuntu@master:~$ microk8s status --wait-ready microk8s is running high-availability: no datastore master nodes: 127.0.0.1:19001 datastore standby nodes: none addons: enabled: ha-cluster # Configure high availability on the current node disabled: ... |
Notre premier noeud master est bien installé, ajoutons deux add-ons et configurons la commande kubectl sur le noeud master
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# alias pour taper directement kubectl au lieu de microk8s kubectl ubuntu@master:~$ echo "alias kubectl='microk8s kubectl'" >> ~/.bash_aliases ubuntu@master:~$ source ~/.bash_aliases # Activons le dns et le storage sur ce noeud ubuntu@master:~$ microk8s enable dns storage Enabling DNS Applying manifest serviceaccount/coredns created configmap/coredns created deployment.apps/coredns created service/kube-dns created clusterrole.rbac.authorization.k8s.io/coredns created clusterrolebinding.rbac.authorization.k8s.io/coredns created Restarting kubelet DNS is enabled Enabling default storage class deployment.apps/hostpath-provisioner created storageclass.storage.k8s.io/microk8s-hostpath created serviceaccount/microk8s-hostpath created clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created Storage will be available soon |
Notre premier noeud master est fin prêt, à présent ajoutons lui les deux noeuds précédemment créés. Il faut pour cela avoir installer Microk8s sur chacun d’entre eux et configurer les droits de l’utilisateur ubuntu sur chaque VM
1 2 3 4 5 6 |
ubuntu@worker1:~$ sudo snap install microk8s --classic microk8s (1.20/stable) v1.20.4 from Canonical✓ installed ubuntu@worker1:~$ sudo usermod -a -G microk8s ubuntu ubuntu@worker1:~$ sudo chown -f -R ubuntu ~/.kube ubuntu@worker1:~$ logout |
Configuration Cluster
Une fois installé, retournons dans le noeud master et jouons les commandes
1 2 3 4 5 6 7 8 |
$ multipass shell master ubuntu@master:~$ microk8s add-node From the node you wish to join to this cluster, run the following: microk8s join 192.168.64.7:25000/8c29567553a20d20b6c10fd3b487b0f6 If the node you are adding is not reachable through the default interface you can use one of the following: microk8s join 192.168.64.7:25000/8c29567553a20d20b6c10fd3b487b0f6 microk8s join 10.1.219.64:25000/8c29567553a20d20b6c10fd3b487b0f6 |
Comme indiqué dans les logs en sortie de console, il faut lancer la commande microk8s join 192.168.64.7:25000/8c29567553a20d20b6c10fd3b487b0f6 sur le noeud worker1.
1 2 3 4 5 |
$ multipass shell worker1 ubuntu@worker1:~$ microk8s join 192.168.64.7:25000/5f08df4d9c328f07cfba51decda2b398 Contacting cluster at 192.168.64.7 Waiting for this node to finish joining the cluster. .. ubuntu@worker1:~$ |
Refaites la manipulation sur le deuxième worker, on lance microk8s add-node sur le master et on lance la commande join sur le worker2.
Vérifions que nos trois noeuds sont bien connectés
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ multipass shell master ubuntu@master:~$ microk8s status microk8s is running high-availability: yes datastore master nodes: 192.168.64.7:19001 192.168.64.4:19001 192.168.64.5:19001 datastore standby nodes: none addons: enabled: dns # CoreDNS ha-cluster # Configure high availability on the current node storage # Storage class; allocates storage from host directory disabled: ... |
Vous pouvez noter que nous avons bien trois noeuds et que la HA est activée. Je peux donc aussi lancer une commande kubectl pour voir l’état de mes noeuds
1 2 3 4 5 |
ubuntu@master:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready <none> 26m v1.20.4-34+1ae8c29bbb48f7 worker1 Ready <none> 18m v1.20.4-34+1ae8c29bbb48f7 worker2 Ready <none> 100s v1.20.4-34+1ae8c29bbb48f7 |
Vous pouvez installer des add-ons supplémentaires selon votre choix vous pouvez aussi faire du « logging, monitoring and alerting » à l’aide de Elastic, prometheus et alert manager et d’autres encore.
Mount volume
Vous voilà en passe d’utiliser un cluster de k8s de trois noeuds. Cependant il nous manque une chose pour se faciliter la vie, vous pourriez avoir besoin de partager des fichiers entre votre hôte et vos machines virtuelles. Nous allons donc avec Multipass pouvoir monter un répertoire local (celui contenant les fichiers de déploiement k8s) sur notre VM de la manière suivante
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$ multipass mount ~/dev/git/sedona/apero-code/mk8s-quarkus-ac/microk8s/ master:/microk8s $ multipass shell master Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-67-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Tue Mar 16 14:54:23 CET 2021 System load: 0.58 Processes: 156 Usage of /: 55.7% of 4.67GB Users logged in: 0 Memory usage: 57% IPv4 address for enp0s2: 192.168.64.7 Swap usage: 0% 1 update can be installed immediately. 0 of these updates are security updates. To see these additional updates run: apt list --upgradable Last login: Tue Mar 16 14:02:14 2021 from 192.168.64.1 ubuntu@master:~$ cd /microk8s/ ubuntu@master:/microk8s$ ll total 32 drwxr-xr-x 1 ubuntu ubuntu 192 Feb 21 16:46 ./ drwxr-xr-x 21 root root 4096 Mar 16 14:54 ../ -rw-r--r-- 1 ubuntu ubuntu 9675 Feb 21 16:46 README.md drwxr-xr-x 1 ubuntu ubuntu 96 Oct 27 14:37 db/ drwxr-xr-x 1 ubuntu ubuntu 320 Nov 11 17:00 istio/ drwxr-xr-x 1 ubuntu ubuntu 224 Oct 31 14:25 k8s/ |
Le répertoire ~/dev/git/sedona/apero-code/mk8s-quarkus-ac/microk8s/ est donc partagé en votre host et votre VM, vous pouvez voir les fichiers du host sur la VM dans le répertoire /microk8s. A présent vous pouvez lancer des commandes kubectl local avec des fichiers de déploiements locaux ou bien lancer des commandes kubectl sur la VM avec les fichiers dans le répertoire /microk8s.
Unmount volume
Pour supprimer le montage vous pouvez simplement jouer
1 |
$ multipass unmount master |
Dashboard k8s
Autre point, vous avez remarqué que pour installer un cluster multi-node je suis passé directement par Multipass et non l’installateur Microk8s. Du coup je n’ai pas accès à la commande locale microk8s depuis mon macOS pour lancer le dashboard.
Voici la solution, premièrement activons le dashboard sur le noeud master
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
ubuntu@master:~$ microk8s enable dashboard Enabling Kubernetes Dashboard Addon metrics-server is already enabled. Applying manifest serviceaccount/kubernetes-dashboard created service/kubernetes-dashboard created secret/kubernetes-dashboard-certs created secret/kubernetes-dashboard-csrf created secret/kubernetes-dashboard-key-holder created configmap/kubernetes-dashboard-settings created role.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created deployment.apps/kubernetes-dashboard created service/dashboard-metrics-scraper created deployment.apps/dashboard-metrics-scraper created If RBAC is not enabled access the dashboard using the default token retrieved with: token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1) microk8s kubectl -n kube-system describe secret $token In an RBAC enabled setup (microk8s enable RBAC) you need to create a user with restricted permissions as shown in: https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md |
Vérifions que le dashboard est bien opérationnel et si oui nous allons vouloir y accéder depuis notre machine de travail, nous allons pour cela ouvrir un accès sur l’api server à l’aide de la commande kubectl proxy comme suit
1 2 3 4 5 6 7 8 9 |
ubuntu@master:~$ kubectl get service -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 2d3h metrics-server ClusterIP 10.152.183.69 <none> 443/TCP 2d2h kubernetes-dashboard ClusterIP 10.152.183.245 <none> 443/TCP 2d2h dashboard-metrics-scraper ClusterIP 10.152.183.246 <none> 8000/TCP 2d2h ubuntu@master:~$ kubectl proxy --accept-hosts=.* --address=0.0.0.0 & [1] 1170230 ubuntu@master:~$ Starting to serve on [::]:8001 |
1 2 3 4 5 |
$ multipass ls Name State IPv4 Image master Running 192.168.64.7 Ubuntu 20.04 LTS worker1 Running 192.168.64.4 Ubuntu 20.04 LTS worker2 Running 192.168.64.5 Ubuntu 20.04 LTS |
Nous avons donc démarré un proxy sur notre Kube, à présent nous pouvons donc accéder au k8s api server depuis l’IP de la VM qui est comme nous le voyons ci-dessus 192.168.64.7 sur le port 8001. Vérifions que le dashboard est bien accessible à l’adresse http://192.168.64.7:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ (voir ici pour plus de détails)
Nous voyons bien l’interface de connexion, nous allons à présent nous donner les moyens de se connecter au dashboard sans token de connexion, pour cela connectons nous sur la VM du master et ouvrons le fichier de déploiement de k8s comme suit
1 2 3 |
$ multipass shell master ... ubuntu@master:~$ kubectl -n kube-system edit deploy kubernetes-dashboard -o yaml |
Dans le fichier qui est édité nous allons rajouter un paramètre pour passer l’étape du login, enable-skip-login
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
... template: metadata: creationTimestamp: null labels: k8s-app: kubernetes-dashboard spec: containers: - args: - --auto-generate-certificates - --namespace=kube-system - --enable-skip-login image: kubernetesui/dashboard:v2.0.0 ... |
Rechargeons notre page de login et nous apercevons que « Passer », ou « Skip » en anglais, apparait à côté du bouton de connexion
Cliquons dessus… Nous arrivons bien sur le Dashboard
Nous voyons bien nos trois noeuds k8s précédemment créés
Configuration kubectl
A présent, il ne nous reste plus qu’à configurer notre kubectl local (que vous devez avoir installé au préalable, voir ici) pour pouvoir gérer notre cluster directement depuis notre macOS sans se connecter sur les VMs. Nous allons pour cela récupérer la config k8s de notre master et la copier dans notre fichier de configuration local de notre macOS à l’aide des commandes suivantes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
ubuntu@master:~$ microk8s config > $HOME/.kube/config ubuntu@master:~$ cat .kube/config apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURBVENDQWVtZ0F3SUJBZ0lKQU5TUWd6bEFCWDhPTUEwR0NTcUdTSWIzRFFFQkN3VUFNQmN4RlRBVEJnTlYKQkFNTURERXdMakUxTWk0eE9ETXVNVEFlRncweU1UQXpNamt4TXpVMU1ETmFGdzB6TVRBek1qY3hNelUxTUROYQpNQmN4RlRBVEJnTlZCQU1NRERFd0xqRTFNaTR4T0RNdU1UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCkFEQ0NBUW9DZ2dFQkFMUWgxWmZTdFpIVS9UbmNDWG12WnZqQytuM3JzRm52NmI4VjNyODcwSXJpaFk0V1ZNSVMKVW1IUTZUR2JpT1cvQlE0VGJFaXVqREZZL0RrMEUzVUl5M3JENFZkbDByRVJEWnhaWUVMZ2R6V2pPUWo4eUd5Rgp5Y0xDVERmd3hHeEo2TnpUVXg4dnhIUnVZSDJJeFh1RCtWL0NTRUs1aE1vcUNnVnp1WkJyK09adHZkdVlZZG5FCjZURXU1a0d0Y0tkeWR5eU9yZGZza1JZMlZqb2E5amJUS0RTWFByNW9xN1QyelQvYStzcmpWN3R5M0FuNzN2aUMKMytmUFJUODhNY3lLZHVSZmpFZlcwRzRiVjlXUVEvWFhqWmJaRHluZDJZa1lidWRJZG91NTJxTlNTb3I3WFlCagpJbGNmdE9FVW5Oc1JJbmhZcWF5UE5UOW1jSTV0TkJvSExwVUNBd0VBQWFOUU1FNHdIUVlEVlIwT0JCWUVGREE5Cmt1bGwvKzYycmZEK2NFNnN5ZzJpUHVDUU1COEdBMVVkSXdRWU1CYUFGREE5a3VsbC8rNjJyZkQrY0U2c3lnMmkKUHVDUU1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUZMYVZOMnpERVk0SVJFQwplOGg1V2lRaFB1aEhwMmZrTTFoVzdCYi9yeEh6UTVycUU5V1BVZVpoUTFJcEJNSlVOMWZLWkttVG1BeGVnb1RICjBCZEJXQTBweHZ2SWY2OG9QSkl4VkxXaDZyTDNxS3hXKzMxaWRyNWpjWktzTzNpVnRMTWVkdGp6c3dzSEtpTEUKbHNFeTl1d2MxSlpiWHc5dHdvRzBqWkZtSkdXYURsYVc0QXlRV3FrbElaWHljZUR5TUkzTElnNFQ2TGNGdk42QgpCVWx2ZGFkQ3JPZUptSGpFbjZEazI4bHB0L0FyKy91OFRQRTNRaVE2SVpHWGxnQTQwOGQrV0w4YmJTZnZwZldnClRGczlrTHZSekZ3R296WndUcUFLWXRKVW9sOVV5blNQMExiK0daUTFOMmFrbkQwZnliVHZQak9qSnpuNlY2RHgKS1QwOFd1Yz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= server: https://192.168.64.7:16443 name: microk8s-cluster contexts: - context: cluster: microk8s-cluster user: admin name: microk8s current-context: microk8s kind: Config preferences: {} users: - name: admin user: token: WkxHTndGMi9CL09xMEtLQkpkbkZhVEIwejBOcTZLbGxza2UvWVZxQlJ2ST0K ubuntu@master:~$ logout # on télécharge le fichier de config en local $ multipass transfer master:/home/ubuntu/.kube/config . # et on l'ajoute à notre config local kube $ cat config > $HOME/.kube/config # A présent on peut supprimer le fichier télécharger $ rm config |
Vérifions que notre configuration est fonctionnelle
1 2 3 4 5 |
$ kubectl get nodes NAME STATUS ROLES AGE VERSION worker1 Ready <none> 71m v1.20.4-34+1ae8c29bbb48f7 worker2 Ready <none> 66m v1.20.4-34+1ae8c29bbb48f7 master Ready <none> 82m v1.20.4-34+1ae8c29bbb48f7 |
Créons le namespace qui servira à accueillir notre future application Quarkus
1 2 |
$ kubectl create ns quarkus-apero-code namespace/quarkus-apero-code created |
Clean up
Si vous voulez supprimer proprement les VMs précédemment créer, c’est encore une fois simple, lancer la ligne de commande suivante
1 2 3 4 5 6 7 8 9 |
$ multipass delete master worker1 worker2 $ multipass ls Name State IPv4 Image master Deleted -- Not Available worker1 Deleted -- Not Available worker2 Deleted -- Not Available $ multipass purge $ multipass ls No instances found. |
And voilà!
A présent vous êtes en capacité de travailler sur un k8s léger en mode single-node ou, si vous voulez aller plus loin, monter un cluster multi-node.
Note : ce que nous venons d’installer et configurer n’est pas destiné à de la production, ce qui est montré dans cet article est uniquement à but pédagogique afin de pouvoir travailler avec un « vrai » k8s pour monter en compétence, faire des POCs, de la CI/CD ou tout simplement travailler rapidement sur votre poste de travail.
Dans le prochain article nous verrons pourquoi Quarkus est en titre de cette série d’article, nous verrons donc comment déployer une solution Quarkus dans un k8s grâce aux extensions et de voir comment la simplicité se poursuit dans l’utilisation et le déploiement d’applications conteneurisées dans notre Microk8s. To be continued..
Références