Kubernetes - Überwachung
Die Überwachung ist eine der Schlüsselkomponenten für die Verwaltung großer Cluster. Dafür haben wir eine Reihe von Werkzeugen.
Überwachung mit Prometheus
Es ist ein Überwachungs- und Warnsystem. Es wurde bei SoundCloud gebaut und war 2012 Open Source. Es verarbeitet die mehrdimensionalen Daten sehr gut.
Prometheus hat mehrere Komponenten, um an der Überwachung teilzunehmen -
Prometheus - Es ist die Kernkomponente, die Daten verschrottet und speichert.
Prometheus node explore - Ruft die Matrizen auf Hostebene ab und setzt sie Prometheus aus.
Ranch-eye - ist ein haproxy und belichtet cAdvisor Statistiken zu Prometheus.
Grafana - Visualisierung von Daten.
InfuxDB - Zeitreihendatenbank, die speziell zum Speichern von Daten vom Rancher verwendet wird.
Prom-ranch-exporter - Es handelt sich um eine einfache Anwendung node.js, mit deren Hilfe der Rancher-Server nach dem Status des Dienststapels abgefragt werden kann.

Sematext Docker Agent
Es ist ein moderner Docker-fähiger Metrik-, Ereignis- und Protokollsammlungsagent. Es wird als winziger Container auf jedem Docker-Host ausgeführt und sammelt Protokolle, Metriken und Ereignisse für alle Clusterknoten und Container. Es erkennt alle Container (ein Pod kann mehrere Container enthalten), einschließlich Container für Kubernetes-Kerndienste, wenn die Kerndienste in Docker-Containern bereitgestellt werden. Nach der Bereitstellung sind alle Protokolle und Metriken sofort verfügbar.
Bereitstellen von Agenten auf Knoten
Kubernetes bietet DeamonSets an, mit denen sichergestellt wird, dass dem Cluster Pods hinzugefügt werden.
Konfigurieren des SemaText Docker-Agenten
Es wird über Umgebungsvariablen konfiguriert.
Eröffnen Sie ein kostenloses Konto unter apps.sematext.com , falls Sie noch keines haben.
Erstellen Sie eine SPM-App vom Typ „Docker“, um das SPM-App-Token zu erhalten. Die SPM-App speichert Ihre Kubernetes-Leistungsmetriken und -Ereignisse.
Erstellen Sie eine Logsene-App, um das Logsene-App-Token zu erhalten. Die Logsene App speichert Ihre Kubernetes-Protokolle.
Bearbeiten Sie die Werte von LOGSENE_TOKEN und SPM_TOKEN in der DaemonSet-Definition wie unten gezeigt.
Besorgen Sie sich die neueste Vorlage für sematext-agent-daemonset.yml (roher Klartext) (siehe auch unten).
Speichern Sie es irgendwo auf der Festplatte.
Ersetzen Sie die Platzhalter SPM_TOKEN und LOGSENE_TOKEN durch Ihre SPM- und Logsene-App-Token.
Erstellen Sie ein DaemonSet-Objekt
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: sematext-agent
spec:
template:
metadata:
labels:
app: sematext-agent
spec:
selector: {}
dnsPolicy: "ClusterFirst"
restartPolicy: "Always"
containers:
- name: sematext-agent
image: sematext/sematext-agent-docker:latest
imagePullPolicy: "Always"
env:
- name: SPM_TOKEN
value: "REPLACE THIS WITH YOUR SPM TOKEN"
- name: LOGSENE_TOKEN
value: "REPLACE THIS WITH YOUR LOGSENE TOKEN"
- name: KUBERNETES
value: "1"
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-sock
- mountPath: /etc/localtime
name: localtime
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock
- name: localtime
hostPath:
path: /etc/localtime
Ausführen des Sematext Agent Docker mit kubectl
$ kubectl create -f sematext-agent-daemonset.yml
daemonset "sematext-agent-daemonset" created
Kubernetes Log
Die Protokolle der Kubernetes-Container unterscheiden sich nicht wesentlich von den Docker-Containerprotokollen. Kubernetes-Benutzer müssen jedoch Protokolle für die bereitgestellten Pods anzeigen. Daher ist es sehr nützlich, Kubernetes-spezifische Informationen für die Protokollsuche verfügbar zu haben, z.
- Kubernetes-Namespace
- Kubernetes Pod Name
- Kubernetes Containername
- Name des Docker-Bildes
- Kubernetes UID
Verwenden von ELK Stack und LogSpout
Der ELK-Stack enthält Elasticsearch, Logstash und Kibana. Um die Protokolle zu sammeln und an die Protokollierungsplattform weiterzuleiten, verwenden wir LogSpout (obwohl es andere Optionen wie FluentD gibt).
Der folgende Code zeigt, wie Sie einen ELK-Cluster auf Kubernetes einrichten und einen Dienst für ElasticSearch erstellen.
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
namespace: elk
labels:
component: elasticsearch
spec:
type: LoadBalancer
selector:
component: elasticsearch
ports:
- name: http
port: 9200
protocol: TCP
- name: transport
port: 9300
protocol: TCP
Replikationscontroller erstellen
apiVersion: v1
kind: ReplicationController
metadata:
name: es
namespace: elk
labels:
component: elasticsearch
spec:
replicas: 1
template:
metadata:
labels:
component: elasticsearch
spec:
serviceAccount: elasticsearch
containers:
- name: es
securityContext:
capabilities:
add:
- IPC_LOCK
image: quay.io/pires/docker-elasticsearch-kubernetes:1.7.1-4
env:
- name: KUBERNETES_CA_CERTIFICATE_FILE
value: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "CLUSTER_NAME"
value: "myesdb"
- name: "DISCOVERY_SERVICE"
value: "elasticsearch"
- name: NODE_MASTER
value: "true"
- name: NODE_DATA
value: "true"
- name: HTTP_ENABLE
value: "true"
ports:
- containerPort: 9200
name: http
protocol: TCP
- containerPort: 9300
volumeMounts:
- mountPath: /data
name: storage
volumes:
- name: storage
emptyDir: {}
Kibana URL
Für Kibana stellen wir die Elasticsearch-URL als Umgebungsvariable bereit.
- name: KIBANA_ES_URL
value: "http://elasticsearch.elk.svc.cluster.local:9200"
- name: KUBERNETES_TRUST_CERT
value: "true"
Die Kibana-Benutzeroberfläche ist über den Containerport 5601 und die entsprechende Kombination aus Host und Knotenport erreichbar. Wenn Sie beginnen, werden in Kibana keine Daten vorhanden sein (was erwartet wird, da Sie keine Daten übertragen haben).