Como criar um cluster Kubernetes de alta disponibilidade e não explodir o cérebro? Use Kubespray, é claro.
Kubespray é um conjunto de funções Ansible para instalar e configurar um sistema de orquestração com contêineres Kubernetes.
O Kubernetes é um projeto de código aberto desenvolvido para gerenciar o cluster de contêineres do Linux como um sistema único. O Kubernetes gerencia e executa contêineres em um grande número de hosts, além de co-hospedar e replicar um grande número de contêineres.
Cuidado, sob o gato 4 capturas de tela do elasticsearch e 9 capturas de tela do prometheus!
Preparação
Existem 3 nós Centos 7 com 8 GB de memória.
Melhor usar 16GB
Em cada nó, faça o seguinte.
Conectamos discos, dos tamanhos que precisamos.
Para elástico, você precisa de 3 PVs maiores que 30 GB (data.persistence.size) e 2 PVs maiores que 4 GB (master.persistence.size).
Para fazer isso, em cada nó, crie 2 discos dos tamanhos que precisamos.
Os tamanhos dos discos dependem do número de seus dados - você precisa verificar experimentalmente.
Disk /dev/vdb: 21.5 GB Disk /dev/vdc: 53.7 GB 
Através do fdisk, criamos em cada seção 1
Em / mnt / disks, crie uma pasta com o nome do nosso novo disco
 mkdir -p /mnt/disks/vdb1 mkdir -p /mnt/disks/vdc1 
Criar FS nessas unidades
 mkfs.xfs -f /dev/vdb1 mkfs.xfs -f /dev/vdc1 
Montar discos nesta pasta
 mount /dev/vdb1 /mnt/disks/vdb1 mount /dev/vdc1 /mnt/disks/vdc1 
Verifique
 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) 
Desative o Firewall em todos os nós (acho que é uma muleta, mas até agora)
 systemctl stop firewalld iptables -F 
Faça o download do kubespray e execute a instalação do kubernetes
 git clone https://github.com/kubernetes-incubator/kubespray.git cd kubespray git tags -   git checkout ' tag' sudo pip install -r requirements.txt 
Trazemos o inventário / amostra / hosts.ini para o seguinte formulário (substitua os nomes dos nós pelos seus)
 [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 
Altere os valores abaixo no arquivo de inventário / 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 
Inclua o inventário / amostra / group_vars / k8s-cluster.yml no final do arquivo
 docker_dns_servers_strict: no #   'no',   DNS   3 
Começamos a instalação
Antes de instalar, leia a documentação do kubespray https://github.com/kubernetes-incubator/kubespray
ansible-playbook -u 'usuário que possui sudo nos nós' -i inventário / amostra / hosts.ini cluster.yml -b
Verificando StorageClass
 kubectl get storageclass NAME PROVISIONER AGE local-storage kubernetes.io/no-provisioner 18m 
Verificando 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 Helm
 helm init --service-account tiller 
Iniciamos a instalação do elasticsearch
 helm install stable/elasticsearch --namespace logging --name elasticsearch --set data.persistence.storageClass=local-storage,master.persistence.storageClass=local-storage 
Aguarde 5 minutos para que a elasticsearch seja instalada.
Encontramos o serviço que conectará kibana e fluente. Geralmente tem elasticsearch-client em seu nome
 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 
O nome elasticsearch-client é especificado ao instalar fluentd-elasticsearch
 helm install stable/fluentd-elasticsearch --namespace logging --set elasticsearch.host=elasticsearch-client 
O nome elasticsearch-client é especificado ao instalar o 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 
Observamos que todos os pods têm o status em execução
 kubectl get pod --namespace=logging 
Se houver um erro, examinamos os logs.
 kubectl logs - --namespace logging 
Adicionar ao DNS ou ao arquivo / etc / hosts
 IP-- kibana.mydomain.io IP-- kibana.mydomain.io IP-- kibana.mydomain.io 
Nota: se você quiser enviar logs para o Elasticsearch externo, inicie a instalação com elasticsearch.host = nome-do-DNS-do-seu-elasticsearch externo
Vá para kibana.mydomain.io
Padrão de índice de cliques

Digite o índice do nome para que ele corresponda ao índice abaixo

selecione @ timestamp

E aqui a EFK funciona

Iniciamos a instalação do kube-prometheus
Baixar prometheus-operator
 git clone https://github.com/coreos/prometheus-operator.git 
Vá para a pasta kube-prometheus
 cd prometheus-operator/contrib/kube-prometheus 
Iniciamos a instalação de acordo com as instruções no site
 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 
Crie o arquivo 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 
Crie um recurso de entrada
 kubectl create -f ingress-grafana-prometheus.yml 
adicionar ao DNS ou ao arquivo / etc / hosts
 IP-- grafana.mydomain.io IP-- grafana.mydomain.io IP-- grafana.mydomain.io 
Vá para grafana.mydomain.io. Digite o nome de usuário / senha padrão: admin / admin
Imagens prometheus:









PS: é melhor escrever sobre todos os erros imediatamente em particular.