Instale o kubernetes via kubespray (armazenamento local, instale Elasticsearch + Fluentd + Kibana, prometheus)

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.

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


All Articles