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