Vu la popularité du projet (dépôt github le plus discuté avec +350 000 commentaires) et faisant partie du monde des containers, je n'ai pas pu résister à l'envie de tester kubernetes. Voici deux méthodes pour installer simplement kubernetes. La première est une installation locale avec minikube, et la deuxième je l'ai réalisé sur mon cluster proxmox avec kubeadm.
1. Installation de Minikube
NOTE: Il est déconseillé d'utiliser minikube dans un environnement de production, il s'agit plus d'une installation à usage personnel sur son laptop afin de tester kubernetes.
L'installation est simple, un binaire à télécharger et à exécuter :
wget -O /usr/local/bin/minikube https://github.com/kubernetes/minikube/releases/download/v0.23.0/minikube-linux-amd64chmod +x /usr/local/bin/minikube
Une fois installé on démarre notre cluster kubernetes single node en une seule commande, l'installation se fera à l'intérieur d'une VM, personnellement j'utilise virtualbox :
minikube start --vm-driver=virtualbox
On peut déjà jouer avec kubernetes et installer un blog ghost par exemple :
kubectl run ghost --image=ghostkubectl expose deployment ghost --type=NodePort --port=80 --target-port=2368
L'accès à celui-ci peut se faire de cette façon :
export IP=$(minikube ip)export NODE_PORT=$(kubectl get services ghost -o go-template='{{(index .spec.ports 0).nodePort}}')curl http://$IP:$NODE_PORT
2. Installation de Kubeadm
L'utilisation de kubeadm est aussi déconseillée en production car kubeadm est encore en bêta, mais n'étant pas un géant du web je me le permets quand même. J'ai déployé plusieurs VM Ubuntu 16.04 LTS sur mon cluster proxmox. Une qui fera office de master et les autres de workers. Sans proxmox vous pouvez très bien créer vos machines via vagrant :
vagrant init ubuntu/xenial64vagrant up
L'installation des dépendances d'un noeud kubernetes (master ou worker) devra s'effectuer comme suit :
# Installation des dépendances d'un noeud kuberneteapt-get update && apt-get install -y apt-transport-https docker.ioecho "deb http://apt.kubernetes.io/ kubernetes-xenial main" >> /etc/apt/sources.list.d/kubernetes.listcurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -apt-get update && apt-get install -y kubelet kubeadm kubernetes-cniswapoff -a # Kubernetes ne supporte pas le SWAP
Master node
Une fois les dépendances installées et le SWAP désactivé sur chacun des noeuds, nous pouvons installer le master :
kubeadm init --pod-network-cidr=10.32.0.0/12
Il est possible de gérer notre cluster depuis notre PC avec kubectl, il suffit de copier le fichier /etc/kubernetes/admin.conf
accessible sur votre noeud master dans votre répertoire $HOME/.kube/config
.
scp root@<master ip>:/etc/kubernetes/admin.conf ~/.kube/config
Je suis sur arch linux donc un simple pacaur -S kubectl-bin
m'installe le client, sinon c'est juste un binaire a installer.
Pour vérifier le bon fonctionnement on peut faire un petit kubectl version
depuis notre PC.
L'installation d'un pod network add-on est requis, c'est ce qui va permettre de faire communiquer les pods entre eux. Il en existe plusieurs (voici la liste), moi j'utilise kube-router.
kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml
Après quelques secondes le node master devrait être ready (kubectl get nodes
pour vérifier).
Worker nodes
Pour ajouter d'autres noeuds à notre cluster c'est très simple, la commande kubeadm init
exécutée précédemment à du vous afficher une commande kubeadm join
suivit d'un token qui devrait ressembler à ça :
kubeadm join --token <TOKEN> <IP>
Une fois cette commande exécutée on vérifie encore une fois que le(s) noeud(s) sont correctement ajouté(s) avec kubectl get nodes
.
On peut jouer avec notre cluster et par exemple déployer plusieurs replica de nginx :
kubectl run ghost --image=nginxkubectl scale deployment nginx --replicas=4kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80export NODE_PORT=$(kubectl get services nginx -o go-template='{{(index .spec.ports 0).nodePort}}')curl http://192.168.1.50:$NODE_PORT
(Optionel) Utiliser seulement un noeud
Si vous ne voulez pas utiliser d'autre noeud que le master pour ne pas s'embêter avec plusieurs VM par exemple c'est possible :
# Allow a single-host clusterkubectl taint nodes --all node-role.kubernetes.io/master-
PS: Si jamais vous avez tout cassé ^^ et que votre cluster ne fonctionne plus vous pouvez reset votre installation avec un kubeadm reset
.
Conclusion
Kubernetes facilite l'utilisation des containers sur des grosses infrastructures et propose une manière simple de faire de l'auto-scaling. Ça permet de se concentrer sur le développement et l'amélioration de son application et moins sur la gestion de ses serveurs.
Maintenant il me reste d'autres outils liés à kubernetes à découvrir comme draft.sh, helm.sh et fission
Je n'ai pas abordé les détails de l'utilisation de kubernetes, il s'agit simplement d'un mini guide d'installation pour découvrir l'outil, Si vous souhaitez en savoir davantage sur kubernetes voici quelques ressources qui m'ont été très utiles sur sa compréhension et son utilisation :
Un tutoriel interactif très efficace que je conseille à tous. Et ces deux vidéos, la première est théorique et l'autre est plus accès sur la pratique.
Voilà ! Comme d'habitude si vous avez des questions, suggestions n'hésitez pas à les soumettre dans les commentaires ! Bon week-end ;)
Références :