Instale kubernetes a través de kubespray (almacenamiento local, instale Elasticsearch + Fluentd + Kibana, prometheus)

¿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.

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


All Articles