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.