Kubernetes Native App Architecture

L'architecture d'une application Cloud-Native standard se compose de trois niveaux: un niveau de persistance ou de base de données, un niveau backend et un niveau frontal pour votre application. Dans Kubernetes, vous définissez et créez plusieurs ressources pour chacun de ces niveaux, comme vous pouvez le voir dans le diagramme suivant:

k8-architecture-c64e6398

Ce tutoriel demande les pré-requis suivants :

  • Vous avez déjà un compte et un projet créé dans Google Cloud Platform (300$ offerts)
  • Vous avez installé Cloud SDK (l'interface de ligne de commande Google pour la plateforme Google Cloud).

REMARQUE: GKE est recommandé pour les déploiements en production car il s'agit d'un environnement prêt pour la production avec une disponibilité, un load-balancer et des fonctionnalités de mise en réseau de conteneurs garanties.

Tous les articles vus précemment ont été réalisés sur des VPS hébergés par OVH, aujourd'hui il s'agit de démontrer à quel point les "cloud providers" que sont GKE, AWS et Azure voir Alibaba Cloud dans une moindre mesure ou IBM, sont redoutables d'efficacité et de simplicité.

Étape 1: configurer la plate-forme

La première étape pour travailler avec les clusters Kubernetes consiste à configurer l’outil de ligne de commande gcloud.

Une fois le SDK Google Cloud installé, suivez ces instructions pour initialiser et configurer l'interface CLI de gcloud:

Depuis une fenêtre de console dans votre fenêtre locale, démarrez le processus d'authentification en exécutant la commande suivante:

gcloud init

Vous serez invité à fournir les informations ci-dessous:

  • Configurez le projet Google Cloud Platform que vous souhaitez connecter à Google Compute Engine.
  • Configurez Google Compute Engine en entrant dans la zone de calcul.

IMPORTANT: la zone de calcul que vous avez saisie pour configurer Google Compute Engine doit correspondre à la zone que vous spécifiez lorsque vous créez le cluster Kubernetes.
Maintenant que votre CLI gcloud est configurée, votre système local communique avec votre compte et votre projet Google Cloud Platform. Une fois cette étape terminée, vous pourrez créer un cluster Kubernetes.

Étape 2: Créer un cluster Kubernetes

Pour créer un cluster Kubernetes, suivez les instructions ci-dessous:

Exécutez les commandes ci-dessous. N'oubliez pas de remplacer MY-KUBERNETES-CLUSTER par le nom que vous avez choisi pour votre cluster et d'utiliser un nom de sous-réseau différent si vous ne souhaitez pas utiliser le nom par défaut.

gcloud container clusters create MY_KUBERNETES_CLUSTER \
  --enable-cloud-logging \
  --enable-cloud-monitoring \
  --subnetwork default

Et voici ce que doit vous retourner GKE suite au processus:

Created [https://container.googleapis.com/v1/projects/helm-traefik/zones/europe-west3-a/clusters/cluster-gs-26].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/europe-west3-a/cluster-gs-26?project=helm-traefik
kubeconfig entry generated for cluster-gs-26.
NAME           LOCATION        MASTER_VERSION  MASTER_IP       MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
cluster-gs-26  europe-west3-a  1.9.7-gke.5     35.198.167.146  n1-standard-1  1.9.7-gke.5   3          RUNNING

Le nouveau cluster apparaîtra également dans la section Container Engine -> Container de Google Cloud Platform:

Capture-d-e-cran-2018-08-22-a--21.44.47

Configurez la zone de calcul. N'oubliez pas que cette zone doit correspondre à celle que vous avez indiquée à l'étape 1. Remplacez l'espace réservé COMPUTE_ZONE par la valeur correcte.

gcloud config set compute/zone  COMPUTE_ZONE

Obtenez les informations du cluster :

gcloud container clusters get-credentials MY_KUBERNETES_CLUSTER

Authentifier le cluster :

gcloud auth application-default login

Une fois que vous avez exécuté la commande ci-dessous, Google vous invite à introduire votre compte Google et à autoriser la bibliothèque Google à accéder aux informations de votre compte:

Votre cluster est maintenant authentifié avec le SDK Google Cloud. Vous pouvez installer la CLI kubectl et commencer à travailler avec votre cluster Kubernetes.

Étape 3: installez l'outil de ligne de commande Kubectl

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/OS_DISTRIBUTION/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

Puis on va saisir :

MBP-de-admin:~ admin$ kubectl cluster-info
Kubernetes master is running at https://35.198.167.146
GLBCDefaultBackend is running at https://35.198.167.146/api/v1/namespaces/kube-system/services/default-http-backend:http/proxy
Heapster is running at https://35.198.167.146/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://35.198.167.146/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
kubernetes-dashboard is running at https://35.198.167.146/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
Metrics-server is running at https://35.198.167.146/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

Et enfin :

MBP-de-admin:~ admin$ kubectl get nodes
NAME                                           STATUS    ROLES     AGE       VERSION
gke-cluster-gs-26-default-pool-14349eca-c6mg   Ready     <none>    39m       v1.9.7-gke.5
gke-cluster-gs-26-default-pool-14349eca-j9ll   Ready     <none>    39m       v1.9.7-gke.5
gke-cluster-gs-26-default-pool-14349eca-wkn7   Ready     <none>    39m       v1.9.7-gke.5

On peut aussi faire :

kubectl describe node 

Ce qui donne :

Capture-d-e-cran-2018-08-22-a--21.50.22

Étape 4: Installez Helm

La méthode la plus simple pour exécuter et gérer des applications dans un cluster Kubernetes consiste à utiliser Helm. Helm vous permet d'effectuer des opérations clés pour gérer des applications telles que l'installation, la mise à niveau ou la suppression. Comme mentionné précédemment, Helm est composé de deux parties: Helm (le client) et Tiller (le serveur). Suivez les étapes ci-dessous pour terminer l’installation du timon et de la barre.

Installation d'Helm

Pour terminer l'installation de Tiller, exécutez la commande ci-dessous:

helm init

Puis :

helm init --upgrade

Pour vérifier si le serveur Helm - tiller est bien installé :

MBP-de-admin:~ admin$ kubectl --namespace kube-system get pods | grep tiller
tiller-deploy-8568c776cc-d69gz                            1/1       Running   0          1m

Étape 5: Installer une application à l'aide d'un chart Helm

Un chart Helm décrit une version spécifique d'une application, également appelée "release". La "release" inclut des fichiers avec des ressources et des fichiers nécessaires à Kubernetes qui décrivent l'installation, la configuration, l'utilisation et la licence d'un chart. (cf. article récent sur Helm).

Les étapes ci-dessous montrent comment exécuter les applications suivantes à l'aide de charts Helm:

  • Redis
  • MongoDB
  • Odoo
  • WordPress

En exécutant la commande helm install, l'application sera déployée sur le cluster Kubernetes. Vous pouvez installer plusieurs charts sur le cluster ou les clusters.

IMPORTANT: Si vous ne spécifiez pas de nom de release avec l'option --name, une sera automatiquement attribuée.

Vous trouverez un exemple de l'installation de Redis sur GKE en utilisant les charts Helm ci-dessous:

helm install stable/redis

Voici comment installer MongoDB, Odoo ou WordPress dans les exemples ci-dessous:

Pour installer la version la plus récente de MongoDB sur GKE, exécutez la commande suivante:

helm stable/mongodb

Pour installer la version Odoo la plus récente sur GKE, exécutez la commande suivante:

helm install stable/odoo

Pour installer la version la plus récente de WordPress, exécutez la commande suivante:

helm install --name my-release stable/wordpress

Vous pouvez désormais gérer vos déploiements à partir du tableau de bord Kubernetes. Suivez les instructions ci-dessous pour accéder à l'interface utilisateur Web.

Étape 6: Accéder au tableau de bord Kubernetes

Kubernetes Dashboard est une interface utilisateur Web à partir de laquelle vous pouvez gérer vos clusters de manière plus simple. Il fournit des informations sur l'état du cluster, les déploiements et les ressources de conteneur. Vous pouvez également vérifier les informations d'identification et le fichier d'erreur du journal de chaque module dans le déploiement.

kubectl proxy

Avec cette commande, vous créerez un serveur proxy sur le port 8001 pour accéder au tableau de bord Kubernetes. Il sera disponible sur: localhost: 8001/ui. L'écran d'accueil affiche la section "Workloads". Vous obtenez ici un aperçu des éléments de cluster suivants:

  • l'utilisation du processeur
  • Utilisation de la mémoire
  • Déploiements
  • réplicas
  • Pods

Capture-d-e-cran-2018-08-23-a--11.29.45

Capture-d-e-cran-2018-08-23-a--11.30.27

Depuis cet écran d'accueil, vous pouvez effectuer certaines actions de base telles que:

  • Surveillance de l'état de vos déploiements et de vos modules.
  • Vérification des journaux de conteneur et de conteneur pour identifier les erreurs possibles lors de la création des conteneurs.
  • Recherche d'informations d'identification de l'application (crédentials)

A partir de là nous disposons de nos containeurs avec les applications accessibles sur le web avec l'adresse iP du master cluster que vous trouverez ici :

Capture-d-e-cran-2018-08-23-a--11.46.25

Et voilà le résultat en faisant pointer vers un sous-domaine de votre DNS :

Capture-d-e-cran-2018-08-23-a--11.56.22

Un joli Wordpress tout beau, tout neuf dans le cloud.

Sources :