Engineering

Kubernetes-Observability-Tutorial: Konfigurieren eines K8s-Clusters und Bereitstellen einer Demo-Anwendung

In diesem Blogpost erläutern wir Ihnen die Schritte zur Konfiguration der Umgebung, mit der wir in der Tutorial-Blogreihe zur Observability in Kubernetes arbeiten werden. Wenn Sie Teil 1: Überwachen und Analysieren von Logdaten noch nicht gesehen haben, beginnen Sie bitte dort. Dieser Blogpost hier ist lediglich als Ergänzung zur Blogreihe gedacht. Nachdem Sie Teil 1 gelesen haben, sollten Sie wieder hierher zurückkehren und die Tutorial-Umgebung entsprechend konfigurieren.

Schritt 1: Einrichten eines (kostenlosen) Elasticsearch Service-Deployments

Die einfachste Möglichkeit, den Elastic Stack für dieses Tutorial einzurichten und zum Laufen zu bringen, besteht darin, unseren Elasticsearch Service auf Elastic Cloud 14 Tage lang kostenlos auszuprobieren. Mit ein paar Klicks (keine Kreditkarte erforderlich) haben Sie Ihren Cluster eingerichtet und einsatzbereit. Wenn Sie möchten, können Sie aber auch den Elastic Stack herunterladen und lokal installieren. Alle Schritte in diesem Tutorial lassen sich leicht an die Verwendung eines unabhängig arbeitenden Elasticsearch-Clusters auf eigener Hardware anpassen. 

Schritt 2: Konfigurieren eines Minikube-Einzelknoten-Clusters in Kubernetes

Nachdem Sie Ihr Elastic Stack-Deployment eingerichtet haben, kümmern wir uns jetzt um die Minikube-Umgebung.

Vorbereitung einer Kubernetes-Umgebung

Im Folgenden zeigen wir Ihnen, wie Sie eine Minikube-Umgebung mit genau einem Knoten konfigurieren können, die Sie für den Rest der Tutorial-Aktivitäten benötigen, zum Beispiel für das Erfassen von Logdaten, Metriken und APM-Traces. Es gibt zwar auch andere Möglichkeiten, eine Umgebung für das Tutorial zu konfigurieren, wie Strigo.io-Klassen, GKE und unabhängige AWS-Hosts, aber wir beschränken uns mit unserem Beispiel auf die Erstellung einer Debian 9-Host-Umgebung, wobei die dargestellten Screenshots aus Google Cloud stammen.

Hinweis: Wenn Sie einen eigenen Kubernetes-Cluster in einer der Cloud-Umgebungen oder aber eigene Server laufen haben, benötigen Sie diesen Teil nicht. Führen Sie diese Schritte nur dann aus, wenn Sie keinen eigenen Kubernetes-Cluster zur Verfügung haben.

Erstkonfiguration

Erstellen Sie einen Debian 9-Server. Steigen Sie klein ein und arbeiten Sie sich dann bei Bedarf zu Größerem vor. Folgende Voraussetzungen müssen erfüllt sein:

  • 2 oder 4 CPUs
  • 8 oder 16 GB RAM
  • 100 GB Festplattenspeicher
  • Linux-Betriebssystem Debian 9 (Stretch)
  • Auf den ausgewählten Servern müssen die Ports 30080 bis 30085 für die externe Kommunikation geöffnet sein. Das kann die Konfiguration der Firewall-Regeln für den Server erforderlich machen.

Beispielkonfiguration aus Google Cloud:

Installieren der erforderlichen Pakete

Mit den folgenden Schritten installieren Sie Ihren eigenen Kubernetes-Einzelknoten-Cluster auf einem Debian 9-Server. Beginnen Sie mit dem folgenden Befehl:

$ sudo apt-get install -y git tmux

Klonen des Beispielcodes aus dem Tutorial-Github-Repo

Klonen Sie den Beispielcode aus meinem GitHub-Repo:

$ git clone https://github.com/michaelhyatt/k8s-o11y-workshop

Installieren von kubectl, Minikube und Docker

Installieren Sie kubectl, Minikube und Docker:

$ cd k8s-o11y-workshop
$ ./install/install-debian9.sh

Starten von Minikube und Kubernetes

Starten Sie die Minikube-Umgebung:

$ ./install/start_k8s.sh

Vergewissern Sie sich, dass die Umgebung fehlerfrei funktioniert. Geben Sie dazu den folgenden Befehl ein und prüfen Sie, ob alle Dienste als Running angezeigt werden:

$ kubectl get pods --namespace=kube-system

Die Befehlsausgabe sollte ungefähr so aussehen:

NAME                                 READY   STATUS    RESTARTS   AGE
coredns-5644d7b6d9-jhjlm             1/1     Running   0          106s
coredns-5644d7b6d9-npwr7             1/1     Running   0          105s
etcd-minikube                        1/1     Running   0          55s
kube-addon-manager-minikube          1/1     Running   0          43s
kube-apiserver-minikube              1/1     Running   0          57s
kube-controller-manager-minikube     1/1     Running   0          47s
kube-proxy-fm476                     1/1     Running   0          105s
kube-scheduler-minikube              1/1     Running   0          50s
kube-state-metrics-57cd6fdf9-gfgl8   1/1     Running   0          102s
storage-provisioner                  1/1     Running   0          101s

Ihr Minikube-Einzelknoten-Kubernetes-Cluster ist jetzt einsatzbereit.

Schritt 3: Bereitstellen der Demo-Anwendung

Nachdem nun der Kubernetes-Cluster eingerichtet ist, fahren wir mit der Bereitstellung der Demo-Anwendung fort.

Erstellen und Aktualisieren der Verbindungsinformationen und Secrets

Prüfen Sie, dass der Theia-Editor läuft. Sie können zum Bearbeiten der Datei „install/create_secrets.sh“ auch Vim, Nano oder einen anderen Editor verwenden.

$ kubectl get pods

Die Befehlsausgabe sollte ungefähr so aussehen:

NAME                     READY   STATUS    RESTARTS   AGE
theia-86d9888954-npk7l   1/1     Running   0          74s

Notieren Sie sich die folgenden Angaben aus Ihrem Elastic Cloud-Cluster-Setup:

  • cloud_id – erforderliches Format: „:
  • cloud_auth – erforderliches Format: „elastic:
  • apm_url – URL für den APM-Server, mit „https://“ beginnend
  • apm_token – Secret-Token für die Verbindung mit dem APM-Server

Diese Angaben werden für die Erstellung von Kubernetes-Secrets benötigt. Mit diesen Secrets werden die Komponenten, die auf diesem Server laufen, mit dem Elastic Cloud-Cluster verbunden.

Ermitteln Sie die öffentliche IP-Adresse des Servers, öffnen Sie ein Browserfenster und geben Sie als Adresse „http://:30083“ ein.

Öffnen Sie im Editor die Datei „install/create_secrets.sh“ und ersetzen Sie die aktuellen Werte durch die oben angegebenen vier Werte. Vergessen Sie nicht, die Datei anschließend zu speichern.

Erstellen Sie die Secrets. Verwenden Sie dazu im Terminalfenster den folgenden Befehl:

$ ./install/create_secrets.sh

Konfigurieren der Beats

Der Elastic Stack bietet verschiedene Beats, mit denen Daten an Elasticsearch gesendet werden können. Für das Tailen von k8s-Logdateien verwenden wir Filebeat. Um verschiedene Metriken aus Anwendungen und System-Pods, einschließlich Kubernetes selbst, erfassen zu können, kommt Metricbeat zum Einsatz.

Für das Konfigurieren von Beats müssen Sie alle mit dem Ingestieren von Daten zusammenhängenden Komponenten erstellen: Ingestionspipelines, Indexvorlagen und vordefinierte Kibana-Visualisierungen. All dies lässt sich mit einem einzigen Befehl in einem einzigen Durchgang erledigen, und für jeden Beat im Kubernetes-Cluster muss dieser Befehl nur einmal ausgeführt werden.

Geben Sie zum Starten der Konfiguration von Metricbeat und Filebeat die folgenden Befehle ein:

$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat-setup.yml
$ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat-setup.yml

Warten Sie anschließend, bis die Jobs abgeschlossen sind. Mit dem folgenden Befehl können Sie beobachten, wie sich der Status von ContainerCreation über Running zu Completed ändert:

$ kubectl get pods --namespace=kube-system

Am Ende sollte als Pods-Status ungefähr Folgendes angezeigt werden:

NAME                                 READY   STATUS      RESTARTS   AGE
coredns-5644d7b6d9-jhjlm             1/1     Running     0          2d
coredns-5644d7b6d9-npwr7             1/1     Running     0          2d
etcd-minikube                        1/1     Running     0          2d
filebeat-init-nkghj                  0/1     Completed   0          2m
kube-addon-manager-minikube          1/1     Running     0          2d
kube-apiserver-minikube              1/1     Running     0          2d
kube-controller-manager-minikube     1/1     Running     0          2d
kube-proxy-fm476                     1/1     Running     0          2d
kube-scheduler-minikube              1/1     Running     0          2d
kube-state-metrics-57cd6fdf9-gfgl8   1/1     Running     0          2d
storage-provisioner                  1/1     Running     0          2d
metricbeat-init-gm6wj                0/1     Completed   0          2m

Falls Sie doch vergessen haben sollten, Secrets zu erstellen …

Der häufigste Grund für Fehlermeldungen in dieser Phase sind fehlerhafte Elastic Cloud-Anmeldeinformationen. Fahren Sie mit den folgenden Schritten nur dann fort, wenn die Fehlermeldungen darauf hinweisen, dass es nicht möglich ist, eine Verbindung zum Cloud-Cluster herzustellen.

  1. Prüfen Sie erneut die vier Cloud- und APM-Werte wie im vorherigen Abschnitt beschrieben.
  2. Löschen Sie mit den folgenden Befehlen die Anmeldeinformationen und die Jobs zur Beats-Konfiguration:
    $ kubectl delete secret cloud-secret --namespace=kube-system
    $ kubectl delete secret cloud-secret
    $ kubectl delete secret apm-secret
    
  3. Aktualisieren Sie die Anmeldeinformationen im Theia-Webeditor (siehe oben) oder in den Editoren Vim oder Nano.
  4. Erstellen Sie die Secrets noch einmal, indem Sie Folgendes eingeben:
    $ ./install/create_secrets.sh
    
  5. Versuchen Sie erneut, die Befehle zur Beats-Konfiguration auszuführen.

Bereitstellen der Beats

Geben Sie zum Bereitstellen von Filebeat und Metricbeat die folgenden Befehle ein:

$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat.yml
$ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat.yml

Prüfen Sie mithilfe des folgenden Befehls, ob die Beats ausgeführt werden:

$ kubectl get pods --namespace=kube-system

Es sollten drei zusätzliche Kubernetes-Pods laufen – einer für Filebeat und zwei für Metricbeat:

NAME                                 READY   STATUS      RESTARTS   AGE
coredns-5644d7b6d9-jhjlm             1/1     Running     0          2d
coredns-5644d7b6d9-npwr7             1/1     Running     0          2d
etcd-minikube                        1/1     Running     0          2d
filebeat-init-nkghj                  0/1     Completed   0          2d
filebeat-wnltr                       1/1     Running     0          4m
kube-addon-manager-minikube          1/1     Running     0          2d
kube-apiserver-minikube              1/1     Running     0          2d
kube-controller-manager-minikube     1/1     Running     0          2d
kube-proxy-fm476                     1/1     Running     0          2d
kube-scheduler-minikube              1/1     Running     0          2d
kube-state-metrics-57cd6fdf9-gfgl8   1/1     Running     0          2d
metricbeat-777d6c6c45-gzfwr          1/1     Running     0          4m
metricbeat-init-rjz4q                0/1     Completed   0          4m
metricbeat-vxbj5                     1/1     Running     0          4m
storage-provisioner                  1/1     Running     0          2d

Prüfen, ob die Beats Daten an Elasticsearch senden

Öffnen Sie zur zusätzlichen Prüfung, ob sich die Beats erfolgreich mit dem Elastic Cloud-Cluster verbinden und Daten senden, die Apps Logs und Metrics in Kibana. Dort sollte Bewegung zu sehen sein.

Bereitstellen der Anwendungskomponenten

Stellen Sie MySQL bereit:

$ kubectl create -f $HOME/k8s-o11y-workshop/mysql/mysql.yml

Prüfen Sie, ob der Container einsatzbereit ist, indem Sie sich in der App Metrics ansehen, ob er läuft, und indem Sie im Pod-Menü den Container auswählen und die MySQL-Logdaten beobachten:

Warten Sie, bis die MySQL-Logzeile „ready for connections“ angezeigt wird:

Stellen Sie die Anwendung Petclinic und den NGINX-Proxy bereit:

$ kubectl create -f $HOME/k8s-o11y-workshop/petclinic/petclinic.yml
$ kubectl create -f $HOME/k8s-o11y-workshop/nginx/nginx.yml

Prüfen, ob alle Komponenten laufen

Prüfen Sie in der Kibana-App Metrics, ob alle Komponenten laufen:

Vergewissern Sie sich, dass die Petclinic-Benutzeroberfläche über http://<öffentliche-IP-Adresse>:30080 verfügbar ist. Die öffentliche IP-Adresse der Petclinic-Webanwendung kann mithilfe des Befehls kubectl get services abgerufen werden.

So, das wars. Sie können jetzt zum regulären Tutorial „Kubernetes-Observability-Tutorial: Überwachen und Analysieren von Logdaten“ zurückkehren.