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.