Engenharia

Comece a trabalhar com o Elastic Cloud on Kubernetes: implantação

Embora ainda em versão alfa, o recente anúncio do Elastic Cloud on Kubernetes (ECK) despertou um interesse significativo das comunidades do Elasticsearch e do Kubernetes. Com desenvolvimento e suporte do criador do Elastic Stack, o ECK é a melhor maneira de implantar a Elastic no Kubernetes. O objetivo desta série de dois blogs é mostrar a você o processo passo a passo para:

  1. Implantar o ECK em um cluster do Kubernetes (Minikube ou GKE)
  2. Implantar o Elastic Stack no ECK
  3. Ampliar e atualizar o Elasticsearch e o Kibana no ECK
  4. Implantar uma aplicação de amostra instrumentada com o Elastic APM e enviar dados do APM para o cluster do Elasticsearch gerenciado pelo ECK
  5. Implantar o Metricbeat no Kubernetes como um DaemonSet e conectar o Metricbeat com segurança ao cluster do Elasticsearch gerenciado pelo ECK

No final do blog, você terá um sistema conforme mostrado no diagrama abaixo. Neste primeiro blog, vamos nos concentrar na implantação do ECK e do Elastic Stack.

Diagrama de implantação do ECK

Consulte também a página de início rápido ou a página do produto para obter mais informações atualizadas sobre o ECK.

Crie o seu cluster do Kubernetes

Antes de implantar o ECK e o Elastic Stack, você deve ter um cluster do Kubernetes pronto. Para os fins deste blog, pode ser um Minikube ou um Google Kubernetes Engine (GKE). Também há outras distribuições do Kubernetes compatíveis, como OpenShift, Amazon EKS e Microsoft AKS. Como vamos implantar o ECK, o Elasticsearch, o Kibana, o APM Server e uma aplicação de amostra, recomendo que você use 16 GB de RAM e quatro cores no seu cluster. Você também pode configurar o cluster do Kubernetes com 12 GB de RAM, mas 16 GB certamente proporcionarão uma experiência mais tranquila.

Minikube

Se for usar o Minikube, siga as instruções para instalá-lo. Depois de instalado, configure o Minikube com os recursos necessários e inicie-o:

minikube config set memory 16384 
minikube config set cpus 4
minikube start

O dashboard do Kubernetes é extremamente conveniente para monitorar e gerenciar o seu cluster do Kubernetes. Você pode habilitar o dashboard para o Minikube com um único comando:

minikube dashboard

Uma janela do navegador será aberta automaticamente, exibindo o dashboard do Kubernetes. E é isso — está pronto.

Google Kubernetes Engine (GKE)

Se for usar o GKE, siga a documentação do Google para configurar o cluster. Meu cluster do GKE consiste em um nó de 15 GB de RAM e quatro vCPUs. Você pode escolher um cluster menor, mas nada abaixo de 12 GB de RAM. Além disso, para trabalhar com o GKE, você precisa da ferramenta de linha de comando gcloud.

Quando o cluster do GKE estiver em funcionamento, use os seguintes comandos para se conectar ao cluster e definir os privilégios necessários. Com o GKE, você precisa ter permissões de administrador do cluster. Lembre-se de usar as suas próprias informações para o nome do projeto, o nome da zona, o nome do cluster e a ID do usuário:

gcloud config set project elastic-sa 
gcloud config set compute/zone us-central1-a
gcloud config set container/cluster aquan
gcloud auth login
gcloud container clusters get-credentials aquan --zone us-central1-a --project elastic-sa
kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=adam.quan@elastic.co
kubectl create clusterrolebinding adam.quan-cluster-admin-binding --clusterrole=cluster-admin --user=adam.quan@elastic.co

Por fim, usaremos a ferramenta de linha de comando do Kubernetes para interagir com o Minikube ou o GKE. Siga as instruções para instalar o kubectl. Verifique se você tem o kubectl versão 1.11+.

Os artefatos usados para este blog podem ser baixados deste repositório do GitHub.

Implante o operador do Elasticsearch

Sabia que você precisa apenas de um comando para implantar o ECK? É verdade — basta executar o comando a seguir para implantar o ECK 0.9.0 mais recente (na ocasião em que este blog foi escrito). Simples e fácil.

kubectl apply -f https://download.elastic.co/downloads/eck/0.9.0/all-in-one.yaml

Depois de implantado, você poderá usar o seguinte comando para monitorar os logs do operador e garantir que tudo corra bem. O ELK levará apenas alguns instantes para entrar em funcionamento.

kubectl -n elastic-system logs -f statefulset.apps/elastic-operator

Implante o Elastic Stack

Agora que o ECK está em execução, estamos prontos para implantar o Elastic Stack, para o qual também basta apenas um comando. Confira o apm_es_kibana.yaml e veja como é fácil configurar o Kibana e o APM Server para que eles possam se comunicar entre si usando o elasticsearchRef.

Existem várias maneiras de personalizar a sua implantação, como as seguintes:

  • Modelo de pod
  • Configuração do nó
  • Memória virtual
  • Certificado HTTP personalizado
  • Configurações seguras

Implante a pilha com o seguinte comando:

kubectl apply -f apm_es_kibana.yaml

Verifique o status do Elasticsearch, do Kibana e do APM Server com o kubectl ou o dashboard do Kubernetes para conferir se todos estão verdes e prontos:

kubectl get elasticsearch,kibana,apmserver

Quando todos os três componentes ficarem verdes, o cluster do Elasticsearch estará funcionando e pronto para a entrada de dados. O ECK realiza muitas tarefas para nós. Antes de prosseguirmos, vamos dar uma olhada no que o ECK realmente fez para o nosso cluster:

  • A segurança está ativada para o ECK. Todos os recursos do Elastic Stack implantados pelo ECK são protegidos por padrão. O usuário de autenticação básica integrado da Elastic foi provisionado, e o tráfego de rede de/para/dentro do cluster do Elasticsearch é protegido com TLS.
  • Certificados: por padrão, um certificado CA autoassinado é usado para cada cluster. É possível configurar certificados HTTPS personalizados.
  • Exposição do serviço padrão: um serviço ClusterIP é criado automaticamente para o seu cluster e o Kibana. Obviamente, você pode configurá-los para que sejam do tipo LoadBalancer se necessário.

Com o Elasticsearch, o Kibana e o APM Server em execução, vamos ver o Kibana.

Acesse o Kibana

Por padrão, o Kibana é exposto como um serviço com um IP de cluster acessível de dentro do cluster, mas não é exposto à Internet. No entanto, você pode usar o seguinte comando de encaminhamento de porta para tornar o Kibana acessível do seu notebook:

kubectl port-forward service/kibana-sample-kb-http 5601

Antes de podermos fazer login no Kibana, precisamos obter as credenciais do usuário da Elastic padrão. Você pode executar o comando get secrets do kubectl e depois inspecionar o segredo para encontrar o caminho JSON do segredo. Aqui estão o segredo e o caminho corretos para o nosso caso:

echo `kubectl get secret elasticsearch-sample-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode`

A senha do usuário da Elastic é exibida. Copie-a e salve-a em um arquivo do Bloco de Notas.

Agora, abra um navegador e conecte-se a https://localhost:5601. Como estamos usando um certificado autoassinado, você precisará aceitar o aviso de segurança do navegador. Faça login no Kibana usando o usuário da Elastic e a senha que você acabou de recuperar. Você será direcionado(a) para a página inicial do Kibana. Nosso cluster está totalmente pronto!

Ampliação e atualização

Ampliar e atualizar o seu cluster do Elasticsearch dentro do ECK é tão simples quanto modificar a configuração de implantação e aplicá-la com o kubectl.

Ampliação

Modifique o manifesto de implantação apm_es_kibana.yaml alterando o tamanho da memória do seu container do Elasticsearch de 2 GB para 3 GB na seguinte seção:

        containers: 
- name: elasticsearch
resources:
limits:
memory: 3Gi

Salve o arquivo e amplie o nó com este comando:

kubectl apply -f apm_es_kibana.yaml

Mude imediatamente para o console do Kubernetes, onde você verá um novo pod do Elasticsearch sendo criado. O ECK está ampliando o seu nó do Elasticsearch com tempo de inatividade zero. Em alguns instantes, você verá o novo pod em execução, e o pod original desaparecerá. Os dados do pod antigo também foram transferidos sem problemas.

É claro que você pode ampliar o seu cluster de outras maneiras, como adicionar mais nós a ele. Seja como for, é um simples comando apply do kubectl.

Pod do Elasticsearch sendo criado

Atualização

Agora, vamos atualizar o cluster para 7.2.0, simplesmente alterando a versão do Elasticsearch, do Kibana e do APM Server de 7.1.0 para 7.2.0 no arquivo de manifesto de implantação apm_es_kibana.yaml. Salve e aplique a atualização com o seguinte comando:

kubectl apply -f apm_es_kibana.yaml

Da mesma forma, no console do Kubernetes, você pode ver que o ECK está atualizando tranquilamente o Elasticsearch, o Kibana e o APM Server sem tempo de inatividade.

Quando o processo de atualização for concluído, verifique se você está executando a versão 7.2.0 do Elastic Stack. Percebeu o quanto o ECK é poderoso? Espero que o nosso exemplo tenha mostrado isso de forma clara.

Resumo

Viu como é fácil? Espero que você tenha gostado desta rápida experiência de introdução com o Elastic Cloud on Kubernetes. Na parte 2 deste blog, implantaremos uma aplicação simples instrumentada com o APM e faremos com que ela envie os dados do APM para o cluster gerenciado pelo ECK. Também implantaremos o Metricbeat no Kubernetes para enviar dados de métricas ao cluster.