Wie kann man einen hochverfügbaren Kubernetes-Cluster aufbauen und das Gehirn nicht explodieren lassen? Verwenden Sie natürlich Kubespray.
Kubespray besteht aus einer Reihe von Ansible-Rollen zum Installieren und Konfigurieren eines Orchestrierungssystems mit Kubernetes-Containern.
Kubernetes ist ein Open Source-Projekt zur Verwaltung des Linux-Containerclusters als einzelnes System. Kubernetes verwaltet und führt Container auf einer großen Anzahl von Hosts aus und hostet und repliziert eine große Anzahl von Containern.
Achtung, unter der Katze 4 Screenshots von Elasticsearch und 9 Screenshots von Prometheus!
Vorbereitung
Es gibt 3 Centos 7-Knoten mit 8 GB Speicher.
Verwenden Sie besser 16 GB
Gehen Sie auf jedem Knoten wie folgt vor.
Wir verbinden Festplatten, deren Größe wir benötigen.
Für elastisch benötigen Sie 3 PVs größer als 30 GB (data.persistence.size) und 2 PVs größer als 4 GB (master.persistence.size).
Erstellen Sie dazu auf jedem Knoten zwei Festplatten der benötigten Größe.
Die Festplattengröße hängt von der Anzahl Ihrer Daten ab - Sie müssen dies experimentell überprüfen.
Disk /dev/vdb: 21.5 GB Disk /dev/vdc: 53.7 GB 
Durch fdisk erstellen wir auf jedem 1 Abschnitt
Erstellen Sie in / mnt / disks einen Ordner mit dem Namen unserer neuen Festplatte
 mkdir -p /mnt/disks/vdb1 mkdir -p /mnt/disks/vdc1 
Erstellen Sie FS auf diesen Laufwerken
 mkfs.xfs -f /dev/vdb1 mkfs.xfs -f /dev/vdc1 
Mounten Sie die Festplatten in diesen Ordner
 mount /dev/vdb1 /mnt/disks/vdb1 mount /dev/vdc1 /mnt/disks/vdc1 
Überprüfen Sie
 mount | grep mnt /dev/vdb1 on /mnt/disks/vdb1 type xfs (rw,relatime,attr2,inode64,noquota) /dev/vdc1 on /mnt/disks/vdc1 type xfs (rw,relatime,attr2,inode64,noquota) 
Deaktivieren Sie die Firewall auf allen Knoten (ich denke, dies ist eine Krücke, aber bisher)
 systemctl stop firewalld iptables -F 
Laden Sie kubespray herunter und führen Sie die Installation von kubernetes aus
 git clone https://github.com/kubernetes-incubator/kubespray.git cd kubespray git tags -   git checkout ' tag' sudo pip install -r requirements.txt 
Wir bringen inventar / sample / hosts.ini in das folgende Formular (ersetzen Sie die Namen der Knoten durch Ihre eigenen)
 [k8s-cluster:children] kube-master kube-node [all] test-tools-kuber-apatsev-1 ansible_host=ip-- ip=ip-- test-tools-kuber-apatsev-2 ansible_host=ip-- ip=ip-- test-tools-kuber-apatsev-3 ansible_host=ip-- ip=ip-- [kube-master] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 [kube-node] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 [etcd] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 [calico-rr] [vault] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 
Ändern Sie die folgenden Werte in der Datei Inventar / sample / group_vars / k8s-cluster / addons.yml
 helm_enabled: true #  helm   local_volume_provisioner_enabled: true #  local volume provisioner ingress_nginx_enabled: true #  ingress controller 
Fügen Sie am Ende der Datei inventar / sample / group_vars / k8s-cluster.yml hinzu
 docker_dns_servers_strict: no #   'no',   DNS   3 
Wir beginnen mit der Installation
Lesen Sie vor der Installation die Kubespray-Dokumentation https://github.com/kubernetes-incubator/kubespray
ansible-playbook -u 'Benutzer, der sudo auf Knoten hat' -i Inventar / sample / hosts.ini cluster.yml -b
Auf StorageClass prüfen
 kubectl get storageclass NAME PROVISIONER AGE local-storage kubernetes.io/no-provisioner 18m 
PV prüfen
 kubectl get pv local-pv-26b51a64 49Gi RWO Delete Available local-storage 11m local-pv-5bec36e4 19Gi RWO Delete Available local-storage 14m local-pv-81c889eb 49Gi RWO Delete Available local-storage 13m local-pv-aa880f42 19Gi RWO Delete Available local-storage 10m local-pv-b6ffa66b 19Gi RWO Delete Available local-storage 11m local-pv-d465b035 49Gi RWO Delete Available local-storage 10m 
Helm initialisieren
 helm init --service-account tiller 
Wir starten die Installation von elasticsearch
 helm install stable/elasticsearch --namespace logging --name elasticsearch --set data.persistence.storageClass=local-storage,master.persistence.storageClass=local-storage 
Warten Sie 5 Minuten, bis elasticsearch installiert ist.
Wir finden den Service, der Kibana und Fluentd verbindet. Hat normalerweise elasticsearch-client im Namen
 kubectl get services --namespace logging | grep elasticsearch elasticsearch-client ClusterIP 10.233.60.173 <none> 9200/TCP 19s elasticsearch-discovery ClusterIP None <none> 9300/TCP 19s 
Der Name elasticsearch-client wird bei der Installation von fluentd-elasticsearch angegeben
 helm install stable/fluentd-elasticsearch --namespace logging --set elasticsearch.host=elasticsearch-client 
Der Name elasticsearch-client wird bei der Installation von kibana angegeben
 helm install --namespace logging --set ingress.enabled=true,ingress.hosts[0]=kibana.mydomain.io --set env.ELASTICSEARCH_URL=http://elasticsearch-client:9200 stable/kibana 
Wir sehen, dass alle Pods den Status "Laufen" haben
 kubectl get pod --namespace=logging 
Wenn ein Fehler auftritt, sehen wir uns die Protokolle an.
 kubectl logs - --namespace logging 
Zum DNS oder zur Datei / etc / hosts hinzufügen
 IP-- kibana.mydomain.io IP-- kibana.mydomain.io IP-- kibana.mydomain.io 
Hinweis: Wenn Sie Protokolle an externe Elasticsearch senden möchten, sollten Sie die Installation mit elasticsearch.host = DNS-Name Ihrer externen Elasticsearch starten
Gehen Sie zu kibana.mydomain.io
Klicken Sie auf Indexmuster

Geben Sie den Namensindex so ein, dass er mit dem unten stehenden Index übereinstimmt

Wählen Sie @ Zeitstempel

Und hier arbeitet EFK

Wir beginnen mit der Installation von kube-prometheus
Prometheus-operator herunterladen
 git clone https://github.com/coreos/prometheus-operator.git 
Gehen Sie zum Ordner kube-prometheus
 cd prometheus-operator/contrib/kube-prometheus 
Wir starten die Installation gemäß den Anweisungen auf der Website
 kubectl create -f manifests/ || true until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; do date; sleep 1; echo ""; done until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done kubectl create -f manifests/ 2>/dev/null || true 
Erstellen Sie die Datei ingress-grafana-prometheus.yml
 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test namespace: monitoring spec: rules: - host: grafana.mydomain.io http: paths: - backend: serviceName: grafana servicePort: 3000 
Erstellen Sie eine Eingangsressource
 kubectl create -f ingress-grafana-prometheus.yml 
Hinzufügen zu DNS oder zur Datei / etc / hosts
 IP-- grafana.mydomain.io IP-- grafana.mydomain.io IP-- grafana.mydomain.io 
Gehen Sie zu grafana.mydomain.io. Geben Sie den Standardbenutzernamen / das Standardkennwort ein: admin / admin
Screenshots prometheus:









PS: Es ist besser, sofort privat über alle Fehler zu schreiben.