2. Minikube

Installer Minikube

La virtualisation VT-x ou AMD-v doit être activée dans le BIOS de votre machine.

egrep --color 'vmx|svm' /proc/cpuinfo

Si vous n’avez pas déjà un hyperviseur installé, installez-le maintenant pour votre système d’exploitation tel que KVM :

echo " Upgrade the system"
sudo apt-get update && sudo apt-get -y upgrade || apt-get -y install sudo && sudo apt-get update && sudo apt-get -y upgrade
echo "Virtualization host installation"
sudo apt-get -y install qemu-kvm libvirt-bin virtinst virt-viewer libguestfs-tools virt-manager uuid-runtime curl libvirt-dev genisoimage qemu-kvm libyaml-dev
echo "Enable libvirt"
sudo systemctl restart libvirtd
sudo virt-host-validate

Il sera peut-être utile d'installer Docker :

curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

Egalement, il est nécessaire d'installer kubectl :

sudo snap install kubectl --classic

Vous pouvez installer Minikube sur Linux en téléchargeant un binaire statique:

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
  && chmod +x minikube

Voici une façon simple d’ajouter l’exécutable de Minikube à votre path:

sudo cp minikube /usr/local/bin && rm minikube

Démarrer Minikube

Avec Virtualbox :

minikube start

Avec KVM :

minikube start --vm-driver kvm2
😄  minikube v1.0.0 on linux (amd64)
🤹  Downloading Kubernetes v1.14.0 images in the background ...
🔥  Creating kvm2 VM (CPUs=2, Memory=2048MB, Disk=20000MB) ...
💿  Downloading Minikube ISO ...
 142.88 MB / 142.88 MB [============================================] 100.00% 0s
📶  "minikube" IP address is 192.168.39.127
🐳  Configuring Docker as the container runtime ...
🐳  Version of container runtime is 18.06.3-ce
⌛  Waiting for image downloads to complete ...
✨  Preparing Kubernetes environment ...
💾  Downloading kubeadm v1.14.1
💾  Downloading kubelet v1.14.1
🚜  Pulling images required by Kubernetes v1.14.1 ...
🚀  Launching Kubernetes v1.14.1 using kubeadm ...
⌛  Waiting for pods: apiserver proxy etcd scheduler controller dns
🔑  Configuring cluster permissions ...
🤔  Verifying component health .....
💗  kubectl is now configured to use "minikube"
🏄  Done! Thank you for using minikube!

Vérifications

kubectl config use-context minikube
minikube status
kubectl cluster-info
sudo apt install xdg-utils lynx
minikube dashboard
🔌  Enabling dashboard ...
🤔  Verifying dashboard health ...
🚀  Launching proxy ...
🤔  Verifying proxy health ...
🎉  Opening http://127.0.0.1:39671/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ in your default browser...

Hello World Minikube

Ce tutoriel vous montre comment exécuter une simple application Hello World Node.js sur Kubernetes en utilisant Minikube et Katacoda. Katacoda fournit un environnement Kubernetes gratuit dans le navigateur. Vous pouvez également suivre ce tutoriel si vous avez installé Minikube localement.

Objectifs

  • Déployez une application Hello World sur Minikube.
  • Lancez l'application.
  • Afficher les journaux des applications.

Fichier minikube/server.js :

var http = require('http');

var handleRequest = function(request, response) {
  console.log('Received request for URL: ' + request.url);
  response.writeHead(200);
  response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);

Fichier minikube/Dockerfile :

FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD node server.js

Pour plus d'informations sur la commande docker build, lisez la documentation de Docker.

Créer un cluster Minikube

  1. Cliquez sur Lancer le terminal.

    Si vous avez installé Minikube localement, lancez minikube start.

  2. Ouvrez le tableau de bord Kubernetes dans un navigateur :

     minikube dashboard
    
  3. Environnement Katacoda seulement : En haut du volet du terminal, cliquez sur le signe plus, puis cliquez sur Sélectionner le port pour afficher sur l'hôte 1.

  4. Environnement Katacoda seulement : Tapez 30000, puis cliquez sur Afficher le port.

Créer un déploiement

Un Pod Kubernetes est un groupe d'un ou plusieurs conteneurs, liés entre eux à des fins d'administration et de mise en réseau. Dans ce tutoriel, le Pod n'a qu'un seul conteneur.

Un Déploiement Kubernetes vérifie l'état de santé de votre Pod et redémarre le conteneur du Pod s'il se termine. Les déploiements sont le moyen recommandé pour gérer la création et la mise à l'échelle des Pods.

  1. Utilisez la commande kubectl create pour créer un déploiement qui gère un Pod. Le Pod utilise un conteneur basé sur l'image Docker fournie.

     kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
    
  2. Affichez le déploiement :

     kubectl get deployments
    

    Sortie :

     NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
     hello-node   1         1         1            1           1m
    
  3. Voir le Pod :

     kubectl get pods
    

    Sortie :

     NAME                          READY     STATUS    RESTARTS   AGE
     hello-node-5f76cf6ccf-br9b5   1/1       Running   0          1m
    
  4. Afficher les événements du cluster :

     kubectl get events
    
  5. Voir la configuration de kubectl :

     kubectl config view
    

    Pour plus d'informations sur les commandes kubectl, voir la vue d'ensemble de kubectl.

Créer un service

Par défaut, le Pod n'est accessible que par son adresse IP interne dans le cluster Kubernetes. Pour rendre le conteneur hello-node accessible depuis l'extérieur du réseau virtuel Kubernetes, vous devez exposer le Pod comme un Service Kubernetes.

  1. Exposez le Pod à internet en utilisant la commande kubectl expose :

     kubectl expose deployment hello-node --type=LoadBalancer --port=8080
    

    L'indicateur --type=LoadBalancer indique que vous voulez exposer votre Service à l'extérieur du cluster.

  2. Affichez le Service que vous venez de créer :

     kubectl get services
    

    Sortie :

     NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
     hello-node   LoadBalancer   10.108.144.78   <pending>     8080:30369/TCP   21s
     kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          23m
    

    Sur les fournisseurs en nuage qui supportent les load balancers, une adresse IP externe serait fournie pour accéder au Service. Sur Minikube, le type LoadBalancer rend le Service accessible via la commande minikube service.

  3. Exécutez la commande suivante :

     minikube service hello-node
    
  4. Environnement Katacoda seulement : Cliquez sur le signe plus, puis cliquez sur Sélectionner le port pour afficher sur l'hôte 1.

  5. Environnement Katacoda seulement : Tapez 30369 (voir port en face de 8080 dans la sortie services), puis cliquez sur Afficher le port.

    Cela ouvre une fenêtre de navigateur qui sert votre application et affiche le message Hello World.

Activer les extensions

Minikube dispose d'un ensemble d'extensions intégrées qui peuvent être activées, désactivées et ouvertes dans l'environnement Kubernetes local.

  1. Énumérer les extensions actuellement pris en charge :

     minikube addons list
    

    Sortie:

     addon-manager: enabled
     coredns: disabled
     dashboard: enabled
     default-storageclass: enabled
     efk: disabled
     freshpod: disabled
     heapster: disabled
     ingress: disabled
     kube-dns: enabled
     metrics-server: disabled
     nvidia-driver-installer: disabled
     nvidia-gpu-device-plugin: disabled
     registry: disabled
     registry-creds: disabled
     storage-provisioner: enabled
    
  2. Activez une extension, par exemple, heapster :

     minikube addons enable heapster
    

    Sortie :

     heapster was successfully enabled
    
  3. Affichez le pod et le service que vous venez de créer :

     kubectl get pod,svc -n kube-system
    

    Sortie :

     NAME                                        READY     STATUS    RESTARTS   AGE
     pod/heapster-9jttx                          1/1       Running   0          26s
     pod/influxdb-grafana-b29w8                  2/2       Running   0          26s
     pod/kube-addon-manager-minikube             1/1       Running   0          34m
     pod/kube-dns-6dcb57bcc8-gv7mw               3/3       Running   0          34m
     pod/kubernetes-dashboard-5498ccf677-cgspw   1/1       Running   0          34m
     pod/storage-provisioner                     1/1       Running   0          34m
    
     NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
     service/heapster               ClusterIP   10.96.241.45    <none>        80/TCP              26s
     service/kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP       34m
     service/kubernetes-dashboard   NodePort    10.109.29.1     <none>        80:30000/TCP        34m
     service/monitoring-grafana     NodePort    10.99.24.54     <none>        80:30002/TCP        26s
     service/monitoring-influxdb    ClusterIP   10.111.169.94   <none>        8083/TCP,8086/TCP   26s
    
  4. Désactivez heapster :

     minikube addons disable heapster
    

    Sortie :

     heapster was successfully disabled
    

Nettoyage

Vous pouvez maintenant nettoyer les ressources que vous avez créées dans votre cluster :

kubectl delete service hello-node
kubectl delete deployment hello-node

Si nécessaire, arrêtez la machine virtuelle Minikube (VM) :

minikube stop

Si nécessaire, effacez la VM Minikube :

minikube delete

Sources

Installer et configurer kubectl

Installer Minikube

Hello Minikube