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://“ beginnendapm_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://
Ö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.
- Prüfen Sie erneut die vier Cloud- und APM-Werte wie im vorherigen Abschnitt beschrieben.
- 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
- Aktualisieren Sie die Anmeldeinformationen im Theia-Webeditor (siehe oben) oder in den Editoren Vim oder Nano.
- Erstellen Sie die Secrets noch einmal, indem Sie Folgendes eingeben:
$ ./install/create_secrets.sh
- 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.