Tutorial de observabilidade do Kubernetes: configuração de cluster do Kubernetes e implantação de aplicação de demonstração
Este post do blog mostrará como configurar o ambiente que você usará para a série de posts de tutoriais de observabilidade do Kubernetes. Se você ainda não viu a Parte 1: monitoramento e análise de logs, comece por ela, pois este post é complementar à série e não se destina a ser uma publicação independente. Depois de dar uma olhada naquele post, volte para configurar o ambiente do tutorial.
Etapa 1: iniciar uma implantação (gratuita) do Elasticsearch Service
A maneira mais fácil de colocar o Elastic Stack em funcionamento para este tutorial é iniciar uma avaliação gratuita de 14 dias do nosso Elasticsearch Service no Elastic Cloud. Com alguns cliques (sem cartões de crédito), seu cluster estará instalado e funcionando. Se preferir, baixe o Elastic Stack e instale-o localmente. Todas as instruções neste tutorial podem ser facilmente alteradas para você trabalhar com um cluster do Elasticsearch autônomo em seu próprio hardware.
Etapa 2: configuração de cluster do Kubernetes de nó único no Minikube
Agora que a implantação do Elastic Stack está em execução, vamos colocar o ambiente do Minikube em funcionamento.
Preparar um ambiente do Kubernetes
Este passo a passo configurará um ambiente de nó único do Minikube para executar o restante das atividades do tutorial, como a captura de logs, métricas e dados de desempenho da aplicação. Embora existam outras maneiras de criar um ambiente compatível com o tutorial, como classes Strigo.io, GKE, hosts autônomos da AWS, este exemplo descreve a criação de um ambiente de host Debian 9 com capturas de tela tiradas do Google Cloud.
Observação: se você tem seu próprio cluster do Kubernetes em execução em um dos ambientes de nuvem ou seus próprios servidores, esta parte não é necessária. Execute estas etapas apenas se você não tiver seu próprio cluster do Kubernetes pronto para ser usado.
Configuração inicial
Crie um servidor Debian 9. Comece com especificações mais baixas e depois tente algo maior se necessário. Aqui estão as especificações necessárias:
- 2 ou 4 CPUs
- 8 ou 16 GB de RAM
- 100 GB de espaço em disco
- Debian 9 Linux OS (Stretch)
- Verifique se há conectividade externa com as portas 30080 a 30085 nos servidores selecionados. Isso pode exigir a configuração das regras de firewall para o servidor.
Exemplo de configuração do Google Cloud:
Instale os pacotes de pré-requisitos
As etapas a seguir instalarão seu próprio cluster de nó único do Kubernetes no servidor Debian 9. Comece executando o seguinte comando:
$ sudo apt-get install -y git tmux
Confira o código do meu repositório do Github
Execute o seguinte comando para clonar o código de exemplo do meu repositório do GitHub:
$ git clone https://github.com/michaelhyatt/k8s-o11y-workshop
Instale os pré-requisitos
Execute o seguinte comando para instalar o kubectl, o Minikube e o Docker:
$ cd k8s-o11y-workshop $ ./install/install-debian9.sh
Inicie o Minikube e o Kubernetes
Este comando iniciará o ambiente do Minikube:
$ ./install/start_k8s.sh
Certifique-se de que o ambiente esteja funcionando sem erros executando o seguinte comando e vendo os serviços no estado Running
(Em execução):
$ kubectl get pods --namespace=kube-system
A saída deve ser semelhante a esta:
NAME READY STATUS RESTARTS AGE coredns-5644d7b6d9-jhjlm 1/1 Running 0 106s coredns-5644d7b6d9-npwr7 1/1 Running 0 105s etcd-minikube 1/1 Running 0 55s kube-addon-manager-minikube 1/1 Running 0 43s kube-apiserver-minikube 1/1 Running 0 57s kube-controller-manager-minikube 1/1 Running 0 47s kube-proxy-fm476 1/1 Running 0 105s kube-scheduler-minikube 1/1 Running 0 50s kube-state-metrics-57cd6fdf9-gfgl8 1/1 Running 0 102s storage-provisioner 1/1 Running 0 101s
Seu cluster do Kubernetes de nó único no Minikube agora está instalado e funcionando.
Etapa 3: implantar a aplicação de demonstração
Agora que seu cluster do Kubernetes está funcionando, vamos implantar a aplicação de demonstração.
Crie e atualize os detalhes e os segredos da conexão
Valide o funcionamento do editor do Theia. Você também pode usar outros editores como vim e nano para editar o arquivo install/create_secrets.sh.
$ kubectl get pods
A saída deve ser semelhante a esta:
NAME READY STATUS RESTARTS AGE theia-86d9888954-npk7l 1/1 Running 0 74s
Verifique se você registrou os seguintes detalhes da configuração do cluster do Elastic Cloud:
cloud_id
— deve estar na forma de “: ” cloud_auth
— deve estar na forma “elastic:” apm_url
— a URL do servidor APM deve começar com https://apm_token
— um token secreto para conectar ao servidor APM
Esses detalhes serão usados para criar segredos do Kubernetes que conectam os componentes em execução nesse servidor com o cluster do Elastic Cloud.
Encontre o endereço IP público do servidor e abra uma janela do navegador em http://
No editor, abra o arquivo install/create_secrets.sh e atualize os quatro detalhes, conforme descrito acima. Salve o arquivo no final.
Crie os segredos executando este comando na janela do terminal:
$ ./install/create_secrets.sh
Execute a configuração dos Beats
O Elastic Stack oferece vários Beats para enviar dados ao Elasticsearch. Para fazer tailing dos arquivos de log do Kubernetes, usaremos o Filebeat. Para coletar várias métricas de pods de sistema e aplicação, incluindo o próprio Kubernetes, usaremos o Metricbeat.
A configuração dos Beats requer que você crie todos os artefatos relacionados à ingestão de dados: pipelines de ingestão, modelos de índice e visualizações do Kibana prontas para uso. Um único comando cuidará de tudo isso e só precisará ser executado uma vez por Beat implantado no cluster do Kubernetes.
Para executar os trabalhos de configuração do Metricbeat e do Filebeat, execute os seguintes comandos de configuração:
$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat-setup.yml $ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat-setup.yml
Em seguida, basta aguardar a conclusão do trabalho observando a mudança de status de ContainerCreation
(Criação de container) para Running
(Em execução) e, finalmente, para Completed
(Concluído) com o seguinte comando kubectl:
$ kubectl get pods --namespace=kube-system
O status dos pods resultantes deve ser semelhante a este:
NAME READY STATUS RESTARTS AGE coredns-5644d7b6d9-jhjlm 1/1 Running 0 2d coredns-5644d7b6d9-npwr7 1/1 Running 0 2d etcd-minikube 1/1 Running 0 2d filebeat-init-nkghj 0/1 Completed 0 2m kube-addon-manager-minikube 1/1 Running 0 2d kube-apiserver-minikube 1/1 Running 0 2d kube-controller-manager-minikube 1/1 Running 0 2d kube-proxy-fm476 1/1 Running 0 2d kube-scheduler-minikube 1/1 Running 0 2d kube-state-metrics-57cd6fdf9-gfgl8 1/1 Running 0 2d storage-provisioner 1/1 Running 0 2d metricbeat-init-gm6wj 0/1 Completed 0 2m
Caso você tenha se esquecido de criar segredos...
O motivo mais comum da ocorrência de erros neste estágio são as credenciais incorretas do Elastic Cloud. Se vir erros indicando que não é possível se conectar ao cluster na nuvem, prossiga com as etapas a seguir.
- Verifique os quatro valores de nuvem e APM novamente, conforme a seção anterior.
- Exclua as credenciais e os trabalhos de configuração dos Beats, conforme a seguir:
$ kubectl delete secret cloud-secret --namespace=kube-system $ kubectl delete secret cloud-secret $ kubectl delete secret apm-secret
- Atualize as credenciais no editor Web do Theia conforme a seção acima ou por meio dos editores vim/nano.
- Recrie os segredos executando o comando novamente:
$ ./install/create_secrets.sh
- Repita os comandos de configuração dos Beats.
Implante seus Beats
Para implantar o Filebeat e o Metricbeat, execute estes dois comandos:
$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat.yml $ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat.yml
Para validar se os Beats estão em execução, execute o seguinte comando:
$ kubectl get pods --namespace=kube-system
Deve haver três pods adicionais do Kubernetes em execução, um para o Filebeat e dois para o Metricbeat:
NAME READY STATUS RESTARTS AGE coredns-5644d7b6d9-jhjlm 1/1 Running 0 2d coredns-5644d7b6d9-npwr7 1/1 Running 0 2d etcd-minikube 1/1 Running 0 2d filebeat-init-nkghj 0/1 Completed 0 2d filebeat-wnltr 1/1 Running 0 4m kube-addon-manager-minikube 1/1 Running 0 2d kube-apiserver-minikube 1/1 Running 0 2d kube-controller-manager-minikube 1/1 Running 0 2d kube-proxy-fm476 1/1 Running 0 2d kube-scheduler-minikube 1/1 Running 0 2d kube-state-metrics-57cd6fdf9-gfgl8 1/1 Running 0 2d metricbeat-777d6c6c45-gzfwr 1/1 Running 0 4m metricbeat-init-rjz4q 0/1 Completed 0 4m metricbeat-vxbj5 1/1 Running 0 4m storage-provisioner 1/1 Running 0 2d
Verifique se os Beats estão enviando dados para o Elasticsearch
Para fazer uma verificação adicional de que os Beats estão se conectando ao cluster do Elastic Cloud e enviando dados, abra os apps Logs e Metrics no Kibana. Deve haver alguma ação acontecendo lá.
Implante os componentes da aplicação
Implante o MySQL:
$ kubectl create -f $HOME/k8s-o11y-workshop/mysql/mysql.yml
Verifique se o container está ativo vendo o pod em execução no app do Metrics. Observe os logs do MySQL selecionando-o no menu do pod:
Aguarde a linha do log do MySQL “ready for connections” (pronto para conexões):
Implante o app da clínica veterinária (petclinic) e o proxy do NGINX:
$ kubectl create -f $HOME/k8s-o11y-workshop/petclinic/petclinic.yml $ kubectl create -f $HOME/k8s-o11y-workshop/nginx/nginx.yml
Verifique se todos os componentes estão em execução
Veja todos os componentes em execução no app do Metrics no Kibana:
Valide se a UI do petclinic está disponível em http://kubectl get services
.
Pronto. Agora você pode voltar ao seu tutorial programado regularmente: Tutorial de observabilidade do Kubernetes: monitoramento e análise de logs.