Voici un sujet Devops un peu plus complexe que nous allons traiter aujourd’hui. Kubernetes est une solution d’orchestration et de gestion de clusters de conteneurs open-source écrit en Go qui a été créé par Google. Vous pourrez facilement utiliser Kubernetes avec Google Cloud.
Le projet est très populaire dans le monde du Devops ; son code source est partagé sur Github pour permettre à quiconque de le récupérer voire de contribuer à son évolution. A ce jour il y a plus de 1000 contributeurs sur le projet.
Google Cloud Platform est un des hébergements Cloud les plus populaires du moment avec AWS et Azure. Vous pourrez directement y utiliser un orchestrateur pour créer vos clusters contrairement aux hébergeurs classiques.
Qu’est-ce qu’un orchestrateur ?
Si l’utilisateur classique va simplement choisir un type d’instance, un OS et une région d’hébergement, l’hébergeur va lui avoir un véritable orchestrateur pour répondre à votre demande en provisionnant des VM sur des serveurs physiques ou en adaptant des VM déjà existantes.
Pour tenter de faire simple, si vous désirez un serveur avec un super disque dur, c’est l’orchestrateur qui va vous mettre à disposition du disque dur qui ne sera pas au même endroit que votre processeur. Pourtant cela sera totalement transparent pour les utilisateurs de ces plateformes.
Comme vous le savez, Docker est un gestionnaire de conteneurs très simple à utiliser par rapport aux anciennes solutions existantes. Je vous propose de vous référer à mon article sur le sujet si vous voulez en savoir plus sur Docker (voir article Tutoriel Docker : Premiers pas avec Docker)
Si Docker est un outil idéal dans la gestion de conteneurs, Kubernetes propose beaucoup plus que la gestion de conteneurs car il va permettre de gérer et de déployer des clusters de containers Docker avec des concepts comme du loadbalacing sur X serveurs grâce à un master.
On nommera des « pod » (voir image ci-dessus), une unité de déploiement de Kubernetes qui peuvent être créés ou supprimés par l’intermédiaire de commandes ; c’est la notion la plus granulaire sur un cluster kubernetes.
Les nodes (appelé aussi workers ou minion) sont des machines (ou machines virtuelles) où des conteneurs sont déployés.
Sachez que Kubernetes n’est pas la seule solution d’orchestration sur le marché actuellement mais elle est de loin la plus populaire. Vous pourrez également trouver les solutions docker-swam, Mezos ou Fleet.
Installer Kubernetes
Maintenant que nous avons compris l’intérêt de Kubernetes, je vous propose de mettre en oeuvre notre premier déploiement d’un cluster sur Google Cloud Platform. Quoi de mieux qu’un exemple pour mieux comprendre l’intérêt ?
Nous allons partir dans l’idée que l’installation se fera à partir d’un serveur Ubuntu car je pense que c’est l’une des distribution les plus populaires du moment. Pour installer Kubernetes, nous allons appliquer cette liste de commandes :
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo chmod 777 /etc/apt/sources.list.dcat <<EOF > /etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni
Kubernetes et Google Container Engine
Pour utiliser Kubernetes avec l’hébergement Google Cloud Platform, il faudra installer un outil supplémentaire qui permet ded travailler directement avec notre hébergement.
Vous comprendrez qu’il vous faudra créer un compte sur Google Cloud Platform pour pouvoir finir ce tutoriel intégralement. Rassurez-vous, lors de votre première inscription, vous aurez accès à Google Cloud Platform gratuitement. Vous aurez jusqu’à 300€ d’utilisation gratuite ce qui laisse de quoi bien s’amuser.
Commencez par vous inscrire. Ensuite, vous allez créer un nouveau projet vide sur l’interface. Ce projet va regrouper l’ensemble de vos cluster. Il y aura également le cluster que nous allons créer à la suite de ce tutoriel.
Pour travailler avec Google Container Engine, nous devons installer l’outil proposé par Google comme ceci :
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo apt-get update && sudo apt-get install google-cloud-sdk
A présent, nous avons fini d’installer gcloud. Nous allons le configurer comme ceci :
gcloud init gcloud config set compute/zone europe-west1-b gcloud container clusters create cluster-1 gcloud auth application-default login gcloud container clusters get-credentials cluster-1 --zone us-central1-c --project stable-synapse-156722
Le paramètre à mettre en projet sera l’id associé au projet que vous avez créé sur l’interface de Google. Vous le trouverez dans la page d’accueil de Google Cloud Platform au sein du bloc projet.
Nous pourrons vérifier l’état des clusters avec la méthode suivante :
Kubectl cluster-info
Nous pourrons regarder à tout moment l’état de nos pods et de nos services avec les commandes suivantes :
kubectl get podkubectl get service
On va ainsi créer des pods et le service associé d’une nouvelle image que nous allons récupérer :
docker pull eboraas/apache-phpkubectl run apache --image=eboraas/apache-php --replicas=2 --port=80 --expose --service-overrides='{ "spec": { "type": "LoadBalancer" } }'
En affichant vos pods et vos services, vous aurez au bout de quelques minutes, une IP publique pour votre application :
NAME READY STATUS RESTARTS AGE apache-3670720257-1ll4t 1/1 Running 0 3m apache-3670720257-1v7af 1/1 Running 0 3m NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE apache 10.55.254.17 104.198.150.151 80:32130/TCP 3m kubernetes 10.55.240.1 <none> 443/TCP 14m
Prenez l’adresse External-Ip et mettez la dans votre navigateur pour vérifier que vosu aurez bien la page d’accueil d’Apache. C’est gagné, nous venons de déployer notre premier projet qui contient un load balancer et deux enfants sur Google Cloud Platform.
Si vous désirez supprimer votre cluster sur Google cloud Platform, vous devrez supprimer votre service et vos pods de cette manière :
kubectl delete deployment my-nginx kubectl delete svc my-nginx
Conclusion tutoriel kubernetes
Il n’est pas si difficile d’utiliser Kubernetes si on comprend sa façon de fonctionner.. Vous pourrez créer d’autres types de déploiement en profitant de la documentation complète proposée par Google sur ce sujet.
1 Rétrolien / Ping