Engenharia

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://:30083

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.

  1. Verifique os quatro valores de nuvem e APM novamente, conforme a seção anterior.
  2. 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
    
  3. Atualize as credenciais no editor Web do Theia conforme a seção acima ou por meio dos editores vim/nano.
  4. Recrie os segredos executando o comando novamente:
    $ ./install/create_secrets.sh
    
  5. 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://:30080. Você pode obter o endereço IP público da aplicação Web petclinic usando o comando kubectl get services.

Pronto. Agora você pode voltar ao seu tutorial programado regularmente: Tutorial de observabilidade do Kubernetes: monitoramento e análise de logs.