Installieren Sie Kubernetes über Kubespray (lokaler Speicher, installieren Sie Elasticsearch + Fluentd + Kibana, prometheus)

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.

Source: https://habr.com/ru/post/de426959/


All Articles