Este tutorial mostra como executar o Elastic Stack no GKE usando o operador Elastic Cloud on Kubernetes (ECK).
O Elastic Stack é uma solução de código aberto popular usada para registar, monitorizar e analisar dados em tempo real. Ao usar o Elastic Stack no GKE, pode beneficiar da escalabilidade e da fiabilidade fornecidas pelo GKE Autopilot e pelas poderosas funcionalidades do Elastic Stack.
Este tutorial destina-se a administradores do Kubernetes ou engenheiros de fiabilidade do site.
Objetivos
- Crie um cluster do GKE.
- Implemente o operador ECK.
- Configure clusters do Elasticsearch e o Kibana através do operador ECK.
- Implemente um Elastic Stack completo através do operador ECK.
- Ajuste automaticamente a escala dos clusters do Elasticsearch e atualize a implementação do Elastic Stack.
- Use o Elastic Stack para monitorizar ambientes do Kubernetes.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização prevista,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.clusterAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID: Your project ID.USER_IDENTIFIER: The identifier for your user account. For example,myemail@example.com.ROLE: The IAM role that you grant to your user account.
- Tem de ser proprietário de um nome de domínio. O nome do domínio não pode ter mais de 63 carateres. Pode usar o Cloud Domains ou outra entidade de registo.
Inicie uma sessão do Cloud Shell a partir da Google Cloud consola clicando em
Ativar Cloud Shell na Google Cloud consola. Esta ação inicia uma sessão no painel inferior da Google Cloud consola.
Adicione um repositório de gráficos Helm e atualize-o:
helm repo add elastic https://helm.elastic.co helm repo updateClone o repositório do GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.gitAltere para o diretório de trabalho:
cd kubernetes-engine-samples/observability/elastic-stack-tutorialInstale o gráfico Helm do ECK:
helm upgrade --install "elastic-operator" "elastic/eck-operator" \ --version="2.8.0" \ --create-namespace \ --namespace="elastic-system" \ --set="resources.limits.cpu=250m" \ --set="resources.limits.memory=512Mi" \ --set="resources.limits.ephemeral-storage=1Gi" \ --set="resources.requests.cpu=250m" \ --set="resources.requests.memory=512Mi" \ --set="resources.requests.ephemeral-storage=1Gi"Aguarde até que o operador esteja pronto:
watch kubectl get pods -n elastic-systemO resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 0 31sQuando o operador
STATUSéRunning, regresse à linha de comandos premindoCtrl+C.Reveja o seguinte manifesto:
Este manifesto descreve um DaemonSet que configura a definição do kernel diretamente no anfitrião. Um DaemonSet é um controlador do Kubernetes que garante que uma cópia de um Pod é executada em cada nó num cluster.
O manifesto anterior está numa lista de autorizações para ser executado no Autopilot. Não modifique este manifesto, incluindo as imagens do contentor.
Aplique este manifesto ao seu cluster:
kubectl apply -f max-map-count-setter-ds.yamlReveja o seguinte manifesto:
Este manifesto define um cluster do Elasticsearch com os seguintes campos:
initContainers: aguarda que as definições do kernel do anfitrião de memória virtual mudem.podDisruptionBudget: especifica que o cluster não vai ser destruído durante o processo de desfragmentação dos pods.config.node.roles: configuração das funções dos nós do Elasticsearch. Para mais informações sobre as funções dos nós, consulte o artigo Nó na documentação do Elasticsearch.
Aplique este manifesto ao seu cluster:
kubectl apply -f elasticsearch.yamlAguarde até que o cluster do Elasticsearch esteja pronto:
watch kubectl --namespace elastic-system get elasticsearches.elasticsearch.k8s.elastic.coO resultado é semelhante ao seguinte:
NAME HEALTH NODES VERSION PHASE AGE elasticsearch green 3 8.8.0 Ready 5m3sQuando o cluster do Elasticsearch
HEALTHestivergreenePHASEestiverReady, regresse à linha de comandos premindoCtrl+C.Reveja o seguinte manifesto:
Este manifesto descreve um recurso personalizado do Kibana que configura políticas de agentes para o servidor e os agentes da frota.
Aplique este manifesto ao seu cluster:
kubectl apply -f kibana.yamlAguarde até que os pods estejam prontos:
watch kubectl --namespace elastic-system get kibanas.kibana.k8s.elastic.coO resultado é semelhante ao seguinte:
NAME HEALTH NODES VERSION AGE kibana green 1 8.8.0 6m47sQuando o Pods
HEALTHestivergreen, regresse à linha de comandos premindoCtrl+C.Criar endereço IP externo global:
gcloud compute addresses create "elastic-stack" --globalCrie uma zona gerida e um conjunto de registos no Cloud DNS:
gcloud dns managed-zones create "elk" \ --description="DNS Zone for Airflow" \ --dns-name="elk.BASE_DOMAIN" \ --visibility="public" gcloud dns record-sets create "elk.BASE_DOMAIN" \ --rrdatas="$(gcloud compute addresses describe "elastic-stack" --global --format="value(address)")" \ --ttl="300" \ --type="A" \ --zone="elk"Delegue a zona DNS como um subdomínio do domínio base criando um conjunto de registos NS com uma lista de servidores de nomes. Pode obter uma lista de servidores de nomes com o seguinte comando:
gcloud dns record-sets describe elk.BASE_DOMAIN \ --type="NS" \ --zone="elk" \ --format="value(DATA)"Reveja o seguinte manifesto:
Este manifesto descreve um ManagedCertificate que aprovisiona um certificado SSL para estabelecer a ligação TLS.
Aplique o manifesto ao cluster:
kubectl apply -f ingress.yamlReveja o seguinte manifesto:
Este manifesto descreve um agente elástico que configura um servidor de frota com o ECK.
Aplique este manifesto ao seu cluster:
kubectl apply -f fleet-server-and-agents.yamlAguarde até que os pods estejam prontos:
watch kubectl --namespace elastic-system get agents.agent.k8s.elastic.coO resultado é semelhante ao seguinte:
NAME HEALTH AVAILABLE EXPECTED VERSION AGE elastic-agent green 5 5 8.8.0 14m fleet-server green 1 1 8.8.0 16mQuando o Pods
HEALTHestivergreen, regresse à linha de comandos premindoCtrl+C.Instale o kube-state-metrics:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install kube-state-metrics prometheus-community/kube-state-metrics --namespace elastic-systemObtenha as credenciais de utilizador predefinidas do Kibana
elastic:kubectl get secret elasticsearch-es-elastic-user -o yaml -n elastic-system -o jsonpath='{.data.elastic}' | base64 -dAbra
https://elk.BASE_DOMAINno navegador e inicie sessão no Kibana com as credenciais.No menu, selecione Analytics e, de seguida, Painéis de controlo.
No campo de texto de pesquisa, introduza Kubernetes overview e selecione Overview dashboard para ver as métricas base.
Alguns dos painéis de controlo podem não apresentar dados ou apresentar mensagens de erro porque o GKE limita o acesso a alguns dos pontos finais do plano de controlo que o Kibana usa para obter métricas do cluster.
Elimine os componentes do Elastic Stack, o operador ECK e as kube-state-metrics:
kubectl --namespace elastic-system delete ingresses.networking.k8s.io elastic-stack kubectl --namespace elastic-system delete managedcertificates.networking.gke.io elastic-stack kubectl --namespace elastic-system delete frontendconfigs.networking.gke.io elastic-stack kubectl --namespace elastic-system delete agents.agent.k8s.elastic.co elastic-agent kubectl --namespace elastic-system delete agents.agent.k8s.elastic.co fleet-server kubectl --namespace elastic-system delete kibanas.kibana.k8s.elastic.co kibana kubectl --namespace elastic-system delete elasticsearches.elasticsearch.k8s.elastic.co elasticsearch kubectl --namespace elastic-system delete daemonsets.apps max-map-count-setter kubectl --namespace elastic-system delete pvc --selector='elasticsearch.k8s.elastic.co/cluster-name=elasticsearch' helm --namespace elastic-system uninstall kube-state-metrics helm --namespace elastic-system uninstall elastic-operatorElimine o conjunto de registos de DNS, o endereço IP, a zona gerida de DNS e o cluster do GKE:
gcloud dns record-sets delete "elk.BASE_DOMAIN" \ --type="A" \ --zone="elk" \ --quiet gcloud compute addresses delete "elastic-stack" \ --global \ --quiet gcloud dns managed-zones delete "elk" --quiet gcloud container clusters delete "elk-stack" \ --location="us-central1" \ --quiet- Explore arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Consulte o nosso Centro de arquitetura na nuvem.
Prepare o ambiente
Neste tutorial, vai usar o Cloud Shell para gerir recursos alojados
no Google Cloud. O Cloud Shell está pré-instalado com o software de que precisa para este tutorial, incluindo o kubectl, o Helm e a CLI gcloud.
Para configurar o seu ambiente com o Cloud Shell, siga estes passos:
Crie um cluster do GKE
Crie um cluster do GKE com a recolha de métricas do plano de controlo ativada:
gcloud container clusters create-auto elk-stack \
--location="us-central1" \
--monitoring="SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER"
Implemente o operador ECK
O Elastic Cloud on Kubernetes (ECK) é uma plataforma para implementar e gerir o Elastic Stack em clusters do Kubernetes.
O ECK automatiza a implementação e a gestão de clusters do Elastic Stack, simplificando o processo de configuração e manutenção do Elastic Stack no Kubernetes. Fornece um conjunto de recursos personalizados do Kubernetes que pode usar para criar e configurar o Elasticsearch, o Kibana, o servidor de gestão do desempenho de aplicações e outros componentes do Elastic Stack no Kubernetes. Isto permite que os programadores e as equipas de DevOps configurem e façam a gestão de clusters do Elastic Stack em grande escala.
O ECK suporta vários nós do Elasticsearch, comutação por falha automática de aplicações, atualizações perfeitas e encriptação SSL. O ECK também inclui funcionalidades que lhe permitem monitorizar e resolver problemas de desempenho do Elasticsearch.
Configure o Elastic Stack com o ECK
Ao usar o Elastic Stack com o Elasticsearch, o Kibana e o Elastic Agent a funcionar no modo Fleet, pode configurar uma solução poderosa, escalável e totalmente gerida para gerir e visualizar dados através do Kibana.
O Kibana é uma ferramenta de visualização e análise de dados de código aberto que lhe permite pesquisar, analisar e visualizar dados no Elasticsearch.
O Elastic Agent é um remetente de dados leve que recolhe dados de diferentes fontes, como registos ou métricas, e envia-os automaticamente para o Elasticsearch.
A frota elástica é um modo de funcionamento em que os agentes elásticos comunicam com um servidor de frota central, que processa a respetiva configuração e gestão. O servidor de frota simplifica a implementação, a configuração e o dimensionamento de agentes elásticos, o que facilita a gestão de implementações grandes e complexas.
A escala automática do Elasticsearch é uma funcionalidade de monitorização automática que pode comunicar quando são necessários recursos adicionais com base numa política definida pelo operador. Por exemplo, uma política pode especificar que um determinado nível deve ser dimensionado com base no espaço em disco disponível. O Elasticsearch pode monitorizar o espaço em disco e sugerir o dimensionamento se prever uma escassez, embora seja da responsabilidade do operador adicionar os recursos necessários. Para mais informações sobre o ajuste de escala automático do Elasticsearch, consulte o artigo Ajuste de escala automático na documentação do Elasticsearch.
Configure um cluster do Elasticsearch
O Elasticsearch oferece um motor de pesquisa e análise distribuído e RESTful concebido para armazenar e pesquisar grandes volumes de dados de forma rápida e eficiente.
Quando implementar o Elastic Stack no Kubernetes, deve gerir as definições de VM, especificamente o vm.max_map_count setting, que é necessário para o Elasticsearch. vm.max_map_count especifica o número de áreas de memória que um processo pode atribuir a um ficheiro. O Elasticsearch tem de ter este valor definido como, pelo menos, 262144 para ser executado de forma ideal. Para mais informações, consulte o artigo
Memória virtual
na documentação do ECK.
Configure o Kibana
Configure um balanceador de carga para aceder ao Kibana
Para aceder ao Kibana, crie um objeto Kubernetes Ingress, um certificado gerido pela Google, um endereço IP global e uma zona DNS.
Configure agentes elásticos
Configure o registo e a monitorização
O Elastic Stack pode usar o exportador kube-state-metrics para recolher métricas ao nível do cluster.
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Elimine o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Elimine os recursos individuais
Se usou um projeto existente e não o quer eliminar, elimine os recursos individuais.