Tutoriel : Utiliser Kubernetes avec Google Cloud

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ébergement Cloud les plus populaires du moment avec AWS et Azure. Vous pourrez directement y utiliser un orchestrateur pour créer vos cluster 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 vosu référer à mon article sur le sujet si vous voulez en savori 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.

Architecture Kubernetes
Architecture Kubernetes

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 (jusqu’à 300€ d’utilisation gratuite ce qui laisse de quoi bien s’amuser).

Dès que votre inscription est terminée, Allez créer un nouveau projet vide sur l’interface. Ce projet va regrouper l’ensemble de vos cluster dont 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

Maintenant que gcloud est installé, 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

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.

Laissez une réponse