Le projet, vous l'aurez compris, consiste à mettre en place une stack EFK (Elastic, Fluentd, Kibana) / à l'inverse d'une stack ELK (Elastic, Logstash, Kibana) sur un cluster GKE évidemment.
Pour ce faire rendez-vous sur Google Console et créer votre projet, activer la facturation avec les 300 $ de crédits offerts, et lancez le Cloud Shell.

Ensuite saisissez ces commandes dans le shell :
$ export PROJECT_ID=$(gcloud config get-value project)
$ gcloud config set project ${PROJECT_ID}
$ CLUSTER_ZONE=$(gcloud config set compute/zone us-central1-c)
$ CLUSTER="demo-core"
$ gcloud container clusters create ${CLUSTER} --scopes "https://www.googleapis.com/auth/projecthosting,cloud-platform"
Ce qui donne :
Creating cluster demo-core in us-central1-c... Cluster is being health-checked (master is healthy)...done.
Created [https://container.googleapis.com/v1/projects/totemic-splicer-229713/zones/us-central1-c/clusters/demo-core].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1-c/demo-core?project=totemic-splicer-229713
kubeconfig entry generated for demo-core.
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS
demo-core us-central1-c 1.10.11-gke.1 162.222.179.87 n1-standard-1 1.10.11-gke.1 3 RUNNING
Clonez le repository :
$ git clone https://github.com/gabrielsagnard/efk.git
$ cd efk
Créer l'utilisateur admin clusterrolebinding :
$ export GKE_USER=$(gcloud config get-value account)
$ echo $GKE_USER
$ kubectl create clusterrolebinding cluster-admin-binding-$GKE_USER --clusterrole=cluster-admin --user=$(gcloud config get-value account) &>/dev/null
Désactivez la journalisation StackDriver, mais vérifiez les pods dans le namespace kube-system avec :
$ kubectl get pods -n kube-system
Si StackDriver est activé, il affiche quelque chose comme:
gsagnard2006@cloudshell:~/efk (totemic-splicer-229713)$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
event-exporter-v0.2.3-54f94754f4-8pqnl 2/2 Running 0 3m
fluentd-gcp-scaler-6d7bbc67c5-sdph2 1/1 Running 0 3m
fluentd-gcp-v3.1.0-lzdfk 2/2 Running 0 1m
fluentd-gcp-v3.1.0-vk8wd 2/2 Running 0 1m
fluentd-gcp-v3.1.0-vmhz5 2/2 Running 0 1m
heapster-v1.5.3-76f46d6554-jsz2k 3/3 Running 0 2m
kube-dns-788979dc8f-dbz76 4/4 Running 0 3m
kube-dns-788979dc8f-tsn7g 4/4 Running 0 2m
kube-dns-autoscaler-79b4b844b9-kw9np 1/1 Running 0 3m
kube-proxy-gke-demo-core-default-pool-e9c97b4b-3d8d 1/1 Running 0 3m
kube-proxy-gke-demo-core-default-pool-e9c97b4b-62j6 1/1 Running 0 3m
kube-proxy-gke-demo-core-default-pool-e9c97b4b-p81x 1/1 Running 0 3m
l7-default-backend-5d5b9874d5-5wsjh 1/1 Running 0 3m
metrics-server-v0.2.1-7486f5bd67-tw96r 2/2 Running 0 2m
Dans le cas présent, il existe des pods fluent et exportateur d'événement, cela indique que Stackdriver est activé. Désactiver StackDriver avec ce modèle de commande:
$ gcloud container clusters update ${CLUSTER} ${CLUSTER_ZONE} --logging-service none
Une fois l'exécution terminée, attendez quelques minutes que le cluster supprime automatiquement tous les anciens pods associés à StackDriver. Vérifiez les pods dans le namespace kube-system avec:
$ kubectl get pods -n kube-system
Si les pods fluent et event-exporter ont été supprimés automatiquement, le message suivant apparaît:
gsagnard2006@cloudshell:~ (totemic-splicer-229713)$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
heapster-v1.5.3-76f46d6554-jsz2k 3/3 Running 0 1h
kube-dns-788979dc8f-dbz76 4/4 Running 0 1h
kube-dns-788979dc8f-tsn7g 4/4 Running 0 1h
kube-dns-autoscaler-79b4b844b9-kw9np 1/1 Running 0 1h
kube-proxy-gke-demo-core-default-pool-e9c97b4b-3d8d 1/1 Running 0 1h
kube-proxy-gke-demo-core-default-pool-e9c97b4b-62j6 1/1 Running 0 1h
kube-proxy-gke-demo-core-default-pool-e9c97b4b-p81x 1/1 Running 0 1h
l7-default-backend-5d5b9874d5-5wsjh 1/1 Running 0 1h
metrics-server-v0.2.1-7486f5bd67-tw96r 2/2 Running 0 1h
gsagnard2006@cloudshell:~ (totemic-splicer-229713)$
Créez les pods EFK en utilisant leurs fichiers .yaml configurés
$ kubectl create -f fluentd-es-configmap.yaml
$ kubectl create -f fluentd-es-ds.yaml
$ kubectl create -f kibana-deployment.yaml
$ kubectl create -f kibana-service.yaml
$ kubectl create -f es-statefulset.yaml
$ kubectl create -f es-service.yaml
Vérifiez si les pods sont disponibles :
$ kubectl get pods -n kube-system
Ce qui donne :
gsagnard2006@cloudshell:~/efk (totemic-splicer-229713)$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
elasticsearch-logging-0 0/1 PodInitializing 0 27s
fluentd-es-v2.2.0-4tjkt 1/1 Running 0 43s
fluentd-es-v2.2.0-8tg74 1/1 Running 0 43s
fluentd-es-v2.2.0-jrjvz 1/1 Running 0 43s
heapster-v1.5.3-76f46d6554-jsz2k 3/3 Running 0 2h
kibana-logging-84445456dc-7s7fr 1/1 Running 0 38s
kube-dns-788979dc8f-dbz76 4/4 Running 0 2h
kube-dns-788979dc8f-tsn7g 4/4 Running 0 2h
kube-dns-autoscaler-79b4b844b9-kw9np 1/1 Running 0 2h
kube-proxy-gke-demo-core-default-pool-e9c97b4b-3d8d 1/1 Running 0 2h
kube-proxy-gke-demo-core-default-pool-e9c97b4b-62j6 1/1 Running 0 2h
kube-proxy-gke-demo-core-default-pool-e9c97b4b-p81x 1/1 Running 0 2h
l7-default-backend-5d5b9874d5-5wsjh 1/1 Running 0 2h
metrics-server-v0.2.1-7486f5bd67-tw96r 2/2 Running 0 2h
Pour accéder au tableau de bord Web de kibana, vous pouvez être authentifié dans le cluster. Si vous utilisez le shell de la console Web google cloud, exécutez:
$ kubectl proxy --port 8001
Cliquez sur le bouton Aperçu Web en haut du shell de Google Cloud Console et cliquez sur l'élément Modifier le port. Une fenêtre contextuelle s’affiche, puis ajoutez le port 8001 et cliquez sur le bouton Modifier et prévisualiser. Il ouvre un nouvel onglet dans le navigateur avec cette URL:

Éditez cette URL en supprimant le dernier fragment:
?authuser=0
Et ajoutez à la fin ce qui suit:
api/v1/namespaces/kube-system/services/kibana-logging/proxy
Actualisez le navigateur et attendez que kibana soit chargé.

Cliquez sur le bouton «Configurer Index patterns» situé dans le coin supérieur droit. Il montre la vue Créer un index pattern. Dans le modèle d’index pattern, ajoutez un index pattern (expression régulière). Votre index pattern peut correspondre à l’un des index présentés ci-dessous.
Par exemple, vous pouvez ajouter lo*
Kibana indique que votre modèle réussit avec un message
Cliquez sur le bouton «Étape suivante»

Dans le champ «Time Filter Name», choisissez @Timestamp
Cliquez sur le bouton "create index pattern
Cliquez sur la vue Discover pour afficher le dashboard journalisation par défaut.

Ce qui va permettre de créer des visualisations comme ceci et de les ajouter au dashboard :

Have fun :)