¿Cómo generar un clúster de Kubernetes de alta disponibilidad y no explotar el cerebro? Usa Kubespray, por supuesto.
Kubespray es un conjunto de roles de Ansible para instalar y configurar un sistema de orquestación con contenedores de Kubernetes.
Kubernetes es un proyecto de código abierto diseñado para administrar el clúster de contenedores de Linux como un solo sistema. Kubernetes gestiona y ejecuta contenedores en una gran cantidad de hosts, además de hospedar y replicar una gran cantidad de contenedores.
¡Atención, bajo el gato 4 capturas de pantalla de elasticsearch y 9 capturas de pantalla de prometheus!
Preparación
Hay 3 nodos Centos 7 con 8GB de memoria.
Mejor uso 16GB
En cada nodo, haga lo siguiente.
Conectamos discos, los tamaños de los cuales necesitamos.
Para elástico, necesita 3 PV de más de 30 GB (tamaño de datos de persistencia) y 2 PV de más de 4 GB (tamaño de persistencia de maestro).
Para hacer esto, en cada nodo, cree 2 discos del tamaño que necesitamos.
El tamaño de los discos depende del número de sus datos; debe verificarlos experimentalmente.
Disk /dev/vdb: 21.5 GB Disk /dev/vdc: 53.7 GB 
A través de fdisk creamos en cada 1 sección
En / mnt / disks crea una carpeta con el nombre de nuestro nuevo disco
 mkdir -p /mnt/disks/vdb1 mkdir -p /mnt/disks/vdc1 
Crear FS en estas unidades
 mkfs.xfs -f /dev/vdb1 mkfs.xfs -f /dev/vdc1 
Montar discos en esta carpeta
 mount /dev/vdb1 /mnt/disks/vdb1 mount /dev/vdc1 /mnt/disks/vdc1 
Cheque
 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) 
Apague el firewall en todos los nodos (creo que es una muleta, pero hasta ahora)
 systemctl stop firewalld iptables -F 
Descargue kubespray y ejecute la instalación de kubernetes
 git clone https://github.com/kubernetes-incubator/kubespray.git cd kubespray git tags -   git checkout ' tag' sudo pip install -r requirements.txt 
Traemos Inventory / sample / hosts.ini al siguiente formulario (reemplace los nombres de los nodos con los suyos)
 [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 
Cambie los valores a continuación en el archivo inventario / 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 
Agregue inventario / sample / group_vars / k8s-cluster.yml al final del archivo
 docker_dns_servers_strict: no #   'no',   DNS   3 
Comenzamos la instalación
Antes de instalar, lea la documentación de kubespray https://github.com/kubernetes-incubator/kubespray
ansible-playbook -u 'usuario que tiene sudo en los nodos' -i inventario / muestra / hosts.ini cluster.yml -b
Comprobación de StorageClass
 kubectl get storageclass NAME PROVISIONER AGE local-storage kubernetes.io/no-provisioner 18m 
Comprobando PV
 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 
Inicializar timón
 helm init --service-account tiller 
Comenzamos la instalación de Elasticsearch
 helm install stable/elasticsearch --namespace logging --name elasticsearch --set data.persistence.storageClass=local-storage,master.persistence.storageClass=local-storage 
Espere 5 minutos para que Elasticsearch se instale.
Encontramos el servicio que conectará kibana y fluentd. Usualmente tiene elasticsearch-client en su nombre
 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 
El nombre elasticsearch-client se especifica al instalar fluentd-elasticsearch
 helm install stable/fluentd-elasticsearch --namespace logging --set elasticsearch.host=elasticsearch-client 
El nombre elasticsearch-client se especifica al instalar kibana
 helm install --namespace logging --set ingress.enabled=true,ingress.hosts[0]=kibana.mydomain.io --set env.ELASTICSEARCH_URL=http://elasticsearch-client:9200 stable/kibana 
Vemos que todos los pods tienen el estado en ejecución
 kubectl get pod --namespace=logging 
Si hay un error, miramos los registros.
 kubectl logs - --namespace logging 
Agregar a DNS o al archivo / etc / hosts
 IP-- kibana.mydomain.io IP-- kibana.mydomain.io IP-- kibana.mydomain.io 
Nota: si desea enviar registros a Elasticsearch externo, debe comenzar la instalación con elasticsearch.host = dns-name-of-your-external-elasticsearch
Vaya a kibana.mydomain.io
Haga clic en Patrón de índice

Ingrese el índice de nombre para que coincida con el índice a continuación

seleccione @ marca de tiempo

Y aquí funciona EFK

Comenzamos la instalación de kube-prometheus
Descargar prometheus-operator
 git clone https://github.com/coreos/prometheus-operator.git 
Ir a la carpeta kube-prometheus
 cd prometheus-operator/contrib/kube-prometheus 
Comenzamos la instalación de acuerdo con las instrucciones del sitio.
 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 
Cree el archivo 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 
Crear un recurso de ingreso
 kubectl create -f ingress-grafana-prometheus.yml 
agregar a DNS o al archivo / etc / hosts
 IP-- grafana.mydomain.io IP-- grafana.mydomain.io IP-- grafana.mydomain.io 
Vaya a grafana.mydomain.io. Ingrese el nombre de usuario / contraseña estándar: admin / admin
Capturas de pantalla prometeo:









PD: es mejor escribir sobre todos los errores inmediatamente en privado.