Caique Araujo / caiquearaujoac@gmail.com Caique Araujo / caiquearaujoac@gmail.com Sumário 1 Preparando instâncias na Cloud 1.1 Ambientação . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Google Cloud Platform . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Lab 1.1 - Criar conta gratuita na Google Cloud Platform 1.3 Projeto na GCP . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Lab 1.2 - Criar projeto na GCP . . . . . . . . . . . . . 1.4 APIs na GCP . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 Lab 1.3 - Ativar APIs na GCP . . . . . . . . . . . . . . 1.5 Permissões e Chave de acesso . . . . . . . . . . . . . . . . . . 1.5.1 Lab 1.4 - Gerenciar permissão e criar chave de acesso . 1.6 Gerenciar Firewall e IP externos . . . . . . . . . . . . . . . . . 1.6.1 Lab 1.5 - Configurar Firewall e IP externos . . . . . . . 1.7 Instâncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.1 Lab 1.6 - Criar instâncias na GCP . . . . . . . . . . . . 1.8 Instalar Docker e servidor NFS nas instâncias . . . . . . . . . . 1.8.1 Lab 1.7 - Instalar aplicações nas instâncias . . . . . . . 2 Gerenciar e Importar Clusters Kubernetes 2.1 Conhecendo o Rancher . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Arquitetura do Rancher . . . . . . . . . . . . . . . . . 2.1.2 Lab 2.1 - Instalar o Rancher em uma instância na GCP 2.1.3 Lab 2.2 - Conhecendo Painel do Rancher . . . . . . . . 2.2 Gerenciar Cluster personalizado . . . . . . . . . . . . . . . . . 2.2.1 Lab 2.3 - Criar cluster personalizado . . . . . . . . . . 2.3 Importar Cluster Kubernetes . . . . . . . . . . . . . . . . . . . 2.3.1 Lab 2.4 - Importar cluster kubernetes . . . . . . . . . . 2.3.2 Lab 2.5 - Criar Cluster Kubernetes Google GKE . . . . 2.3.3 Lab 2.6 - Criar Cluster Kubernetes EKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 7 8 13 13 17 18 22 23 31 31 41 41 61 61 . . . . . . . . . . 68 68 69 69 74 77 77 87 87 102 111 3 Gerenciar Aplicações no Rancher 124 3.1 Apps & Marketplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 2 3 Sumário Caique Araujo / caiquearaujoac@gmail.com 3.2 3.1.1 Lab 3.1.2 Lab 3.1.3 Lab 3.1.4 Lab Longhorn . 3.2.1 Lab 3.1 3.2 3.3 3.4 . . 3.5 . - Gerenciar Repositórios no Rancher . . . . . . . . . . . . . Instalar aplicação nfs-subdir-external-provisioner no Rancher Instalar aplicação OpenLDAP no Rancher . . . . . . . . . Popular base LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalar Longhorn no Rancher . . . . . . . . . . . . . . . . 4 Gerenciar Autenticação e CLI 4.1 Gerenciar Autenticação no Rancher . . . . . . . . . . . . . . . . . . . . 4.1.1 Lab 4.1- Gerenciar autenticação Local e autorização no Rancher . 4.1.2 Lab 4.2 - Gerenciar autenticação LDAP e autorização no Rancher 4.2 Kubectl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Lab 4.3 - Gerenciar recursos através do Kubectl Shell . . . . . . 4.2.2 Lab 4.4 - Acesso externo através do Kubectl . . . . . . . . . . . 4.3 Rancher CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Lab 4.5 - Gerenciar recursos através do Rancher CLI . . . . . . . 5 Gerenciar Workloads e Serviços 5.1 Workloads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Pods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.2 Deploy . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.3 StatefulSets . . . . . . . . . . . . . . . . . . . . . . . . 5.1.4 DaemonSets . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Serviços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Lab 5.1 - Gerenciar Deploy e Serviços no Rancher . . . . 5.3 Ingress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Lab 5.2 - Gerenciar Ingress no Rancher . . . . . . . . . . 5.4 Jobs e CronJobs . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Lab 5.3 - Gerenciar Jobs e CronJobs no Rancher . . . . . 5.5 Horizontal Pod Autoscaler . . . . . . . . . . . . . . . . . . . . . 5.5.1 Lab 5.4 - Gerenciar Horizontal Pod Autoscaler no Rancher 5.6 ConfigMaps e Secrets . . . . . . . . . . . . . . . . . . . . . . . 5.6.1 Lab 5.5 - Gerenciar ConfigMaps e Secrets no Rancher . . 5.6.2 Lab 5.6 - Gerenciar Ingress com TLS . . . . . . . . . . . 6 Gerenciar Storage 6.1 Volumes . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Volume Local . . . . . . . . . . . . . . . . . . . 6.1.2 Lab 6.1 - Gerenciar Volume Local no Rancher . . 6.1.3 Volume em bloco e Distribuído . . . . . . . . . . 6.1.4 Lab 6.2 - Gerenciar Volume em Bloco no Rancher 6.1.5 Lab 6.3 - Gerenciar Volume NFS no Rancher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 134 140 145 151 151 . . . . . . . . . . . . . . . . 159 159 160 168 183 183 188 194 194 . . . . . . . . . . . . . . . . 198 . 198 . 198 . 199 . 199 . 199 . 199 . 200 . 209 . 209 . 214 . 214 . 228 . 228 . 234 . 234 . 248 . . . . . . 258 . 258 . 258 . 259 . 268 . 269 . 279 4 Sumário Caique Araujo / caiquearaujoac@gmail.com 6.2 Longhorn . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Recursos . . . . . . . . . . . . . . . . . . . . . . . . 6.2.2 Componentes . . . . . . . . . . . . . . . . . . . . . 6.2.3 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . 6.2.4 Lab 6.4 - Gerenciar volume distribuído com Longhorn 6.2.5 Lab 6.5 - Gerenciar Backup de volumes com Longhorn 6.2.6 Lab 6.6 - Gerenciar Restore de volumes com Longhorn 7 GitOps at Scale com Fleet 7.1 GitOps . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.1 GitOps em escala . . . . . . . . . . . . . . . . . 7.2 Fleet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1 Lab 7.1 - Criar o 2ž Cluster Kubernetes GKE . . . 7.2.2 Lab 7.2 - Configurar Cluster Groups no Rancher . 7.3 Wordpress no Rancher . . . . . . . . . . . . . . . . . . . 7.3.1 Lab 7.3 - Realizar Deploy Single Cluster com Fleet 7.3.2 Lab 7.4 - Instalar aplicação Helm via Fleet . . . . 7.3.3 Lab 7.5 - Realizar Deploy Multi Cluster com Fleet 7.3.4 Lab 7.6 - Realizar mudanças via Git CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 290 291 291 292 299 302 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 314 314 315 316 324 331 332 341 350 358 8 Gerenciamento de Logs 8.1 ELK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 K3S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.1 Lab 8.1 - Instalação do K3S e Helm na VM custom . . . . . . . . . 8.2.2 Lab 8.2 - Instalação do ElasticSearch e Kibana via Helm . . . . . . . 8.3 Banzai Cloud Logging Operator . . . . . . . . . . . . . . . . . . . . . . . . 8.3.1 Flow e ClusterFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.2 Lab 8.3 - Instalar Cloud Logging no Rancher . . . . . . . . . . . . . 8.3.3 Lab 8.4 - Configurar envio de logs do cluster para o Elasticsearch . . 8.3.4 Lab 8.5 - Configurar envio de logs de aplicações para o Elasticsearch 8.3.5 Lab 8.6 - Indexar logs no Kibana . . . . . . . . . . . . . . . . . . . 8.3.6 Lab 8.7 - Visualizar logs de Pods através do Kibana . . . . . . . . . 368 . 368 . 369 . 369 . 371 . 375 . 376 . 376 . 379 . 382 . 386 . 392 9 Gerenciar Monitoramento 9.1 Introdução ao Prometheus e Grafana . . . . . . . . . . . 9.1.1 Lab 9.1 - Ativar monitoramento no Rancher . . . 9.1.2 Lab 9.2 - Visualizar Targets e Service Discovery no 9.1.3 Lab 9.3 - Deploy do Apache Exporter . . . . . . . 9.2 ServiceMonitors e PodMonitors . . . . . . . . . . . . . . 9.2.1 ServiceMonitor . . . . . . . . . . . . . . . . . . . 9.2.2 PodMonitors . . . . . . . . . . . . . . . . . . . . 9.2.3 Lab 9.4 - Configurar Service Monitors no Rancher 397 . 397 . 398 . 403 . 405 . 417 . 417 . 418 . 418 . . . . . . . . . . . . . . Prometheus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Sumário Caique Araujo / caiquearaujoac@gmail.com 9.3 9.4 9.5 9.6 9.2.4 Lab 9.5 - Visualizar métricas no Prometheus . . . . . . . . . Dashboards do Grafana . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1 Lab 9.6 - Visualizar métricas no Dashboards do Grafana . . . 9.3.2 Visualizar métricas do Cluster . . . . . . . . . . . . . . . . . 9.3.3 Adicionar Dashboard do Apache o Grafana . . . . . . . . . . Prometheus Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . Prometheus Alert . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.5.1 Lab 9.7 - Configurar Prometheus Rules e Alert no Prometheus Receivers e Route . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.1 Slack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.2 Lab 9.8 - Configurar integração entre Prometheus e Slack . . 9.6.3 Lab 9.9 - Simular falha no serviço do Apache . . . . . . . . . 10 Gerenciar Segurança com Rancher 10.1 NetworkPolicies . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.1 Lab 10.1 - Gerenciar políticas Egress e Ingress para bloquear 10.1.2 LAB 10.2 - Criar políticas para liberar acesso via Labels . . 10.1.3 LAB 10.3 - Criar políticas para liberar acesso via DNS . . . 10.1.4 LAB 10.4 - Criar política para liberar acesso a internet . . . 10.2 RBAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Lab 10.5 - Gerenciar RBAC no Rancher . . . . . . . . . . . 10.3 OPA Gatekeeper . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.1 Lab 10.6 - Instalação do OPA Gatekeeper no Rancher . . . 10.3.2 Lab 10.7 - Criar ConstraintTemplates no OPA Gatekeeper . 10.3.3 Lab 10.8 - Criar Constraints no OPA Gatekeeper . . . . . . 10.3.4 Lab 10.9 - Testando regras do OPA Gatekeeper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 425 425 425 429 434 434 434 439 439 439 451 . . . . acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 457 458 466 473 477 480 481 498 499 502 510 519 . . . . . . . 526 . 526 . 527 . 536 . 536 . 543 . 546 . 548 11 Gerenciar Manutenção e Backup 11.1 Cordon/Drain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.1 Lab 11.1 - Gerenciar disponibilidade dos Nodes no Rancher . . . 11.2 Backup/Restore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.1 Lab 11.2 - Instalar nfs-subdir-external-provisioner no cluster Local 11.2.2 Lab 11.3 - Instalar Rancher Backups . . . . . . . . . . . . . . . 11.2.3 Lab 11.4 - Gerenciar backup de cluster no Rancher . . . . . . . . 11.2.4 Lab 11.5 - Gerenciar restore de cluster no Rancher . . . . . . . . . . . . . . . 12 Provisionar Rancher na GCP/AWS/Azure através do Terraform 12.1 Terraform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.1 LAB 12.1 - Instalação do Terraform . . . . . . . . . . . . . . . . . . 12.1.2 LAB 12.2 - Instalação e configuração do google-cloud-sdk no Linux . 12.1.3 Lab 12.3 - Provisionar o Rancher e Cluster Kubernetes com provedor GCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 . 552 . 553 . 554 . 559 6 Sumário Caique Araujo / caiquearaujoac@gmail.com 12.1.4 Lab 12.4 - Provisionar AWS . . . . . . . . . 12.1.5 Lab 12.5 - Provisionar Azure . . . . . . . . . o . o . Rancher . . . . . Rancher . . . . . e . e . Cluster . . . . Cluster . . . . Kubernetes com . . . . . . . . . Kubernetes com . . . . . . . . . provedor . . . . . . 566 provedor . . . . . . 572 Caique Araujo / caiquearaujoac@gmail.com 1 Preparando instâncias na Cloud Competências da Aula • • • • • • • Criar conta gratuita na GCP Criar projetos na GCP Ativar APIs na GCP Gerenciar permissão e chave de acesso Configurar Firewall e IP externos Criar instâncias na GCP Instalar aplicações nas instâncias Ambientação Em nosso curso vamos precisar de instâncias em um provedor de Cloud para instalar e utilizar o Rancher. A Google Cloud Platform sera utilizada de forma gratuita para realizar as aulas, mas é possível a sua escolha, outro provedor como a AWS, Azure, entre outros. Google Cloud Platform O Google Cloud Platform é uma plataforma de computação em nuvem da Google. É uma das principais ofertas de computação em nuvem do mercado e oferece serviços de armazenamento, processamento, análise de dados e gerenciamento de conteúdo 7 8 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com A plataforma oferece uma variedade de serviços, incluindo hospedagem de sites, armazenamento de dados, execução de aplicativos e infraestrutura de rede. Lab 1.1 - Criar conta gratuita na Google Cloud Platform Neste laboratório vamos aprender como criar uma cona gratuita no Google Cloud Platform. Para começar, acesse o a página da GCP para iniciar o cadastro do nível gratuito, através no link abaixo: https://cloud.google.com/free Clique no botão Comece a usar gratuitamente para iniciar o cadastro. Fig. 1.1: Criar conta gratuita na GCP - ETAPA 1 Em seguida entre com sua conta da Google e clique no botão Próxima. Caso não possua uma, clique no link Criar conta. 9 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.2: Criar conta gratuita na GCP- ETAPA 2 Nesta primeira etapa selecione a opção Eu concordo com os Termos de Serviço do Google Cloud Platform, e clique no botão CONTINUAR para continuar o cadastro. Fig. 1.3: Criar conta gratuita na GCP - ETAPA 3 10 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Na próxima etapa, selecione em Tipo de conta a opção Pessoal física, e preencha as seguintes informações: • CPF • Data de nascimento no formato DD/MM/AAAA Fig. 1.4: Criar conta gratuita na GCP - ETAPA 4 Logo abaixo preencha outras informações: • • • • • • • • Nome Linha de endereço 1 Linha de endereço 2 que pode ser opcional Bairro Estado (precisa selecionar) Cidade CEP Número de telefone que pode ser opcional 11 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.5: Criar conta gratuita na GCP - ETAPA 5 Em Forma de pagamento, sera preciso fornecer os seguintes dados de seu cartão de crédito: • • • • Número do cartão Quando expira em (Mês e Ano) CVV Nome do titular do cartão Clique no botão INICIAR MINHA TESTE GRATUITO para concluir o cadastro. 12 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.6: Criar conta gratuita na GCP - ETAPA 6 Como resultado final sera mostrado o Painel de administração da GCP. Fig. 1.7: Painel de administração da GCP - ETAPA 7 13 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Projeto na GCP Um projeto organiza todos os seus recursos do Google Cloud. O projeto é um guia para organizar todos os seus recursos do Google Cloud Platform. Antes de começar, é importante que você tenha uma conta do Google Cloud Platform. Lab 1.2 - Criar projeto na GCP Neste laboratório vamos aprender como criar dois projetos, através do painel do Google Cloud Platform. Uma vez logado no painel da GCP, clique em My First Project ao lado da caixa de pesquisa. Fig. 1.8: Criar projetos na GCP - ETAPA 1 Em seguida clique no botão NOVO PROJETO. 14 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.9: Criar projetos na GCP - ETAPA 2 Digite na caixa Nome do projeto, o nome cluster1 e clique no botão CRIAR. 15 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.10: Criar projetos na GCP - ETAPA 3 Repita a criação de um novo projeto, agora com o nome cluster2. 16 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.11: Criar projetos na GCP - ETAPA 4 17 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.12: Criar projetos na GCP - ETAPA 5 APIs na GCP As APIs do Google Cloud Platform são um conjunto de APIs que permitem que os desenvolvedores acessem os serviços do Google Cloud Platform. Durante o curso vamos utilizar as APIs IAM e Kubernetes. A API IAM permite que os administradores gerenciem a identidade e o controle de acesso dos recursos do Google Cloud Platform. Isso inclui criar, editar e excluir políticas e funções do IAM e gerenciar contas e grupos de usuários. Além disso, a API permite que os administradores auditem a atividade do IAM e exportem dados do IAM para sistemas externos. A API Kubernetes permite que os desenvolvedores gerenciem clusters e nós em um ambiente Kubernetes, bem como implantem e gerenciem aplicativos. Esta API requer uma conta e um projeto do Google Cloud Platform. 18 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Lab 1.3 - Ativar APIs na GCP Neste laboratório vamos aprender como ativar as APIs IAM e Kubernetes nos projetos cluster1 e cluster2. Uma vez logado no painel da GCP, selecione o projeto projeto1 ao lado da caixa de pesquisa. Fig. 1.13: Ativar APIs na GCP - ETAPA 1 Em seguida, clique no Menu de navegação que fica no canto superior esquerdo, e em seguida selecione APIs e serviços Biblioteca. 19 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.14: Ativar APIs na GCP - ETAPA 2 Digite na caixa de pesquisa, IAM e tecle ENTER. Fig. 1.15: Ativar APIs na GCP - ETAPA 3 Secione na lista Identity and Access Managemenent (IAM) API. 20 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.16: Ativar APIs na GCP - ETAPA 4 E clique no botão ATIVAR. Fig. 1.17: Ativar APIs na GCP - ETAPA 5 Retorne a página de Biblioteca para pesquisar Kubernetes, e secione na lista Kubernetes Engine API. 21 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.18: Ativar APIs na GCP - ETAPA 6 E clique no botão ATIVAR. Fig. 1.19: Ativar APIs na GCP - ETAPA 7 Repita a ativação das APIs IAM e Kubernetes no projeto cluster2. 22 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.20: Ativar API IAM no projeto cluster2 - ETAPA 1 Fig. 1.21: Ativar API Kubernetes no projeto cluster2 - ETAPA 2 Permissões e Chave de acesso Durante o curso vamos gerenciar clusters da GCP através do painel do Rancher e sera preciso que o nosso usuário padrão, possua permissão total aos recursos do Kubernetes na Cloud. A chave de acesso é um identificador exclusivo que você cria para autorizar o acesso aos seus recursos do Google Cloud Platform. Em nosso curso sera necessário gerar uma chave com permissão de Administrator do Kubernetes para a conta padrão no projeto. 23 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Lab 1.4 - Gerenciar permissão e criar chave de acesso Neste laboratório vamos aprender como adicionar permissão de Administrator do Kubernetes para a conta padrão nos projetos cluster1 e cluster2, e criar uma chave de aceso no formato JSON para cada projeto. Adicionar permissão de Administrator do Kubernetes Uma vez logado no painel da GCP, selecione o projeto projeto1 ao lado da caixa de pesquisa. Fig. 1.22: Adicionar permissão de Administrator do Kubernetes na GCP - ETAPA 1 Em seguida, clique no Menu de navegação e depois em IAM e Administrador IAM 24 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.23: Adicionar permissão de Administrator do Kubernetes na GCP - ETAPA 2 Em seguida clique em Editar principal na conta do compute@developer.gserviceaccount.com. Fig. 1.24: Adicionar permissão de Administrator do Kubernetes na GCP - ETAPA 3 Clique no botão + ADICIONAR OUTRO PAPEL. 25 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.25: Adicionar permissão de Administrator do Kubernetes na GCP - ETAPA 4 Pesquise na caixa kubernetes e selecione Administrador do Kubernetes Engine. Fig. 1.26: Adicionar permissão de Administrator do Kubernetes na GCP - ETAPA 5 Clique no botão SALVAR para aplicar a configuração. 26 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.27: Adicionar permissão de Administrator do Kubernetes na GCP - ETAPA 6 Verifique se o papel Administrador do Kubernetes Engine esta associado a conta. Fig. 1.28: Adicionar permissão de Administrator do Kubernetes na GCP - ETAPA 7 Repita a adição de permissão de Administrator do Kubernetes no projeto cluster2. 27 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.29: Adicionar permissão de Administrator do Kubernetes na GCP - ETAPA 8 Configurar chave de acesso Uma vez logado no painel da GCP, selecione o projeto projeto1 ao lado da caixa de pesquisa. Fig. 1.30: Configurar chave de acesso na GCP - ETAPA 1 Na janela do IAM clique em Contas de serviço ao lado esquerdo da tela. 28 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.31: Configurar chave de acesso na GCP - ETAPA 2 Selecione uma conta e no menu da coluna Ações clique na opção Gerenciar chaves. Fig. 1.32: Configurar chave de acesso na GCP - ETAPA 3 29 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Clique no botão ADICIONAR CHAVE e em seguida na a opção Criar nova chave. Fig. 1.33: Configurar chave de acesso na GCP - ETAPA 4 Selecione a opção JSON e clique no botão CRIAR para criar sua chave de acesso. Fig. 1.34: Configurar chave de acesso na GCP - ETAPA 5 Confirme se a chave privada foi salva em seu computador. 30 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.35: Configurar chave de acesso na GCP - ETAPA 6 Repita a configuração de chave de acesso no projeto cluster2. Fig. 1.36: Configurar chave de acesso na GCP - ETAPA 7 31 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.37: Configurar chave de acesso na GCP - ETAPA 8 Gerenciar Firewall e IP externos A partir das regras de firewall vamos controlar o tráfego de entrada e saída de máquinas virtuais (pelas interfaces de rede) e sub-redes. Os endereços de IP públicos permitem acesso externo a recursos da Cloud, como por exemplo a uma instância. Esses endereços podem ser estáticos e dedicados a uma instância, até que você remova essa atribuição, ou dinâmicos onde seu endereço muda conforme você remove e cria a instância. Lab 1.5 - Configurar Firewall e IP externos Neste laboratório vamos aprender como liberar as portas necessárias para as novas instâncias e criar IPs públicos. Regra de Firewall: nodeports Uma vez logado no painel da GCP, selecione o projeto My First Project ao lado da caixa de pesquisa. 32 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.38: Configurar Firewall nodeports na GCP - ETAPA 1 Em seguida, clique no Menu de navegação e depois em Rede VPC Firewall. Fig. 1.39: Configurar Firewall nodeports na GCP - ETAPA 2 Em seguida clique na opção CRIAR REGRA DE FIREWALL. 33 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.40: Configurar Firewall nodeports na GCP - ETAPA 3 Defina o nome nodeports na rede default. Fig. 1.41: Configurar Firewall nodeports na GCP - ETAPA 4 Defina o tráfego como Entrada em Todas as instâncias na rede e no intervalo 0.0.0.0/0. 34 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.42: Configurar Firewall nodeports na GCP - ETAPA 5 Em Portas e protocolos define o uso do protocolo TCP o intervalo 30000-32767. Clique no botão CRIAR para finalizar. Fig. 1.43: Configurar Firewall nodeports na GCP - ETAPA 6 Verifique se a regra nodeports foi criada corretamente. 35 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.44: Configurar Firewall nodeports na GCP - ETAPA 7 Repita a criação da regra de firewall nodeports, nos projetos cluster1 e cluster2. Fig. 1.45: Regra de firewall nodeports no projeto cluster1 36 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.46: Regra de firewall nodeports no projeto cluster2 Regra de Firewall: nfs-server Uma vez logado no painel da GCP, clique no Menu de navegação e depois em Rede VPC Firewall, e clique novamente na opção CRIAR REGRA DE FIREWALL. Fig. 1.47: Configurar Firewall nfs-server na GCP - ETAPA 1 Defina o nome nfs-server na rede default. 37 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.48: Configurar Firewall nfs-server na GCP - ETAPA 2 Defina o tráfego como Entrada, Tags de destino nfs-server e no intervalo 0.0.0.0/0. Fig. 1.49: Configurar Firewall nfs-server na GCP - ETAPA 3 Em Portas e protocolos, defina o uso do protocolo TCP e a porta 2049. Clique no botão 38 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com CRIAR para finalizar. Fig. 1.50: Configurar Firewall nfs-server na GCP - ETAPA 4 Verifique se a regra nfs-server foi criada corretamente. Fig. 1.51: Configurar Firewall nfs-server na GCP - ETAPA 5 39 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Regra de Firewall: logs Vamos clicar novamente no botão CRIAR REGRA DE FIREWALL. Fig. 1.52: Configurar Firewall logs na GCP - ETAPA 1 Defina o nome logs na rede default. Fig. 1.53: Configurar Firewall logs na GCP - ETAPA 2 Defina o tráfego como Entrada, Tags de destino logs e no intervalo 0.0.0.0/0. 40 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.54: Configurar Firewall logs na GCP - ETAPA 3 Em Portas e protocolos, defina o uso do protocolo TCP e as portas 5601, 9200 e 9300. Clique no botão CRIAR para finalizar. Fig. 1.55: Configurar Firewall logs na GCP - ETAPA 4 Verifique se a regra logs foi criada corretamente. 41 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.56: Configurar Firewall logs na GCP - ETAPA 5 Instâncias Uma instância é uma máquina virtual que esta sendo executado em um provedor de nuvem, como por exemplo na AWS, Azure e GCP. Essas instâncias tem como função executar aplicações como um servidor de banco de dados, e-mail, web, entre outros. É possível realizar um escalonamento automático, aumentando ou diminuindo os recursos computacionais das instâncias, dependendo dos requisitos da carga de trabalho. Lab 1.6 - Criar instâncias na GCP Neste laboratório vamos aprender como criar as instâncias utilizadas durante o curso. Criar instância rancher Uma vez logado no painel da GCP, clique no Menu de navegação e depois clique em COMPUTAÇÃO Compute Engine Instâncias de VM. 42 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.57: Criar instância rancher - ETAPA 1 Em seguida clique no botão CRIAR INSTÂNCIA. Fig. 1.58: Criar instância rancher - ETAPA 2 Selecione as seguintes opções para a sua instância: • Nome: rancher • Região: us-central1 (lowa) 43 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com • Zona: us-central1-c • Tipo de máquina: e2-medium Fig. 1.59: Criar instância rancher - ETAPA 3 Em Disco de inicialização clique no botão MUDAR para selecionar a Imagem da instância. Fig. 1.60: Criar instância rancher - ETAPA 4 44 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Em nosso exemplo sera usado o Ubuntu 20.04 LTS com 30GB de Disco permanente equilibrado. Fig. 1.61: Criar instância rancher - ETAPA 5 Libere o acesso nas portas 80 e 443, selecionando Permitir tráfego HTTP e HTTPS. Fig. 1.62: Criar instância rancher - ETAPA 6 Para associar um IP fixo a nossa instância, clique em REDE, DISCOS, SEGURANÇA, GERENCIAMENTO, LOCATÁRIO ÚNICO 45 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.63: Criar instância rancher - ETAPA 7 Em seguida clique no link Rede. Fig. 1.64: Criar instância rancher - ETAPA 8 Em Interfaces de rede clique em default. 46 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.65: Criar instância rancher - ETAPA 9 Clique na caixa IP externo e no botão CRIAR ENDEREÇO IP. Fig. 1.66: Criar instância rancher - ETAPA 10 Na caixa Nome digite rancher e clique no botão RESERVAR. 47 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.67: Criar instância rancher - ETAPA 11 Confirme a reserva do novo IP, clicando no botão CONCLUIR. Fig. 1.68: Criar instância rancher - ETAPA 12 Para terminar clique no botão CRIAR no final da página. 48 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.69: Criar instância rancher - ETAPA 13 Verifique se a instância rancher foi criada corretamente. Fig. 1.70: Criar instância rancher - ETAPA 14 Criar instância nfs-server Clique novamente no botão CRIAR INSTÂNCIA. 49 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.71: Criar instância nfs-server - ETAPA 1 Selecione as seguintes opções para a sua instância: • • • • Nome: nfs-server Região: us-central1 (lowa) Zona: us-central1-c Tipo de máquina: e2-medium Fig. 1.72: Criar instância nfs-server - ETAPA 2 50 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Em Disco de inicialização clique no botão MUDAR para selecionar a Imagem da instância. Fig. 1.73: Criar instância nfs-server - ETAPA 3 Em nosso exemplo sera usado o Ubuntu 20.04 LTS com 100GB de Disco permanente SSD. Fig. 1.74: Criar instância nfs-server - ETAPA 4 Para associar um IP fixo a nossa instância, clique em REDE, DISCOS, SEGURANÇA, GERENCIAMENTO, LOCATÁRIO ÚNICO 51 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.75: Criar instância nfs-server - ETAPA 5 Em seguida clique no link Rede. Fig. 1.76: Criar instância nfs-server - ETAPA 6 Na caixa Tags de rede digite nfs-server. 52 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.77: Criar instância nfs-server - ETAPA 7 Em Interfaces de rede clique em default. Fig. 1.78: Criar instância nfs-server - ETAPA 8 Clique na caixa IP externo e no botão CRIAR ENDEREÇO IP. 53 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.79: Criar instância nfs-server - ETAPA 9 Na caixa Nome digite nfs-server e clique no botão RESERVAR. Fig. 1.80: Criar instância nfs-server - ETAPA 10 Confirme a reserva do novo IP, clicando no botão CONCLUIR. 54 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.81: Criar instância nfs-server - ETAPA 11 Para terminar clique no botão CRIAR no final da página. Fig. 1.82: Criar instância nfs-server - ETAPA 12 Verifique se a instância nfs-server foi criada corretamente. 55 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.83: Criar instância nfs-server - ETAPA 13 Criar instância custom Vamos criar uma nova instância, a partir do botão CRIAR INSTÂNCIA. Fig. 1.84: Criar instância custom - ETAPA 1 Selecione as seguintes opções para a sua instância: • • • • Nome: custom Região: us-central1 (lowa) Zona: us-central1-c Tipo de máquina: e2-standard-4 56 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.85: Criar instância custom - ETAPA 2 Em Disco de inicialização clique no botão MUDAR para selecionar a Imagem da instância. Fig. 1.86: Criar instância custom - ETAPA 3 Em nosso exemplo sera usado o Ubuntu 20.04 LTS com 50GB de Disco permanente equilibrado. 57 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.87: Criar instância custom - ETAPA 4 Para associar um IP fixo a nossa instância, clique em REDE, DISCOS, SEGURANÇA, GERENCIAMENTO, LOCATÁRIO ÚNICO Fig. 1.88: Criar instância custom - ETAPA 5 Em seguida clique no link Rede. 58 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.89: Criar instância custom - ETAPA 6 Na caixa Tags de rede digite logs. Fig. 1.90: Criar instância custom - ETAPA 7 Em Interfaces de rede clique em default. 59 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.91: Criar instância custom - ETAPA 8 Clique na caixa IP externo e no botão CRIAR ENDEREÇO IP. Fig. 1.92: Criar instância custom - ETAPA 9 Na caixa Nome digite custom e clique no botão RESERVAR. Fig. 1.93: Criar instância custom - ETAPA 10 60 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Confirme a reserva do novo IP, clicando no botão CONCLUIR. Fig. 1.94: Criar instância custom - ETAPA 11 Para terminar clique no botão CRIAR no final da página. Fig. 1.95: Criar instância custom - ETAPA 12 Verifique se a instância custom foi criada corretamente. 61 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.96: Criar instância custom - ETAPA 13 Instalar Docker e servidor NFS nas instâncias O Docker é um aplicativo de software livre que permite aos usuários construir, distribuir e executar aplicativos de software de forma portátil. Ele funciona em conjunto com o kernel do Linux para criar um ambiente de containers isolados. Cada container é executado como um processo separado em um host e compartilha um conjunto de arquivos e diretórios com outros containers. Isso permite que os desenvolvedores criem, testem e realizem deploys em aplicativos de forma rápida e fácil. O NFS é um protocolo de rede que permite aos usuários compartilhar arquivos e pastas entre computadores. O NFS é baseado em um modelo cliente/servidor. Os clientes NFS pedem acesso aos arquivos e pastas armazenados no servidor. O servidor NFS fornece acesso a estes arquivos e pastas aos clientes. Lab 1.7 - Instalar aplicações nas instâncias Neste laboratório vamos aprender como instalar o Docker na instância rancher e custom, e o servidor NFS na instância nfs-server. Instalação do Docker Uma vez logado no painel da GCP, em Compute Engine na linha da instância rancher, clique no menu suspenso ao lado do SSH e escolha Abrir na janela do navegador. 62 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.97: Instalação do Docker - ETAPA 1 Uma vez logado na instância rancher, baixe o script de instalação do Docker através do comando curl: curl -fsSL https://get.docker.com -o get-docker.sh Em seguida execute o script de instalação do Docker: sh get-docker.sh Verifique se o Docker foi instalado corretamente: sudo docker version Resultado esperado: 63 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.98: Instalação do Docker - ETAPA 2 Para terminar vamos abandonar a instância, através do comando exit: exit Repita o acesso na instância custom, através no menu suspenso ao lado do SSH e escolha Abrir na janela do navegador. 64 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.99: Instalação do Docker - ETAPA 3 Repita a instalação do Docker e verifique se o mesmo foi instalado corretamente: sudo docker version Resultado esperado: 65 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.100: Instalação do Docker - ETAPA 4 Instalação do servidor NFS Uma vez logado no painel da GCP, em Compute Engine na linha da instância nfs-servcer, clique no menu suspenso ao lado do SSH e escolha Abrir na janela do navegador. 66 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com Fig. 1.101: Instalação do servidor NFS - ETAPA 1 Uma vez logado na instância nfs-server, atualize a lista de pacotes e instale os pacotes nfs-kernel-server e vim: sudo apt-get update sudo apt-get install nfs-kernel-server vim -y Em seguida crie as pastas /nfs, /nfs2 e /backups: sudo mkdir /nfs /nfs2 /backups E altere a permissão para o usuário nobody e grupo nogroup na três pastas: sudo chown nobody:nogroup /nfs /nfs2 /backups Para configurar o compartilhamento do servidor NFS, edite o arquivo /etc/exports: sudo vim /etc/exports +$ Adicione no final do arquivo a pasta que sera compartilhada pelo servidor NFS: 67 1. Preparando instâncias na Cloud Caique Araujo / caiquearaujoac@gmail.com /nfs *(rw,sync,no_subtree_check,no_root_squash) /nfs2 *(rw,sync,no_subtree_check,no_root_squash) /backups *(rw,sync,no_subtree_check,no_root_squash) Para iniciar a editação no editor VIM, tecle i. Tecle ESC para sair do modo de edição, e digite :wq para salvar e sair do editor de textos VIM. Para aplicar as configurações, reinicie o serviço nfs-kernel-server: sudo systemctl restart nfs-kernel-server Verifique se o servidor NFS esta compartilhando as três pastas: showmount -e Resultado esperado: Fig. 1.102: Instalação do servidor NFS - ETAPA 2 A instância nfs-server pode permanecer desligada até a aula sobre Gerenciar Aplicações no Rancher! Caique Araujo / caiquearaujoac@gmail.com 2 Gerenciar e Importar Clusters Kubernetes Competências da Aula • • • • • • • Conhecendo o Rancher Instalação do Rancher Acessar painel e conhecer os menus Gerenciar Cluster personalizado Importar cluster Kubernetes Criar Cluster Kubernetes Google GKE Criar Cluster Kubernetes Amazon EKS Conhecendo o Rancher O Rancher é um software de gerenciamento de nuvem que permite aos usuários criar, gerenciar e implantar aplicações em nuvem. O Rancher fornece uma interface de usuário unificada que permite aos usuários gerenciar todos os recursos da nuvem, incluindo servidores, contêineres e redes. O Rancher também fornece uma plataforma de desenvolvimento que permite aos usuários implantar aplicações em contêineres rapidamente e facilmente. Além disso, o Rancher oferece uma solução de segurança integrada que permite aos usuários proteger as suas aplicações em nuvem. 68 69 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Rancher é composto por três componentes principais: • RancherOS: Uma distribuição Linux minimalista que roda exclusivamente em containers. Ele fornece um sistema operacional pequeno e independente com todas as ferramentas necessárias para executar contêineres. • Rancher: Uma plataforma de gerenciamento de contêineres que fornece uma interface única para gerenciar todos os aspectos da execução de contêineres no Kubernetes, desde implantação e agendamento até rede e segurança. • Cattle: Um conjunto de ferramentas de código aberto para gerenciar clusters Kubernetes. Ele inclui uma ferramenta de linha de comando para criar, atualizar e excluir clusters, bem como uma interface do usuário da Web para gerenciar nós e pods. Arquitetura do Rancher O Rancher é um sistema de gestão de infraestrutura de nuvem baseado em Docker. Ele fornece uma abordagem uniforme para gerenciar clusters de servidores e contêineres Docker em qualquer nuvem pública ou privada. O Rancher é projetado para funcionar com uma grande variedade de provedores de nuvem, incluindo Amazon Web Services, Microsoft Azure, Google Cloud Platform, Rackspace, e DigitalOcean. O Rancher é composto de dois componentes principais: • Rancher Server: Um servidor web que fornece uma interface de usuário para gerenciar clusters de servidores e contêineres Docker. • Rancher Agent: É uma agent que é executado em cada servidor do cluster e monitoram os contêineres Docker para solicitações de execução e configuração. O Rancher é um projeto open source lançado sob a licença Apache 2.0. Lab 2.1 - Instalar o Rancher em uma instância na GCP Neste laboratório vamos aprender como instalar o Rancher na instância rancher na GCP. • Uma vez logado no painel da GCP, selecione o projeto My First Project ao lado da caixa de pesquisa. • Em seguida clique em Compute Engine. • Nna linha da instância rancher, clique no menu suspenso ao lado do SSH e escolha Abrir na janela do navegador. 70 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.1: Instalação do Rancher - ETAPA 1 Para instalar o Rancher execute na instância rancher o seguinte comando: sudo docker container run --privileged -d --name rancher-manager --restart=unless-stopped p 80:80 -p 443:443 rancher/rancher:stable Verifique se o container do Rancher esta sendo executado: sudo docker container ls Resultado esperado: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 22227af3ab13 rancher/rancher:stable "entrypoint.sh" 5 minutes ago Up 2 minute2 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp ranchermanager Acesse o IP publico da instância da Cloud, através do ícone ao lado da coluna IP externo. 71 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.2: Instalação do Rancher - ETAPA 4 Aceite o certificado autoassinado criado pelo Rancher. Fig. 2.3: Instalação do Rancher - ETAPA 5 Para realizar o primeiro acesso, é preciso informar a senha de bootstrap. 72 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.4: Instalação do Rancher - ETAPA 6 Retorne ao terminal da instância rancher e execute o comando abaixo, para exibir a senha de bootstrap: sudo docker logs rancher-manager 2>&1 | grep "Bootstrap Password:" Resultado esperado: Fig. 2.5: Instalação do Rancher - ETAPA 7 Copie a senha! Retorne ao painel do Rancher para colar a senha copiada, e clique no botão Log in with Local User. 73 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.6: Instalação do Rancher - ETAPA 8 O próximo passo é definir uma senha para o admin, através do opção Set a specific password to use. Use as caixas New Password e Confirm New Password, para definir a nova senha. Não esqueça de selecionar a opção I agree to the terms and conditions for using Rancher, e clique no botão Continue. Fig. 2.7: Instalação do Rancher - ETAPA 9 Como resultado final sera mostrado o painel do Rancher: 74 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.8: Instalação do Rancher - ETAPA 10 Lab 2.2 - Conhecendo Painel do Rancher Neste laboratório vamos conhecer e entender a função de diversos menu no painel do Rancher. Cluster Management A área de Cluster Management permite o gerenciamento de cluster Kubernetes no Rancher. Para acessar essa área, clique no menu principal que fica na parte superior ao lado esquerdo da tela e clique em Cluster Management. Em seguida clique em 75 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.9: Acessando o Cluster Management - ETAPA 1 A partir dos menus ao lado esquerdo da tela, é possível configurar: • • • • • • • Novos clusters. Credenciais de cloud Drives. Politicas de segurança em Pods. Templates. Nodes. Repositórios de pacotes do Helm. 76 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.10: Acessando o Cluster Management - ETAPA 2 Cluster Explorer A área de Cluster Explorer permite o gerenciamento dos recursos em cluster Kubernetes. Para acessar essa área, clique no menu principal que fica na parte superior ao lado esquerdo da tela e clique no nome de um cluster, em nosso caso local. Fig. 2.11: Acessando o Cluster Explorer - ETAPA 1 A partir dos menus ao lado esquerdo da tela, é possivel visualizar e configurar: • Cluster: Recursos do cluster como namespaces e nodes. • Workloads: Gerenciamento de CronJobs, DaemonSets, Deployments, Jobs, StatefulSets e Pods. • Apps & Marktplace: Gerenciar repositórios e aplicações do Helm. 77 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com • Service Discovery: Gerenciamento de HorizontalPodAutoscalers, Ingresses, NetworkPlocies e Services. • Storage: Gerenciamento de PersistentVolumes, StorageClass, ConfigMaps, PersistentVolumeClaims e Secrets. • RBAC: Gerenciamento de membros do Cluster. • More Resources: Gerenciamento de outros recursos do cluster, que não estão presentes nos demais menus. Fig. 2.12: Acessando o Cluster Explorer - ETAPA 2 Gerenciar Cluster personalizado Quando você cria um cluster personalizado, o Rancher usa o RKE (Rancher Kubernetes Engine) para criar um cluster Kubernetes em servidores bare-metal locais, máquinas virtuais locais ou em qualquer nó hospedado por um provedor de infraestrutura. Para usar essa opção, você precisará: • Acessar os servidores que pretende usar em seu cluster Kubernetes. • Instalar em cada servidor o Docker. • Executar o comando fornecido na interface do Rancher em cada servidor para transformar cada um em um nó do Kubernetes. Lab 2.3 - Criar cluster personalizado Neste laboratório vamos aprender como criar um cluster Kubernetes personalizado no Rancher. 78 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Criar cluster personalizado no Rancher Acesse a área de Cluster Management e clique no botão CREATE: Fig. 2.13: Criar cluster personalizado no Rancher - ETAPA 1 Em seguida, clique na opção Custom: Fig. 2.14: Criar cluster personalizado no Rancher - ETAPA 2 Define a o nome custom na caixa Cluster Name: 79 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.15: Criar cluster personalizado no Rancher - ETAPA 3 Role a página e selecione as seguintes opções: • • • • Kubernetes Version: v1.21.10-rancher1-1 Network Provider: Flannel Windows Suport: Disabled Cloud Provider: None O plug-in Flannel para Kubernetes permite a comunicação entre contêineres em diferentes hosts criando uma rede de sobreposição usando a solução de rede definida por software (SDN). 80 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.16: Criar cluster personalizado no Rancher - ETAPA 4 A seguir vamos deixar padrão as seguintes configurações: • Private Registry: Configura o uso de um registro privado. • Advanced Options: Configura opções do cluster, como por exemplo portas de NodePort, uso de Ingress, configurações de segurança e storage. • Authorized Endpoint: Configura permite a comunicação direta com o cluster, ignorando o proxy de API. Clique no botão Next para continuar: Fig. 2.17: Criar cluster personalizado no Rancher - ETAPA 5 81 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com O proximo passo é selecionar quais funções o nosso servidor Kubernetes ira utilizar. • etcd: Permite executar um Pod do etcd, que é um banco de dados de chaves distribuído, ele é responsável por armazenar informações do cluster, assim como, podemos usar o etcd para armazenar qualquer tipo de informação. • Control Plane: Permite executar um controlador que gerencia os controladores pods, deployments, replicasets, etc. • Worker: Permite executar pods de aplicações. Clique no link Show advanced options para continuar: Fig. 2.18: Criar cluster personalizado no Rancher - ETAPA 6 Antes de continuar, retorne a sua conta na GCP e acesse o painel do Compute Engine. Anote o IP Interno e Externo da instância custom. Fig. 2.19: Criar cluster personalizado no Rancher - ETAPA 7 82 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com A proxima etapa é preencher as seguintes caixas: • Node Internal Address: Digite o IP Interno da instância custom. • Node Public Address: Digite o IP Externo da instância custom. • Node Name: Digite o nome custom. Fig. 2.20: Criar cluster personalizado no Rancher - ETAPA 8 Role até o final da página e você ira encontrar o comando que deve ser executado na instância custom. Copie o comando através do ícone ao lado direito Copy to Clipboard. Fig. 2.21: Criar cluster personalizado no Rancher - ETAPA 9 83 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Abra a janela de acesso SSH da instância custom, cole o comando e tecle ENTER. Fig. 2.22: Criar cluster personalizado no Rancher - ETAPA 10 Retorne ao painel do Rancher e clique no botão Done. Fig. 2.23: Criar cluster personalizado no Rancher - ETAPA 11 Como resultado é possível observar que o cluster Kubernetes esta sendo provisionado na GCP! Fig. 2.24: Criar cluster personalizado no Rancher - ETAPA 12 84 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Para acessar os recursos do cluster custom, clique no botão Explorer: Fig. 2.25: Criar cluster personalizado no Rancher - ETAPA 13 Fig. 2.26: Criar cluster personalizado no Rancher - ETAPA 14 Para visualizar os Pods no cluster custom, clique em Workloads -> Pods ao lado esquerdo da tela: 85 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.27: Criar cluster personalizado no Rancher - ETAPA 15 Para visualizar os Serviços no cluster custom, clique em Service Discovery -> Services ao lado esquerdo da tela: Fig. 2.28: Criar cluster personalizado no Rancher - ETAPA 16 Remover cluster no Rancher Clique no menu principal que fica na parte superior ao lado esquerdo da tela e clique em Cluster Management. 86 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.29: Remover cluster no Rancher - ETAPA 1 Selecione na coluna State o cluster custom Fig. 2.30: Remover cluster no Rancher - ETAPA 2 E clique no botão Delete. Fig. 2.31: Remover cluster no Rancher - ETAPA 3 87 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Confirme a removação através do botão Delete. Fig. 2.32: Remover cluster no Rancher - ETAPA 4 Confirme se o cluster custom foi removido! Fig. 2.33: Remover cluster no Rancher - ETAPA 5 Importar Cluster Kubernetes Quando você o,importa um cluster kubernetes pronto, o Rancher usa as credencias do provedor de Cloud para criar o cluster. Para usar essa opção, você antes precisa configurar as credencias de seu provedor de Cloud, no painel do Rancher. Lab 2.4 - Importar cluster kubernetes Neste laboratório vamos aprender como importar um cluster Kubernetes que em execução na GCP para o painel do Rancher. Criar cluster Kubernetes na GCP Uma vez logado no painel da GCP, selecione o projeto cluster2 ao lado da caixa de pesquisa. 88 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.34: Criar cluster Kubernetes na GCP - ETAPA 1 E clique no ícone Ativar o Cloud Shell, que esta localizado na parte superior direito da tela. Fig. 2.35: Criar cluster Kubernetes na GCP - ETAPA 2 No terminal que sera aberto, vamos executar comando que criar um cluster kubernetes GKE. gcloud container clusters create kubernetes-gcp --zone us-central1-c --no-enable-ip-alias Resultado esperado: 89 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.36: Criar cluster Kubernetes na GCP - ETAPA 3 Sera preciso ativar a autorização do Cloud Shell, através do botão AUTORIZAR. Fig. 2.37: Criar cluster Kubernetes na GCP - ETAPA 4 Apos a criação do cluster kubernetes, sera apresentado um resumo com o status RUNNING. 90 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.38: Criar cluster Kubernetes na GCP - ETAPA 4 Podemos verificar que o cluster foi criado, através do menu de navegação, selecionando a opção Kubernetes Engine e Clusters. Fig. 2.39: Criar cluster Kubernetes na GCP - ETAPA 5 Como resultado é possível verificar o cluster kubernetes-gcp com 3 nós. 91 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.40: Criar cluster Kubernetes na GCP - ETAPA 6 Configurar credencias da Cloud Retorne a tela do Cluster Management e vamos criar um nova credencial, através da opção Cloud Credentials -> Create. Fig. 2.41: Configurar credencias da Cloud - ETAPA 1 Em seguida clique no ícone Google. 92 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.42: Configurar credencias da Cloud- ETAPA 2 Depois clique no botão Read from File para carregar a chave da GCP. Fig. 2.43: Configurar credencias da Cloud - ETAPA 3 É preciso selecionar o arquivo de chave cluster2 que esta gravado em sua máquina local. 93 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.44: Configurar credencias da Cloud - ETAPA 4 Em em seguida clique no botão Create. Fig. 2.45: Configurar credencias da Cloud - ETAPA 5 E verifique se a credencial foi criada corretamente. 94 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.46: Configurar credencias da Cloud - ETAPA 6 Importar cluster Kubernetes no Rancher Para importar um cluster kubernetes para o Rancher, clique em Clusters -> Import Existing. Fig. 2.47: Importar cluster Kubernetes no Rancher - ETAPA 1 Em seguida clique na opção Google GKE. 95 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.48: Importar cluster Kubernetes no Rancher - ETAPA 2 E defina o nome kubernetes-gcp. Fig. 2.49: Importar cluster Kubernetes no Rancher - ETAPA 3 Antes de continuar alterne para o painel da GCP e copie o ID do projeto cluster2. 96 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.50: Importar cluster Kubernetes no Rancher - ETAPA 4 Voltando ao Rancher informe o ID do projeto cluster2 na caixa Google Project ID. Clique no botão Next: Configure Cluster para continuar. Fig. 2.51: Importar cluster Kubernetes no Rancher - ETAPA 5 A próxima etapa é definir a Zona us-central1-c e clicar no botão Load Clusters. 97 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.52: Importar cluster Kubernetes no Rancher - ETAPA 6 Selecione o cluster kubernetes-gcp e clique no botão Register Cluster. Fig. 2.53: Importar cluster Kubernetes no Rancher - ETAPA 7 Aguarde a importação do cluster para o painel do Rancher! 98 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.54: Importar cluster Kubernetes no Rancher - ETAPA 8 E clique no botão Explore para visualizar as informações do cluster importado. Fig. 2.55: Importar cluster Kubernetes no Rancher - ETAPA 9 99 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.56: Importar cluster Kubernetes no Rancher - ETAPA 10 Excluir cluster Kubernetes no Rancher Para excluir um cluster no Rancher, selecione o mesmo e clique no botão Delete. Fig. 2.57: Excluir cluster Kubernetes no Rancher - ETAPA 1 Confirme a exclusão através do botão Delete. 100 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.58: Excluir cluster Kubernetes no Rancher - ETAPA 2 Excluir cluster Kubernetes via Cloud Shell Para continuar clique no ícone ativar o Cloud Shell. Fig. 2.59: Excluir cluster Kubernetes via Cloud Shell - ETAPA 1 E execute o comando para excluir o cluster kubernetes gcp. gcloud container clusters delete kubernetes-gcp --zone us-central1-c 101 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.60: Excluir cluster Kubernetes via Cloud Shell - ETAPA 2 Confirme a partir das teclas Y e Enter. Fig. 2.61: Excluir cluster Kubernetes via Cloud Shell - ETAPA 3 Aguarde a exclusão até aparecer a palavra done. 102 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.62: Excluir cluster Kubernetes via Cloud Shell - ETAPA 4 Lab 2.5 - Criar Cluster Kubernetes Google GKE Neste laboratório vamos aprender como criar um cluster Kubernetes usando o provedor de cloud Google Cloud Platform. Configurar credenciais para Google GKE Para começar selecione Cloud Credentials e depois clique no botão Create. Fig. 2.63: Configurar credenciais para Google GKE - ETAPA 1 Em seguida clique no ícone Google. 103 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.64: Configurar credenciais para Google GKE - ETAPA 2 Para carregar as credenciais a partir da chave clique no botão Read from File. Fig. 2.65: Configurar credenciais para Google GKE - ETAPA 3 Selecione a partir da sua máquina o arquivo de chave cluster1. 104 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.66: Configurar credenciais para Google GKE - ETAPA 4 Após carregar o arquivo de chave clique no botão Create para continuar. Fig. 2.67: Configurar credenciais para Google GKE - ETAPA 5 Repita os passos para adicionar as credenciais usando o arquivo de chave cluster2. 105 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.68: Configurar credenciais para Google GKE - ETAPA 6 Criar Cluster Kubernetes Google GKE Para criar um cluster Google GKE, clique na opção Clusters e depois do botão Create. Fig. 2.69: Criar Cluster Kubernetes Google GKE - ETAPA 1 Em seguida clique no ícone Google GKE. 106 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.70: Criar Cluster Kubernetes Google GKE - ETAPA 2 Na caixa Cluster Name digite cluster1-gke. Fig. 2.71: Criar Cluster Kubernetes Google GKE - ETAPA 3 Antes de continuar alterne para o painel da GCP, e copie o ID do cluster1. 107 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.72: Criar Cluster Kubernetes Google GKE - ETAPA 4 Retornando ao painel do Rancher, digite na caixa Google ProjectID o ID do cluster1. Selecione caixa Cloud Credentials cluster1 e em seguida clique no botão Next: Configure Cluster para continuar. Fig. 2.73: Criar Cluster Kubernetes Google GKE - ETAPA 5 Em Location Type vamos utilizar a zona us-central1-c. Para continuar clique no botão Configure Cluster. 108 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.74: Criar Cluster Kubernetes Google GKE - ETAPA 6 Em Cluster Options vamos selecionar na caixa Kubernetes Options, a versão do Kubernetes e na parte de segurança vamos selecionar: • Network Policy Config • Network Policy for Nodes • Project Network Isolation Fig. 2.75: Criar Cluster Kubernetes Google GKE - ETAPA 7 109 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Em** Cluster Addons** mantenha as opções Horizontal Pod Autoscaling e HTTP Load Balancing selecionadas. Fig. 2.76: Criar Cluster Kubernetes Google GKE - ETAPA 8 Em Node Details vamos selecionar: • Imagem Type: Ubuntu with Docker. • Machine Type: 2-highmem-2 que contem 2 vCPUs e 16 GB de RAM. Fig. 2.77: Criar Cluster Kubernetes Google GKE - ETAPA 9 Em Group Details, digite na caixa Name a palavra nodes e na na caixa Initial Node Count o valor 4. 110 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Para criar o cluster kubernetes, clique no botão Create. Fig. 2.78: Criar Cluster Kubernetes Google GKE - ETAPA 10 E aguarde o provisionamento do cluster. Fig. 2.79: Criar Cluster Kubernetes Google GKE - ETAPA 11 Quando status aparecer Active, clique no botão Explore para visualizar os recursos de seu novo cluster. 111 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.80: Criar Cluster Kubernetes Google GKE - ETAPA 12 Fig. 2.81: Criar Cluster Kubernetes Google GKE - ETAPA 13 Lab 2.6 - Criar Cluster Kubernetes EKS Neste laboratório vamos aprender como criar um cluster Kubernetes usando o provedor de cloud AWS. Criar usuário e gerar chaves na AWS Logue em sua conta na AWS e acesse a área de IAM. Em seguida clique em Usuários ao lado esquerdo da tela e depois no botão Adicionar usuários. 112 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.82: Criar usuário e gerar chaves na AWS - ETAPA 1 Na caixa Nome de usuário, digite suporte-rancher e no tipo de acesso selecione Chave de acesso: cesso programático. Para continuar clique no botão Próximo: Permissões. Fig. 2.83: Criar usuário e gerar chaves na AWS - ETAPA 2 Em seguida vamos selecione a opção Anexar políticas existentes de forma direta. 113 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.84: Criar usuário e gerar chaves na AWS - ETAPA 3 E na lista de políticas vamos selecionar AdministratorAccess. Para continuar clique no botão Próximo: Tags. Fig. 2.85: Criar usuário e gerar chaves na AWS - ETAPA 4 Digite na caixa Chave, a palavra curso e na caixa Valor a palavra rancher. Para continuar clique no botão Próximo: Revisar. 114 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.86: Criar usuário e gerar chaves na AWS - ETAPA 5 Para finalizar a criação do usuário faça uma revisão nas informações, em seguida clique no botão Criar usuário. Fig. 2.87: Criar usuário e gerar chaves na AWS - ETAPA 6 Para exibir a chave de acesso secreta clique no link Exibir. 115 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.88: Criar usuário e gerar chaves na AWS - ETAPA 7 Para copiar o ID da chave de acesso clique no ícone que são duas folhas para copiar a chave. Fig. 2.89: Criar usuário e gerar chaves na AWS - ETAPA 8 Para copiar a chave de acesso secreta, selecione a mesma para realizar a cópia. 116 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.90: Criar usuário e gerar chaves na AWS - ETAPA 9 Configurar credencias para Amazon EKS Para criar credenciais para AWS retorne a área de Cluster Management e clique em Cloud Credentials. Fig. 2.91: Configurar credencias para Amazon EKS - ETAPA 1 Em seguida clique no botão Create. 117 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.92: Configurar credencias para Amazon EKS - ETAPA 2 Na lista de provedores selecione o ícone AWS Amazon. Fig. 2.93: Configurar credencias para Amazon EKS - ETAPA 3 Preencha as seguinte informações: • • • • Name: cluster-eks Access Key: Digite ou cole a sua Access Key da conta suporte-rancher SecretKey: Digite ou cole a sua SecretKey da conta suporte-rancher Default Region: us-east-1 Para finalizar clique no botão Create. 118 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.94: Configurar credencias para Amazon EKS - ETAPA 4 Criar Cluster Kubernetes Amazon EKS Para criar um cluster na AWS clique na opção Clusters. Fig. 2.95: Criar Cluster Kubernetes Amazon EKS - ETAPA 1 Em seguida clique no botão Create. 119 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.96: Criar Cluster Kubernetes Amazon EKS - ETAPA 2 Selecione o ícone Amazon EKS. Fig. 2.97: Criar Cluster Kubernetes Amazon EKS - ETAPA 3 Preencha e selecione as seguinte informações: • Cluster Name: cluster-eks • Region: us-east-1 • Cloud Credentials: cluster-eks Para continuar clique no botão Next: Configure Cluster. 120 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.98: Criar Cluster Kubernetes Amazon EKS - ETAPA 4 Na área de Network vamos selecionar Public Access e Standard VPC.Para continuar clique no botão Next: Select Security Groupr. Fig. 2.99: Criar Cluster Kubernetes Amazon EKS - ETAPA 5 Em Cluster Options vamos selecionar a versão do cluster Kubernetes na caixa Kubernetes Version. Em seguida clique no botão Next: Configure Network para continuar. 121 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.100: Criar Cluster Kubernetes Amazon EKS - ETAPA 6 Em Node Details não selecione nenhuma opção aceitando os valores padrão. Fig. 2.101: Criar Cluster Kubernetes Amazon EKS - ETAPA 7 Em Group Details digite a palavra nodes na caixa Node Group Name, e mantenha o valor 2 para quantidade de nós. 122 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Para criar o seu cluster clique no botão Create. Fig. 2.102: Criar Cluster Kubernetes Amazon EKS - ETAPA 8 E aguarde o provisionamento do cluster. Fig. 2.103: Criar Cluster Kubernetes Amazon EKS - ETAPA 9 Quando status aparecer Active, clique no botão Explore para visualizar os recursos de seu novo cluster. 123 2. Gerenciar e Importar Clusters Kubernetes Caique Araujo / caiquearaujoac@gmail.com Fig. 2.104: Criar Cluster Kubernetes Amazon EKS - ETAPA 10 Fig. 2.105: Criar Cluster Kubernetes Amazon EKS - ETAPA 11 Caique Araujo / caiquearaujoac@gmail.com 3 Gerenciar Aplicações no Rancher Competências da Aula • • • • • • Entenda os aplicativos e o Marketplace Gerenciar aplicativos com o Helm Instalar aplicação nfs-subdir-external-provisioner Instalar aplicação OpenLDAP Popular base LDAP Instalação do Longhorn Apps & Marketplace O Rancher possui repositórios pré-carregados que são implantados como Charts do Helm. A partir de cada Cluster é possível adicionar gerenciar repositórios e aplicações do Helm, a partir de repositórios. Os Charts do Helm são gerenciados usando o Apps & Marketplace, que se comporta como catálogo para importar pacotes de Charts Helm e repositórios. 124 125 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.1: Catálogo de aplicações no Rancher O que é Helm? Helm é um gerenciador de pacotes para Kubernetes. Ele permite que você instale aplicativos facilmente, atualize-os e compartilhe seus aplicativos com outros usuários do Kubernetes. Helm também torna mais fácil para você gerenciar várias aplicações Kubernetes em um único cluster. Lab 3.1 - Gerenciar Repositórios no Rancher Neste laboratório vamos aprender como adicionar novos repositórios Helm através do painel do Rancher. Adicionar repositório nfs-subdir-external-provisioner Uma vez logado no Rancher, clique no cluster cluster1-gke. 126 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.2: Adicionar repositório NFS - ETAPA 1 Em seguida selecione a opção Repositories em Apps & Marketplace. Fig. 3.3: Adicionar repositório NFS - ETAPA 2 Antes de adicionar um novo repositório vamos acessar o site ArtifactHUB, que é um repositório publico de aplicações para Kubernetes. https://artifacthub.io/ Na caixa de pesquisas, digite nfs-subdir-external-provisioner e tecle ENTER. 127 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.4: Adicionar repositório NFS - ETAPA 3 Selecione a pacote nfs-subdir-external-provisioner do user viceice. Fig. 3.5: Adicionar repositório NFS - ETAPA 4 Para exibir as instruções de instalação do pacote, clique no botão INSTALL. 128 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.6: Adicionar repositório NFS - ETAPA 5 Na caixa Add repository, selecione e copie o endereço do repositório. Fig. 3.7: Adicionar repositório NFS - ETAPA 6 Retorne ao Rancher e clique no botão Create para adicionar um novo repositório. 129 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.8: Adicionar repositório NFS - ETAPA 7 Preencha as seguintes informações: • Name: nfs-subdir-external-provisioner • Index URL: cole o endereço de repositório que você copiou do site ArtifactHUB. Fig. 3.9: Adicionar repositório NFS - ETAPA 8 Role até o final da página e clique no botão Create para finalizar. 130 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.10: Adicionar repositório NFS - ETAPA 9 Verifique se o repositório nfs-subdir-external-provisioner foi criado corretamente. Fig. 3.11: Adicionar repositório NFS - ETAPA 10 Adicionar OpenLDAP Retorne ao ArtifactHUB para pesquisar openldap e tecle ENTER. 131 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.12: Adicionar repositório OpenLDAP - ETAPA 1 Selecione a pacote openldap do user jp-gouin e repo helm-openldap-ha. Fig. 3.13: Adicionar repositório OpenLDAP - ETAPA 2 Para exibir as instruções de instalação do pacote, clique no botão INSTALL. 132 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.14: Adicionar repositório OpenLDAP - ETAPA 3 Na caixa Add repository, selecione e copie o endereço do repositório. Fig. 3.15: Adicionar repositório OpenLDAP - ETAPA 4 Retorne ao Rancher e clique no botão Create para adicionar um novo repositório. 133 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.16: Adicionar repositório OpenLDAP - ETAPA 5 Preencha as seguintes informações: • Name: helm-openldap • Index URL: cole o endereço de repositório que você copiou do site ArtifactHUB. Fig. 3.17: Adicionar repositório OpenLDAP - ETAPA 6 Role até o final da página e clique no botão Create para finalizar. 134 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.18: Adicionar repositório OpenLDAP - ETAPA 7 Verifique se o repositório helm-openldap foi criado corretamente. Fig. 3.19: Adicionar repositório OpenLDAP - ETAPA 8 Lab 3.2 - Instalar aplicação nfs-subdir-external-provisioner no Rancher Neste laboratório vamos aprender como instalar o pacote nfs-subdir-external-provisioner. O objetivo é compartilhar o diretório /nfs da instância nfs-server que esta na GCP, e assim disponibilizar um storage distribuído em nosso cluster. Obtendo IP externo da instância nfs-server Acesse a lista de instâncias no painel da GCP e inicie a instância nfs-server, através da opção INICIAR/RETOMAR. 135 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.20: Copiar IP Externo da instância nfs-server - ETAPA 1 Confirme a inicialização da instância, através do botão INICIAR. Fig. 3.21: Copiar IP Externo da instância nfs-server - ETAPA 2 Copie o IP público da instância nfs-server através da coluna IP externo. 136 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.22: Copiar IP Externo da instância nfs-server - ETAPA 3 Instalar Aplicação nfs-subdir-external-provisioner Retorne ao painel do Rancher e clique na opção Charts. Fig. 3.23: Instalar aplicação nfs-subdir-external-provisioner - ETAPA 1 Pesquise nfs na caixa ao lado direito da tela, e selecione o pacote nfs-subdir-externalprovisioner. 137 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.24: Instalar aplicação nfs-subdir-external-provisioner - ETAPA 2 Para continuar a instalação clique no botão Install. Fig. 3.25: Instalar aplicação nfs-subdir-external-provisioner - ETAPA 3 Selecione o namespace detault e digite o nome nfs-subdir-external-provisioner. Selecione a opção Customize Helm options before install e clique no botão Next para continuar. 138 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.26: Instalar aplicação nfs-subdir-external-provisioner - ETAPA 4 No bloco de configuração nfs vamos alterar as seguintes informações: • path: /nfs • reclaimPolicy: Retain • server: Digite ou cole o IP externo da instância nfs-server Clique no botão Next para continuar. Fig. 3.27: Instalar aplicação nfs-subdir-external-provisioner - ETAPA 5 Para iniciar a instalação do pacote clique no botão Install. 139 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.28: Instalar aplicação nfs-subdir-external-provisioner - ETAPA 6 Após a instalação exibir a mensagem SUCCESS clique no ícone para fechar o terminal. Fig. 3.29: Instalar aplicação nfs-subdir-external-provisioner - ETAPA 6 Para confirmar que o pacote nfs-subdir-external-provisioner foi instalado corretamente, clique em Installed Apps. 140 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.30: Instalar aplicação nfs-subdir-external-provisioner - ETAPA 7 Na área de Storage é possivel observer que um novo StorageClass de nome nfs-client foi criado em nosso cluster. Fig. 3.31: Instalar aplicação nfs-subdir-external-provisioner - ETAPA 8 Lab 3.3 - Instalar aplicação OpenLDAP no Rancher Neste laboratório vamos aprender como instalar o pacote openldap no cluster Kubernetes, para ser utilizando como backend de autenticação no Rancher. Para instalar o pacote do Openldap, clique na opção Charts. Pesquise e selecione openldap. 141 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.32: Instalar aplicação OpenLDAP - ETAPA 1 Para continuar a instalação clique no botão Install. Fig. 3.33: Instalar aplicação OpenLDAP - ETAPA 2 Selecione o namespace detault e digite o nome openldap. Selecione a opção Customize Helm options before install e clique no botão Next para continuar. 142 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.34: Instalar aplicação OpenLDAP - ETAPA 3 No bloco de configuração persistence vamos alterar as seguintes informações: persistence: accessModes: - ReadWriteOnce enabled: true size: 8Gi storageClass: nfs-client Fig. 3.35: Instalar aplicação OpenLDAP - ETAPA 4 No bloco de configuração service, mude para LoadBalancer o valor da chave type. Clique no botão Next para continuar. 143 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.36: Instalar aplicação OpenLDAP - ETAPA 5 Para iniciar a instalação do pacote clique no botão Install. Fig. 3.37: Instalar aplicação OpenLDAP - ETAPA 6 Após a instalação exibir a mensagem SUCCESS clique no ícone para fechar o terminal. 144 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.38: Instalar aplicação OpenLDAP - ETAPA 7 Para confirmar que o pacote openldap foi instalado corretamente, clique em Installed Apps. Fig. 3.39: Instalar aplicação OpenLDAP - ETAPA 8 Na área de Storage -> PersistentVolumeClaims é possível observar que agora temos 3 novos PVCs, criada pela aplicação openldap. 145 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.40: Instalar aplicação OpenLDAP - ETAPA 9 Na área de Storage -> PersistentVolume é possível observar que agora temos 3 novos PVs, criada pela aplicação openldap. Fig. 3.41: Instalar aplicação OpenLDAP - ETAPA 10 Lab 3.4 - Popular base LDAP Neste laboratório vamos aprender como popular a base LDAP com grupos e usuários. Antes de popular a base LDAP, é preciso anotar/copiar o IP do serviço LoadBalancer do openldap, através do menu Service Discovery -> Services. 146 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.42: Popular base LDAP - ETAPA 1 Anote ou copie também a senha do administrator da base LDAP, através do menu Storage -> Secrets -> openldap. Fig. 3.43: Popular base LDAP - ETAPA 2 Clique no link Copy na linha referente a variável LDAP_ADMIN_PASSWORD. 147 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.44: Popular base LDAP - ETAPA 3 Através da instância custom, abra uma conexão SSH! Uma vez logado na instância, instale o pacote cliente do OpenLDAP: sudo apt install ldap-utils -y Armazene na variável LDAP_IP o ip do serviço loadbalancer do openldap. export LDAP_IP=<IP_DO_LOADBALANCER> Exemplo: export LDAP_IP=104.154.192.181 Armazene na variável LDAP_PORT a porta 389 do openldap. export LDAP_PORT=389 Armazene na variável LDAP_PASSWORD o valor do secret LDAP_ADMIN_PASSWORD. 148 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com export LDAP_PASSWORD=<CONTEUDO_DO_SECRET_LDAP_ADMIN_PASSWORD> Exemplo: export LDAP_PASSWORD=Not@SecurePassw0rd Para testar a comunicação com o servidor LDAP, vamos utilizar o comando ldapsearch: ldapsearch -x -LLL -H ldap://$LDAP_IP:$LDAP_PORT -b dc=example,dc=org -D cn=admin,dc= example,dc=org -w $LDAP_PASSWORD Resultado esperado: dn: dc=example,dc=org objectClass: top objectClass: dcObject objectClass: organization o: Example Inc. dc: example dn: cn=admin,dc=example,dc=org objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: e1NTSEF9MmNCb0FQb3lyZ2ltc3Zad1NsaFdBNEJZWFBBcVFSMSs= Obtenha do Github da 4Linux, a pasta 543 que possui o arquivo ldap-base.ldif. sudo apt install git -y git clone https://github.com/4linux/543 Visualizar o arquivo ldap-base.ldif no diretório 543/provision/ansible/files/, responsável em armazenar grupos e usuários que vamos adicionar em nosso servidor LDAP: cat 543/provision/ansible/files/ldap-base.ldif 149 Caique Araujo / caiquearaujoac@gmail.com Resultado esperado: dn: ou=Users,dc=example,dc=org objectClass: organizationalUnit ou: Users dn: ou=Groups,dc=example,dc=org objectClass: organizationalUnit ou: Groups dn: uid=admin,ou=Users,dc=example,dc=org objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: Admin sn: Linux userPassword: {SSHA}nVPnjhm1xR8aRA03payFZfVS7KykeHXk loginShell: /bin/bash uidNumber: 1010 gidNumber: 1010 homeDirectory: /home/admin dn: uid=developer,ou=Users,dc=example,dc=org objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: Developer sn: Linux userPassword: {SSHA}nVPnjhm1xR8aRA03payFZfVS7KykeHXk loginShell: /bin/bash uidNumber: 1020 gidNumber: 1020 homeDirectory: /home/developer dn: uid=suporte,ou=Users,dc=example,dc=org objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: Suporte sn: Linux userPassword: {SSHA}nVPnjhm1xR8aRA03payFZfVS7KykeHXk loginShell: /bin/bash uidNumber: 1030 gidNumber: 1030 homeDirectory: /home/suporte dn: uid=analista,ou=Users,dc=example,dc=org objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: Analista sn: Linux userPassword: {SSHA}nVPnjhm1xR8aRA03payFZfVS7KykeHXk loginShell: /bin/bash uidNumber: 1040 gidNumber: 1040 homeDirectory: /home/analista dn: cn=devops,ou=Groups,dc=example,dc=org objectClass: posixGroup cn: DevOps 3. Gerenciar Aplicações no Rancher 150 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com gidNumber: memberUid: memberUid: memberUid: memberUid: 1080 developer suporte admin analista Para adicionar os registros do arquivo o comando ldapadd: ldap-base.ldif em nosso servidor LDAP, vamos utilizar ldapadd -x -H ldap://$LDAP_IP:$LDAP_PORT -D cn=admin,dc=example,dc=org -w $LDAP_PASSWORD -f 543/provision/ansible/files/ldap-base.ldif Resultado esperado: adding new entry "ou=Users,dc=example,dc=org" adding new entry "ou=Groups,dc=example,dc=org" adding new entry "uid=admin,ou=Users,dc=example,dc=org" adding new entry "uid=developer,ou=Users,dc=example,dc=org" adding new entry "uid=suporte,ou=Users,dc=example,dc=org" adding new entry "uid=analista,ou=Users,dc=example,dc=org" adding new entry "cn=devops,ou=Groups,dc=example,dc=org" Verifique se a base de nosso servidor LDAP, contem novos registros: ldapsearch -x -LLL -H ldap://$LDAP_IP:$LDAP_PORT -b dc=example,dc=org -D cn=admin,dc= example,dc=org -w $LDAP_PASSWORD | grep dn Resultado esperado: dn: dn: dn: dn: dn: dn: dn: dn: dn: dc=example,dc=org cn=admin,dc=example,dc=org ou=Users,dc=example,dc=org ou=Groups,dc=example,dc=org uid=admin,ou=Users,dc=example,dc=org uid=developer,ou=Users,dc=example,dc=org uid=suporte,ou=Users,dc=example,dc=org uid=analista,ou=Users,dc=example,dc=org cn=devops,ou=Groups,dc=example,dc=org 151 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Longhorn Longhorn é um sistema de armazenamento em bloco distribuído para Kubernetes. Quando combinado com o Rancher, o Longhorn torna fácil, rápido e confiável a implantação de armazenamento de bloco persistente altamente disponível em seu ambiente Kubernetes. Lab 3.5 - Instalar Longhorn no Rancher Neste laboratório vamos aprender como instalar o Longhorn, que sera responsável em fornecer storage de bloco distribuído para Kubernetes. Instalar Longhorn no Rancher Uma vez conectado no painel do Rancher selecione o cluster cluster1-gke. Fig. 3.45: Instalar Longhorn no Rancher - ETAPA 1 Em seguida clique no botçao Cluster Tools, localizado para parte inferior esquerda da tela. Clique no botão Install da aplicação Longhorn. 152 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.46: Instalar Longhorn no Rancher - ETAPA 2 Selecione em Install into Project, o projeto Detault e selecione a opção Customize Helm options before install. Clique no botão Next para continuar. Fig. 3.47: Instalar Longhorn no Rancher - ETAPA 3 Em Longhorn Default Settings, selecione a opção Customize Default Settings. 153 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.48: Instalar Longhorn no Rancher - ETAPA 4 E na caixa Backup Target informe: nfs://IP_EXTERNO_DA_INSTÂNCIA_NFS-SERVER:/backups Fig. 3.49: Instalar Longhorn no Rancher - ETAPA 5 Para você copiar o IP externo da instância nfs-server, alterne para o painel da GCP e copie o IP. 154 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.50: Instalar Longhorn no Rancher - ETAPA 6 Retorne ao Rancher e clique na opção Services ans Load Balancing. Fig. 3.51: Instalar Longhorn no Rancher - ETAPA 7 E troque a opção ClusterIP para LoadBalancer. Para continuar clique no botão Next. 155 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.52: Instalar Longhorn no Rancher - ETAPA 8 Para iniciar a instalação do Longhorn clique no botão Install. Fig. 3.53: Instalar Longhorn no Rancher - ETAPA 9 Após a instalação exibir a mensagem SUCCESS clique no ícone para fechar o terminal. 156 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.54: Instalar Longhorn no Rancher - ETAPA 10 Para validar a instalação do Longhorn, verifique se existe um novo StorageClass chamado longhorn. Fig. 3.55: Instalar Longhorn no Rancher - ETAPA 11 Acessando o painel do Longhorn Primeiro selecione a opção Longhorn ao lado esquerdo da tela. 157 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.56: Acessando o painel do Longhorn - ETAPA 1 Em seguida clique no link Manage storage system via UI. Fig. 3.57: Acessando o painel do Longhorn - ETAPA 2 Como resultado final sera possível visualizar o painel do Longhorn. 158 3. Gerenciar Aplicações no Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 3.58: Acessando o painel do Longhorn - ETAPA 3 Caique Araujo / caiquearaujoac@gmail.com 4 Gerenciar Autenticação e CLI Competências da Aula • • • • • • Gerenciar autenticação Local no Rancher Gerenciar autenticação LDAP no Rancher Gerenciar autorização no Rancher Kubectl Shell Acesso remoto via kubectl Acesso remoto via Rancher CLI Gerenciar Autenticação no Rancher O Rancher possui um recurso de autenticação centralizada de usuário, permitindo acesso a qualquer um dos seus clusters Kubernetes. Por padrão o Rancher realiza a autenticação local, sendo possível utilizar outros servidores de autenticação, como por exemplo LDAP, ActiveDiretory, Keycloak, entre outros. 159 160 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.1: Lista de provedores de autenticação no Rancher Por padrão o Rancher utiliza a autenticação local, até que você configure um servidor de autenticação externa. Lab 4.1- Gerenciar autenticação Local e autorização no Rancher Neste laboratório vamos aprender como adicionar um usuário local no Rancher, e configurar sua autorização em um cluster Kubernetes. Autenticação Uma vez logado no painel do Rancher, selecione User & Authentication em CONFIGURATION. 161 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.2: Gerenciar autenticação Local no Rancher - ETAPA 1 Ao lado esquerdo da tela, selecione a opção Users e em seguida o botão Create. Fig. 4.3: Gerenciar autenticação Local no Rancher - ETAPA 2 Preencha as seguintess informações para o novo usuário: • • • • • Username: aluno Display Name: Aluno Rancher Description: Conta local do usuário Aluno New Password: 4linux Confirm Password: 4linux 162 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.4: Gerenciar autenticação Local no Rancher - ETAPA 3 Logo abaixo na parte de Global Permissions selecione a opção User-Base e depois clique no botão Create. Fig. 4.5: Gerenciar autenticação Local no Rancher - ETAPA 4 Verifique se o usuário aluno foi adicionado como uma conta local no Rancher. 163 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.6: Gerenciar autenticação Local no Rancher - ETAPA 5 Autorização Para definir as permissões de acesso do novo usuário no cluster, antes é preciso selecionar o cluster1-gke. Fig. 4.7: Gerenciar autorização no Rancher - ETAPA 1 Ao lado esquerdo procure RBAC e clique em Cluster Members. 164 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.8: Gerenciar autorização no Rancher - ETAPA 2 Clique no botão Add para adicionar um novo usuário como membro do cluster. Fig. 4.9: Gerenciar autorização no Rancher - ETAPA 3 Na caixa Select Member digite aluno e depois selecione o Aluno Rancher. 165 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.10: Gerenciar autorização no Rancher - ETAPA 4 Na parte de Cluster Permissions selecione Member e depois clique no botão Create. Fig. 4.11: Gerenciar autorização no Rancher - ETAPA 5 Verifique se o Aluno Rancher aparece como um novo membro de nosso cluster. 166 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.12: Gerenciar autorização no Rancher - ETAPA 6 Testando login de usuário local Para testar se o usuário aluno tem permissão em nosso cluster, realiza o Log Out do usuário admin. Fig. 4.13: Testando login de usuário local - ETAPA 1 Na tela de login informe aluno e a senha padrão 4linux. 167 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.14: Testando login de usuário local - ETAPA 2 Uma vez logado no painel do Rancher, selecione em EXPLORE CLUSTER o cluster cluster1-gke. Fig. 4.15: Testando login de usuário local - ETAPA 3 Como resultado final o novo usuário aluno agora tem acesso aos recursos do cluster cluster1gke. 168 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.16: Testando login de usuário local - ETAPA 4 Lab 4.2 - Gerenciar autenticação LDAP e autorização no Rancher Neste laboratório vamos aprender como conectar a uma base de usuários em um servidor LDAP, e configurar autorização em um cluster Kubernetes. Autenticação LDAP Para começar faça Log Out da conta do usuário aluno e Login com a conta do usuário admin. Fig. 4.17: Gerenciar autenticação LDAP no Rancher - ETAPA 1 169 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Em seguida selecione em CONFIGURATION a opção Users & Authentication. Fig. 4.18: Gerenciar autenticação LDAP no Rancher - ETAPA 2 Para configurar uma autenticação externa clique em Auth Provider ao lado esquerdo da tela. Fig. 4.19: Gerenciar autenticação LDAP no Rancher - ETAPA 3 Na lista de Authentication Providers selecione OpenLDAP. 170 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.20: Gerenciar autenticação LDAP no Rancher - ETAPA 4 Digite na caixa Hostname/IP, o ip do serviço loadbalancer do openldap e na caixa Port digite o valor 389. Fig. 4.21: Gerenciar autenticação LDAP no Rancher - ETAPA 5 Em seguida informe os seguintes valores para configuração do servidor openldap: • • • • • Service Account Distinguished Name: cn=admin,dc=example,dc=org Service Account Password: Cole aqui o valor do secre LDAP_ADMIN_PASSWORD User Search Base: ou=Users,dc=example,dc=org Group Search Base: ou=Groups,dc=example,dc=org Object Class: posixGroup 171 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.22: Gerenciar autenticação LDAP no Rancher - ETAPA 6 Não esqueça de adicionar na caixa Group Member Mapping Attribute o valor memberUid. Fig. 4.23: Gerenciar autenticação LDAP no Rancher - ETAPA 7 Para testar autenticação digite admin na caixa Username e 4linux na caixa Password. Clique no botão Enable para finalizar a configuração. 172 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.24: Gerenciar autenticação LDAP no Rancher - ETAPA 8 Para selecionar quais usuários da base LDAP poderão logar, vamos selecionar a opção** Allow members of clusters and projects, plus authorized users & groups**. Fig. 4.25: Gerenciar autenticação LDAP no Rancher - ETAPA 9 Ao lado direito da tela digite analista na caixa Add Member e selecione Analista OpenLDAP User. 173 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.26: Gerenciar autenticação LDAP no Rancher - ETAPA 10 Repita o mesmo passo agora com usuário developer. Fig. 4.27: Gerenciar autenticação LDAP no Rancher - ETAPA 11 Após adicionar os usuários da base LDAPl clique no botão Save. 174 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.28: Gerenciar autenticação LDAP no Rancher - ETAPA 12 Autorização no Cluster O próximo passo é configurar o acesso ao grupo de usuários. Selecione a opção Groups ao lado esquerdo da tela. Fig. 4.29: Gerenciar autorização no Rancher - ETAPA 1 175 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Para definir acesso a grupo de usuários clique no botão Assign Global Roles. Fig. 4.30: Gerenciar autorização no Rancher - ETAPA 2 Na caixa Select Member digite devops e selecione o grupo DevOps OpenLDAP Group. Fig. 4.31: Gerenciar autorização no Rancher - ETAPA 3 Em Global Permissions seleciona a permissão User-Base. 176 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.32: Gerenciar autorização no Rancher - ETAPA 4 Role até o final da página e clique no botão Save para concluir essa configuração. Fig. 4.33: Gerenciar autorização no Rancher - ETAPA 5 Verifique se o grupo devops aparece com a função User Base. 177 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.34: Gerenciar autorização no Rancher - ETAPA 6 Retorne ao cluster cluster1-gke e e selecione a opção Cluster Members e depois no botão Add. Fig. 4.35: Gerenciar autorização no Rancher - ETAPA 7 Dígite analista na caixa Select Member e selecione Analista OpenLDAP User. 178 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.36: Gerenciar autorização no Rancher - ETAPA 8 Em Cluster Permissions selecione Member e clique no botão Create. Fig. 4.37: Gerenciar autorização no Rancher - ETAPA 9 Verifique seu usuário analista da base LDAP aparece com a função Cluster Member. Repita os mesmos passos adicionando o usuário developer. 179 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.38: Gerenciar autorização no Rancher - ETAPA 10 Testando login de usuário LDAP Faça Log Out com usuário de admin e login com usuário analista e senha 4linux. É preciso clicar no botão Log in with OpenLDAP. Fig. 4.39: Testando login de usuário LDAP - ETAPA 1 Na área do EXPLORE CLUSTER selecione o cluster cluster1-gke. 180 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.40: Testando login de usuário LDAP - ETAPA 2 Para começar a trabalhar com os recursos do cluster é preciso criar um novo projeto e o novo namespace. Clique em Projects/Namespaces ao lado esquerdo da tela. Fig. 4.41: Testando login de usuário LDAP - ETAPA 3 181 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Criando projetos e namespaces Para começar vamos criar um projeto clique no botão Create Project. Fig. 4.42: Criando projetos - ETAPA 1 Na caixa Name digite o nome devops e depois clique no botão Create. Fig. 4.43: Criando projetos - ETAPA 2 Dentro do projeto devops vamos criar o novo namespace, a partir do botão Create Namespace. 182 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.44: Criando namespaces - ETAPA 1 Na caixa Name digite o nome devops e depois clique no botão Create. Fig. 4.45: Criando namespaces - ETAPA 2 Pronto! Agora você possui um projeto e o namespace dentro do cluster Kubernetes. 183 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.46: Criando namespaces - ETAPA 3 Kubectl kubectl é um utilitário para gerenciar aplicativos Kubernetes. Ele permite que você crie, altere e exclua aplicativos Kubernetes e também fornece comandos para gerenciar os componentes do Kubernetes. Lab 4.3 - Gerenciar recursos através do Kubectl Shell Neste laboratório vamos aprender como gerenciar recursos do cluster Kubernetes através do Kubectl Shell. Antes de gerenciar recursos do cluster via kubectl, vamos clicar na opção Deployment ao lado esquerdo da tela. Fig. 4.47: Gerenciar recursos através do Kubectl Shell - ETAPA 1 184 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Em seguida clique no ícone do Kubectl Shell que fica na parte superior ao lado direito da tela. Fig. 4.48: Gerenciar recursos através do Kubectl Shell - ETAPA 2 Verifique um terminal foi aberto na parte inferior da tela, e é nele onde vamos executar os comandos via kubectl. Fig. 4.49: Gerenciar recursos através do Kubectl Shell - ETAPA 3 Liste os deployments no cluster através do seguinte comando: 185 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com kubectl get deploy Resultado esperado: Fig. 4.50: Gerenciar recursos através do Kubectl Shell - ETAPA 4 É possivel verificar que o usuário analista não possui permissão no namespace default! Vamos criar um alias para o comando kubectl, deixando como padrão o acesso ao namespace devops. alias kubectl='kubectl -n devops' Tente listar novamente os deployments e veja o resultado: kubectl get deploy Fig. 4.51: Gerenciar recursos através do Kubectl Shell - ETAPA 5 Crie um deploy com 2 replicas usando a imagem do nginx e um serviço do ripo NodePort na porta 80: 186 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com kubectl create deploy nginx --image=nginx --replicas=2 kubectl expose deploy nginx --type=NodePort --port 80 --target-port 80 Resultado esperado: Fig. 4.52: Gerenciar recursos através do Kubectl Shell - ETAPA 6 Para acessar aplicação em Nginx, clique na porta gerada pelo serviço NodePort, através da coluna Endpoints. 187 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.53: Gerenciar recursos através do Kubectl Shell - ETAPA 7 Verifique se aplicação Nginx pode ser acessar em uma porta criada pelo serviço NodePort. Fig. 4.54: Gerenciar recursos através do Kubectl Shell - ETAPA 8 Para fechar o terminal clique no ícone que é um X, ao lado do nome cluster1-gke. 188 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.55: Gerenciar recursos através do Kubectl Shell - ETAPA 9 Lab 4.4 - Acesso externo através do Kubectl Neste laboratório vamos aprender como instalar e configurar o kubectl em uma máquina remota, permitindo o gerenciamento de recursos do cluster Kubernetes. Para começar vamos realizar o download do arquivo Kubeconfig, através do ícone que fica ao lado da lupa na parte superior da tela. Fig. 4.56: Configurar acesso externo através do kubectl - ETAPA 1 Feito o download, abra o arquivo em algum editor de texto em sua máquina fisica. 189 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.57: Configurar acesso externo através do kubectl - ETAPA 2 Vamos alterar o arquivo, adicionando abaixo da linha cluster o namespace devops. 190 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.58: Configurar acesso externo através do kubectl - ETAPA 3 Não esqueça de copiar todo o conteúdo do arquivo! 191 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.59: Configurar acesso externo através do kubectl - ETAPA 4 Através da instância custom, abra uma conexão SSH! Execute os comandos necessários para realizar a instalação da ferramenta kubectl: curl -LO https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl chmod +x kubectl mkdir -p ~/.local/bin mv ./kubectl ~/.local/bin/kubectl Para testar a instalação execute o seguinte comando: 192 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com kubectl version Resultado esperado: Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:" cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08 T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"linux/amd64"} The connection to the server localhost:8080 was refused - did you specify the right host or port? O proximo passo é configurar as credenciais do usuário analista, através da criação da pasta .kube e o arquivo config. mkdir .kube vim .kube/config Tecle i para entrar no modo INSERT e cole o conteúdo do arquivo kubeconfig, onde você adicionou o namespace devops. - name: "rancher-kubernetes" cluster: server: "https://34.136.17.221/k8s/clusters/c-kn7gw" certificate-authority-data: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJwekNDQ\ VUyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQTdNUnd3R2dZRFZRUUtFeE5rZVc1aGJXbGoKY\ kdsemRHVnVaWEl0YjNKbk1Sc3dHUVlEVlFRREV4SmtlVzVoYldsamJHbHpkR1Z1WlhJdFkyRXdIa\ GNOTWpJdwpNekU1TURBek1UTTVXaGNOTXpJd016RTJNREF6TVRNNVdqQTdNUnd3R2dZRFZRUUtFe\ E5rZVc1aGJXbGpiR2x6CmRHVnVaWEl0YjNKbk1Sc3dHUVlEVlFRREV4SmtlVzVoYldsamJHbHpkR\ 1Z1WlhJdFkyRXdXVEFUQmdjcWhrak8KUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFpK1N4OTdJbkR6T\ WxBUXFpZnpqTmZuV2szNWZ5dk5rZVZkZEdReDAvSApQRzZpdnFjUDliR01jMmNBTzZ6MjV4RXBEW\ TFVcmxkTnhkMEEzZkU1UUtabm8wSXdRREFPQmdOVkhROEJBZjhFCkJBTUNBcVF3RHdZRFZSMFRBU\ UgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVOVBKTzNtSEFxY2ltb3FZeVlrRWgKZ0k0UWhZc3dDZ\ 1lJS29aSXpqMEVBd0lEU0FBd1JRSWdObUJsL3FqLzRScnljQnlJSzFwWFlsbExtcVFINmJoagpLe\ U5BeXByT0xyb0NJUURraDNFc0p5N1N5V2xaV3lSaFhNckdEaFVDb0djT2hSb1BXcnVkc1BLeWhRP\ T0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==" users: - name: "rancher-kubernetes" user: token: "kubeconfig-u-4k4hxzzv4lmgmhm: xfx7wt4btf2rcmdbj4bs4hprktk7xbf7w82czw52x8z2ffc4zcgfc6" contexts: - name: "rancher-kubernetes" context: user: "rancher-kubernetes" 193 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com cluster: "rancher-kubernetes" namespace: "devops" current-context: "rancher-kubernetes" Verifique se o usuário analista consegue listar os recursos do cluster, no namespace devops: kubectl get all Resultado esperado: NAME pod/nginx-6799fc88d8-6x424 pod/nginx-6799fc88d8-rzbc8 NAME service/nginx TYPE NodePort NAME deployment.apps/nginx READY 1/1 1/1 STATUS Running Running CLUSTER-IP 10.0.3.76 READY 2/2 EXTERNAL-IP <none> UP-TO-DATE 2 NAME replicaset.apps/nginx-6799fc88d8 RESTARTS 0 0 DESIRED 2 PORT(S) 80:31590/TCP AVAILABLE 2 CURRENT 2 AGE 6m16s 6m16s AGE 4m45s AGE 6m17s READY 2 AGE 6m17s Para remover o deployment e serviço do Nginx, execute o seguinte comando: kubectl delete deploy,service nginx Retorne ao panel do Rancher para verificar se os recursos foram removidos. 194 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Fig. 4.60: Configurar acesso externo através do kubectl - ETAPA 4 Rancher CLI Rancher CLI é um cliente de linha de comando para gerenciar e implantar aplicativos em um cluster Rancher. Ele pode ser usado para criar e gerenciar contêineres, aplicativos e serviços, bem como para realizar outras tarefas administrativas no cluster. Lab 4.5 - Gerenciar recursos através do Rancher CLI Neste laboratório vamos aprender como gerenciar recursos do cluster Kubernetes, através do Rancher CLI em uma máquina externa. Instalação Uma vez logado na instância custom, realize a instalação do binário do rancher através dos seguintes comandos: wget https://github.com/rancher/cli/releases/download/v2.6.4/rancher-linux-amd64-v2.6.4.tar .gz tar zxf rancher-linux-amd64-v2.6.4.tar.gz sudo cp rancher-v*/rancher /usr/local/bin/ E teste a instlação através do comando rancher rancher: 195 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Resultado esperado: Commands: apps, [app] prepended with "helm" can also be accurately catalog clusters, [cluster] context globaldns entries inspect kubectl login, [l] machines, [machine] multiclusterapps, [multiclusterapp mcapps mcapp] namespaces, [namespace] nodes, [node] projects, [project] ps server settings, [setting] ssh up wait project, multiClusterApp token kubeconfig token help, [h] one command Operations with apps. Uses helm. Flags described by helm documentation. Operations with catalogs Operations on clusters Operations for the context Operations on global DNS providers and View details of resources Run kubectl commands Login to a Rancher server Operations on machines Operations with multi-cluster apps Operations on namespaces Operations on nodes Operations on projects Show workloads in a project Operations for the server Show settings for the current server SSH into a node apply compose config Wait for resources cluster, app, Authenticate and generate new Shows a list of commands or help for Run 'rancher COMMAND --help' for more information on a command. Antes de realizar a comunicação com o cluster via binário do rancher, é preciso exportar em uma variável o endereço do cluster kubernetes: SERVER=$(grep server .kube/config | awk -F" " '{print $2}' | sed 's/"//g') Exporte também o token de acesso do usuário analista em uma variável. export TOKEN=$(grep token .kube/config | awk -F" " '{print $2}' | sed 's/"//g') Visualize o conteúdo das variáveis através do comando echo $SERVER ; echo $TOKEN echo: 196 4. Gerenciar Autenticação e CLI Caique Araujo / caiquearaujoac@gmail.com Resultado esperado: https://104.198.24.156/k8s/clusters/c-t5dxr kubeconfig-u-4k4hxzzv4lmgmhm:xfx7wt4btf2rcmdbj4bs4hprktk7xbf7w82cz**namespace** w52x8z2ffc4zcgfc6 Para realizar o login no binário do rancher, execute o comando rancher login, informando a variável que armazena o endereço do cluster e a variável que armazena o token de acesso: rancher login $SERVER --token $TOKEN Texto Signature Algorithm: ECDSA-SHA256 30:45:02:20:14:80:7c:15:33:ee:04:2f:5a:1e:c1:63:d1:79: 2d:03:3a:3c:e5:2b:15:29:2a:3c:b6:cb:b5:61:28:e9:ba:42: 02:21:00:f8:f7:82:cd:1e:7e:b2:09:c6:5d:d9:a6:a3:a7:cc: d3:52:12:ec:9c:3e:64:03:9d:a6:92:d6:bc:00:19:17:cb ] Do you want to continue connecting (yes/no)? yes (ENTER) Resultado esperado: INFO[0004] Only 1 project available: devops INFO[0004] Saving config to /home/suporte/.rancher/cli2.json Veja se é possivel através do binário rancher, gerenciar recursos no cluster kubernetes. rancher kubectl -n devops create deploy nginx --image=nginx rancher kubectl -n devops get all Resultado esperado: NAME pod/nginx-6799fc88d8-j54kc NAME READY 1/1 READY STATUS Running UP-TO-DATE RESTARTS 0 AVAILABLE AGE 15s AGE 197 Caique Araujo / caiquearaujoac@gmail.com deployment.apps/nginx 4. Gerenciar Autenticação e CLI 1/1 1 NAME replicaset.apps/nginx-6799fc88d8 1 DESIRED 1 CURRENT 1 16s READY 1 AGE 17s Para remover o deployment e serviço do Nginx, execute o seguinte comando: rancher kubectl -n devops delete deploy nginx Caique Araujo / caiquearaujoac@gmail.com 5 Gerenciar Workloads e Serviços Competências da Aula • • • • • • Gerenciar Gerenciar Gerenciar Gerenciar Gerenciar Gerenciar Deploy e Serviços Ingress Jobs e Cronjob Horizontal Pod Autoscaler Configmaps e Secrets Ingress com TLS Workloads Cargas de trabalho (Workloads) são objetos que definem regras de deploy para pods. Com base nessas regras, o Kubernetes realiza o deploy e atualiza a carga de trabalho com o estado atual da aplicação. Existem diversas cargas de trabalho no Kubernetes: Pods Os pods são contêineres individuais executados em um cluster do Kubernetes. Um pod contém um ou mais contêineres, cada um com seu próprio processo de aplicação. Os pods podem ser implantados em qualquer nó do cluster. Os pods são a menor unidade de implantação no Kubernetes. Os pods são criados e destruídos conforme necessário. Os pods podem ser usados para executar qualquer tipo de aplicativo. 198 199 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Os diferentes tipos são: Deploy Os Deploys são uma abstração de nível mais alto do que os pods. As implantações definem um estado desejado para o aplicativo e o Kubernetes garante que o aplicativo sempre atenda a esse estado desejado. Os deploys podem ser usadas para gerenciar o ciclo de vida de pods e replicasets. Os tipos mais populares suportados pelo Kubernetes são: StatefulSets StatefulSets são um tipo de deploy que é usado para gerenciar aplicações com estado. StatefulSets mantêm uma identidade persistente para cada pod. StatefulSets garantem que os pods sejam implantados em uma ordem específica e que cada pod tenha um nome de host exclusivo, e são frequentemente usados para gerenciar aplicações de banco de dados. DaemonSets Um DaemonSet garante que todos (ou alguns) nós executem uma cópia de um pod. À medida que os nós são adicionados ao cluster, os pods são adicionados a eles. À medida que os nós são removidos do cluster, esses pods são coletados como lixo. A exclusão de um DaemonSet limpará os pods que ele criou. Serviços Um serviço Kubernetes é uma abstração que define um conjunto lógico de pods e uma política para acessá-los. Os serviços do Kubernetes podem ser expostos de diferentes maneiras, especificando diferentes tipos na especificação do serviço. Os diferentes tipos são: • ClusterIP: Expõe o serviço em um IP interno do cluster. Escolher esse valor torna o serviço acessível apenas de dentro do cluster. Este é o ServiceType padrão. • NodePort: Expõe o serviço no IP de cada Node em uma porta estática (a NodePort). Um serviço ClusterIP, para o qual o serviço NodePort será roteado, é criado automaticamente. Você poderá entrar em contato com o serviço NodePort, de fora do cluster, solicitando :. • LoadBalancer: Expõe o serviço externamente usando o balanceador de carga de um provedor de nuvem. Os serviços NodePort e ClusterIP, para os quais o balanceador de carga externo encaminhará, são criados automaticamente. 200 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Lab 5.1 - Gerenciar Deploy e Serviços no Rancher Neste laboratório vamos aprender como gerenciar deploy e serviços no Rancher. Gerenciar Deploy Para começar a trabalhar com recursos do cluster, logue com usuário analista da base LDAP. Fig. 5.1: Gerenciar Deploy no Rancher - ETAPA 1 Em seguida selecione na área EXPLORE CLUSTER o cluster cluster1-gke. Fig. 5.2: Gerenciar Deploy no Rancher - ETAPA 2 201 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Para gerenciar deploments clique em Deployments ao lado esquerdo da tela e depois no botão Create. Fig. 5.3: Gerenciar Deploy no Rancher - ETAPA 3 Vamos criar um deploy coma as seguintes informações: • Name: webserver • Replicas: 1 • Container Image: php:7.2-apache Fig. 5.4: Gerenciar Deploy no Rancher - ETAPA 4 202 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Uma etapa importante na criação do Deploy, é definir um label. Clique em Labels & Annotations ao lado esquerdo da tela e depois no botão Add Label (em Pod Labels). Fig. 5.5: Gerenciar Deploy no Rancher - ETAPA 5 Digite app caixa Key, e php na caixa Value. Fig. 5.6: Gerenciar Deploy no Rancher - ETAPA 6 Em seguida vamos definir recursos de utilização de CPU e memória através da opção Resources: • CPU Reservation: 100 • Memory Reservation: 100 203 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com • CPU Limit: 800 • Memory Limit: 200 Fig. 5.7: Gerenciar Deploy no Rancher - ETAPA 8 Para finalizar a criação do Deploy, clique no botão Create localiza no final da página. Fig. 5.8: Gerenciar Deploy no Rancher - ETAPA 9 Verifique se o deploy webserver está ativo! Fig. 5.9: Gerenciar Deploy no Rancher - ETAPA 10 Alterar conteúdo do Pod Para alterar o conteúdo de um Pod, primeiro vamos acessar-lo a partir do deploy webserver. 204 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.10: Alterar conteúdo do Pod - ETAPA 1 Para alterar o conteúdo de um Pod, clique no ícone com três pontos que aparece ao lado direito da tela e na selecione a opção Execute Shell. Fig. 5.11: Alterar conteúdo do Pod - ETAPA 2 Em seguida realize a cópia do arquivo modelo index.html, para o diretório padrão do Apache /var/www/html: 205 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com cp /usr/share/apache2/default-site/index.html . Resultado: Fig. 5.12: Alterar conteúdo do Pod - ETAPA 3 Gerenciar Serviço Para configurar um novo serviço, clique opção Services e depois clique no botão Create: Fig. 5.13: Gerenciar Serviço no Rancher - ETAPA 1 206 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.14: Gerenciar Serviço no Rancher - ETAPA 2 Na lista de serviços vamos selecionar NodePort. Fig. 5.15: Gerenciar Serviço no Rancher - ETAPA 3 Preencha as seguintes informações para o novo serviço: • Name: webserver 207 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com • Port Name: web-port • Listening Port: 80 • Target Port: 80 Fig. 5.16: Gerenciar Serviço no Rancher - ETAPA 4 Para terminar vamos associar esse novo serviço ao nosso Deploy. Clique em Selectors e digite app na caixa Key e php na caixa Value. Para criar o serviço clique no botão Create. 208 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.17: Gerenciar Serviço no Rancher - ETAPA 5 Para testar o acesso ao serviço, clique no porta do serviço que esta na coluna Target. Fig. 5.18: Gerenciar Serviço no Rancher - ETAPA 6 Como resultado final temos a página padrão do Apache, sendo acessada pelo IP e porta gerada pelo serviço NodePort. 209 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.19: Gerenciar Serviço no Rancher - ETAPA 7 Ingress O recurso Ingress é usado como ponto de entrada em um cluster, podendo rotear o tráfego para vários serviços com maior flexibilidade. Um Ingress define uma coleção de regras que permitem que conexões de entrada alcancem os serviços de cluster. Quando um cliente envia uma solicitação a um serviço, a solicitação é roteada pela entrada para o serviço de back-end. A entrada pode ser configurada para fornecer aos clientes acesso externo aos serviços que estão sendo executados no cluster. Lab 5.2 - Gerenciar Ingress no Rancher Neste laboratório vamos aprender como gerenciar Ingress no Rancher. Para iniciar a configuração do Ingress clique na opção Ingresses ao lado esquerdo da tela, e depois no botão Create. 210 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.20: Gerenciar Ingress no Rancher - ETAPA 1 Fig. 5.21: Gerenciar Ingress no Rancher - ETAPA 2 Digite na caixa Name o nome webserver e em seguida, selecione a opção Default Backend ao lado esquerdo da tela. 211 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.22: Gerenciar Ingress no Rancher - ETAPA 3 Selecione webserver na caixa Target Service e 80 na caixa Port. Clique no botão Create para finalizar a configuração do Ingress. Fig. 5.23: Gerenciar Ingress no Rancher - ETAPA 4 Verifique se o recurso Ingress foi criado no cluster. 212 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.24: Gerenciar Ingress no Rancher - ETAPA 5 Para descobrir o IP de acesso ao Ingress, primeiro clique no nome do mesmo. Fig. 5.25: Gerenciar Ingress no Rancher - ETAPA 6 Em seguida clique na opção YAML, que esta localizada na parte superior direita da tela. 213 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.26: Gerenciar Ingress no Rancher - ETAPA 7 Role a página até o final e procure a parte de LoadBalancer, para anotar/copiar o IP gerado para o ingress. Fig. 5.27: Gerenciar Ingress no Rancher - ETAPA 8 Para realizar acesso ao Ingress a partir de seu navegador, digite: nome_do_ingress.namespace.ip_do_ingress.sslip.io Exemplo: 214 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.28: Gerenciar Ingress no Rancher - ETAPA 9 Jobs e CronJobs Jobs criam um ou mais pods e garantem que um número especificado deles seja encerrado com êxito. À medida que os pods são bem-sucedidos ou falham, o job rastreia as conclusões bemsucedidas. Quando as conclusões bem-sucedidas de um job atingem o número especificado, o job em si é concluído. A exclusão de um job limpará os pods que ele criou. Um CronJob cria um job em um agendamento baseado em tempo. Por exemplo, você pode criar um CronJob que seja executado todos os dias à meia-noite. Lab 5.3 - Gerenciar Jobs e CronJobs no Rancher Neste laboratório vamos aprender como gerenciar Jobs e CronJobs no Rancher. Prepando os Pods Vamos começar acessando a área de Deployments. Em seguida clique no ícone que são três pontinhos para selecionar a opção Edit Config. 215 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.29: Alterar conteúdo dos Pods - ETAPA 1 Altere para 4 o valor da caixar Replicas. Role até o final da página e clique no botão Save. Fig. 5.30: Alterar conteúdo dos Pods - ETAPA 2 Em seguida vamos editar o deploy webserver. 216 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.31: Alterar conteúdo dos Pods - ETAPA 4 Na lista de Pods vamos clicar nos três pontinhos referente ao primeiro Pod (ordem de cima para baixo) e selecionar a opção Execute Shell. Fig. 5.32: Alterar conteúdo dos Pods - ETAPA 5 Vamos criar um arquivo index.html echo 'POD1 - APACHE' > index.html Resultado: com a frase POD1 - APACHE. 217 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.33: Alterar conteúdo dos Pods - ETAPA 6 Repita esse procedimento nos demais Pods mudando apenas o valor na frase echo 'POD2 - APACHE' > index.html echo 'POD3 - APACHE' > index.html echo 'POD4 - APACHE' > index.html POD1 - APACHE. 218 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.34: Alterar conteúdo dos Pods - ETAPA 7 Gerenciar Jobs Para gerenciar jobs no cluster, selecione a opção de Jobs ao lado esquerdo da tela e depois clique no botão Create. Fig. 5.35: Gerenciar Jobs - ETAPA 1 Vamos criar um job coma as seguintes informações: • Name: loadbalancer-test • Container Image: radial/busyboxplus 219 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.36: Gerenciar Jobs - ETAPA 2 Role a página e digite as seguintes informações para comando e argumentos: • Command: /bin/sh • Arguments: -c ‘n=1; while [ $n -le 5 ]; do wget -q -O http://webserver; let n=n+1; done’ Fig. 5.37: Gerenciar Jobs - ETAPA 3 Para criar o job clique no botão Create. 220 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.38: Gerenciar Jobs - ETAPA 4 Para verificar se o job executou a tarefa corretamente, clique no nome do job loadbalancertest. Fig. 5.39: Gerenciar Jobs - ETAPA 5 Em seguida clique nos três pontinhos do Pod que foi gerado e depois na opção View Logs. 221 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.40: Gerenciar Jobs - ETAPA 6 Como resultado final o teste no loadbalancer foi feito com sucesso! É possível observar que ao acessar o serviço webserver, é feito um balanceamento entre os quatros pods do deploy webserver. Fig. 5.41: Gerenciar Jobs - ETAPA 7 Gerenciar CronJobs Para gerenciar cronjobs no cluster, selecione a opção de CronJobs ao lado esquerdo da tela e depois clique no botão Create. 222 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.42: Gerenciar CronJobs - ETAPA 1 Fig. 5.43: Gerenciar CronJobs - ETAPA 2 Vamos criar um job coma as seguintes informações: • Name: cronjob-lb-test • Schedule: /1 * * * • Container Image: radial/busyboxplus 223 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.44: Gerenciar CronJobs - ETAPA 3 Role a página e digite as seguintes informações para comando e argumentos: • Command: /bin/sh • Arguments: -c ‘n=1; while [ $n -le 5 ]; do wget -q -O http://webserver; let n=n+1; done’ Fig. 5.45: Gerenciar CronJobs - ETAPA 4 Para criar o cronjob clique no botão Create. 224 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.46: Gerenciar CronJobs - ETAPA 5 Para verificar se o crojob executou a tarefa corretamente, arguarde 1 minuto e clique no nome do crojob. Fig. 5.47: Gerenciar CronJobs - ETAPA 6 E depois clique em algum job gerado pelo cronjob. 225 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.48: Gerenciar CronJobs - ETAPA 7 O proximo passo é clicar nos três pontinhos do Pod que foi gerado e depois na opção View Logs. Fig. 5.49: Gerenciar CronJobs - ETAPA 8 É possível observar que ao acessar o serviço webserver, é feito um balanceamento entre os quatros pods do deploy webserver 226 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.50: Gerenciar CronJobs - ETAPA 9 A diferença do Cronjob é que a cada 1 minuto sera feito esse teste de conexão com o serviço do LoadbLancer. Removendo Jobs e CronJobs Para remover o job loadbalancer-test vamos selecioná-lo e depois clicar no botão Delete. Fig. 5.51: Removendo Jobs - ETAPA 1 Confirme a remoção do job através do botão Delete. 227 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.52: Removendo Jobs - ETAPA 2 Para remover o crojob cronjob-lb-test vamos selecioná-lo e depois clicar no botão Delete. Fig. 5.53: Removendo CronJobs - ETAPA 1 Confirme a remoção do cronjob através do botão Delete. 228 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.54: Removendo CronJobs - ETAPA 2 Horizontal Pod Autoscaler Um escalonador automático de pod horizontal dimensiona automaticamente o número de réplicas de um pod com base na utilização da CPU observada. Ao criar um escalonador automático de pod horizontal, você deve especificar o seguinte: • • • • O O O O nome do objeto, que deve ser exclusivo dentro do projeto. nome do objeto que o autoescalador dimensionará. número mínimo e máximo de réplicas do objeto dimensionado. destino de utilização da CPU para o objeto dimensionado. O autoescalador dimensiona o número de réplicas do objeto dimensionado entre o número mínimo e máximo de réplicas, com base na utilização da CPU observada do objeto dimensionado. Lab 5.4 - Gerenciar Horizontal Pod Autoscaler no Rancher Neste laboratório vamos aprender como gerenciar Horizontal Pod Autoscaler no Rancher. Criando o HPA Para trabalhar com autoscaling n cluster Kubernetes, selecione a opção HorizontalPodAutoscalers em** Service Discovery** e depois clique no botão Create. 229 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.55: Gerenciar Horizontal Pod Autoscaler - ETAPA 1 Preencha e selecione as seguintes informações para o nosso HPA: • • • • Name: webserver Target Reference: webserver Minimum Replicas: 1 Maximum Replicas: 10 Fig. 5.56: Gerenciar Horizontal Pod Autoscaler - ETAPA 2 Próximo passo é definir as métricas através da opção Metrics. 230 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.57: Gerenciar Horizontal Pod Autoscaler - ETAPA 3 Selecione as seguintes opções para as métricas do HorizontalPodAutoscaler • • • • Source: Resource Resource Name: CPU Type: Average Utilization Quantity: 80 Para finalizar clique no botão Create. Fig. 5.58: Gerenciar Horizontal Pod Autoscaler - ETAPA 4 231 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Verifique se o HPA foi criado corretamente! Fig. 5.59: Gerenciar Horizontal Pod Autoscaler - ETAPA 5 Realizar teste de estresse na aplicação Para testar se o HorizontalPodAutoscaler irá criar réplicas, selecione Deployments e depois o deploy webserver. Fig. 5.60: Realizar teste de estresse na aplicação - ETAPA 1 232 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.61: Realizar teste de estresse na aplicação - ETAPA 2 Selecione os três pontinhos do primeiro Pod e depois clique na opção Execute Shell. Fig. 5.62: Realizar teste de estresse na aplicação - ETAPA 3 Realiza a instalação do pacote stress-ng e em seguida realize o teste de stress: apt update apt install stress-ng -y nohup stress-ng --cpu 8 --matrix 1 --mq 3 -t 1m & Re3sultado esperado: 233 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.63: Realizar teste de estresse na aplicação - ETAPA 4 Retorne a tela do HorizontalPodAutoscalers e verifique se a quantidade de réplicas agora está com o valor 10. Fig. 5.64: Realizar teste de estresse na aplicação - ETAPA 5 E se você acessar a área de Pods, sera possível visualizar a lista dos 10 containers. 234 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.65: Realizar teste de estresse na aplicação - ETAPA 6 ConfigMaps e Secrets ConfigMap é um tipo de recurso do Kubernetes usado para armazenar informações de configuração. Os ConfigMaps são normalmente usados para armazenar dados de configuração que não precisam ser criptografados com segurança. Secret é um tipo de recurso do Kubernetes usado para armazenar informações confidenciais, como senhas, tokens e certificados. Os secrets são normalmente usados para armazenar informações confidenciais que precisam ser criptografadas com segurança e armazenadas em um local central. Lab 5.5 - Gerenciar ConfigMaps e Secrets no Rancher Neste laboratório vamos aprender como gerenciar ConfigMaps e Secrets no Rancher. Gerenciar ConfigMaps Para trabalhar configmaps no cluster kubernetes, selecione ConfigMaps na área de Storage. 235 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.66: Gerenciar ConfigMaps - ETAPA 1 Em seguida clique no botão Create. Fig. 5.67: Gerenciar ConfigMaps - ETAPA 2 Preencha as seguintes informações para o nosso novo configmap: • Name: mysql-configmap • Key: mysql-user • Value: suporte 236 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Para criar o configmap clique no botão Create. Fig. 5.68: Gerenciar ConfigMaps - ETAPA 3 Verifique se o configmap foi criado com sucesso! Fig. 5.69: Gerenciar ConfigMaps - ETAPA 4 Gerenciar Secrets Para trabalhar secrets no cluster kubernetes selecione Secrets na área de Storage. 237 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.70: Gerenciar Secrets - ETAPA 1 Em seguida clique no botão Create. Fig. 5.71: Gerenciar Secrets - ETAPA 2 Na lista de ConfigMaps vamos selecionar a opção Opaque. 238 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.72: Gerenciar Secrets - ETAPA 3 Preencha as seguintes informações para o nosso novo secret: • Name: mysql-secrets • Key: mysql_root_password Value: 4linux • Key: mysql_password Value: 4linux Para criar o configmap clique no botão Create. 239 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.73: Gerenciar Secrets - ETAPA 4 Verifique se o secret foi criado com sucesso! Fig. 5.74: Gerenciar Secrets - ETAPA 5 240 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Realizar Deploy com ConfigMaps e Secrets Para utilizar configmaps e secrets em um Deploy, primeiro selecione a área de Deployments e crie um novo Deploy: Fig. 5.75: Realizar Deploy com ConfigMaps e Secrets - ETAPA 1 Fig. 5.76: Realizar Deploy com ConfigMaps e Secrets - ETAPA 2 Preenchas a seguintes informações: • Name: mysql • Replicas: 1 • Container Image: mysql:5.6 241 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.77: Realizar Deploy com ConfigMaps e Secrets - ETAPA 3 Role a página até a área de Environment Variables e clique no botão Add Variable. Fig. 5.78: Realizar Deploy com ConfigMaps e Secrets - ETAPA 4 Selecione na caixa Type a opção ConfigMap Key. 242 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.79: Realizar Deploy com ConfigMaps e Secrets - ETAPA 5 E preencha as seguintes informações: • Variable Name: MYSQL_USER • ConfigMap: mysql-configmap • Key: mysql-user Fig. 5.80: Realizar Deploy com ConfigMaps e Secrets - ETAPA 6 Clique novamente no botão Add Variable na caixa Type selecione Secret Key. 243 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.81: Realizar Deploy com ConfigMaps e Secrets - ETAPA 7 E preencha as seguintes informações: • Variable Name: MYSQL_ROOT_PASSWORD • Secret: mysql-secrets • Key: mysql_root_password Fig. 5.82: Realizar Deploy com ConfigMaps e Secrets - ETAPA 8 Clique novamente no botão Add Variable na caixa Type selecione Secret Key. E preencha as seguintes informações: • Variable Name: MYSQL_PASSWORD • Secret: mysql-secrets • Key: mysql_password 244 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.83: Realizar Deploy com ConfigMaps e Secrets - ETAPA 9 Para finalizar criação do Deploy, role até o final da página e clique no botão Create. Fig. 5.84: Realizar Deploy com ConfigMaps e Secrets - ETAPA 10 Verifique se o Deploy mysql está ativo. 245 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.85: Realizar Deploy com ConfigMaps e Secrets - ETAPA 11 Acessando a a aplicação Clique no nome do deploy mysql. Fig. 5.86: Acessando a aplicação - ETAPA 1 Selecione o ícone com três pontinhos do Pod e depois na opção Execute Shell. 246 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.87: Acessando a aplicação - ETAPA 2 Execute o comando presentes no Pod: env filtrando a palavra mysql e verifique se o configmap e Secret estão env | grep mysql Resultado esperado: Fig. 5.88: Acessando a aplicação - ETAPA 3 Realize o teste de conexão com o Mysql usando o valor do configmap e secret: 247 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com mysql -u suporte -p4linux Resultado esperado: Fig. 5.89: Acessando a aplicação - ETAPA 4 Após os testes clique no ícone que é um X ao lado do nome do Pod mysql. Fig. 5.90: Acessando a aplicação - ETAPA 5 248 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Para terminar vamos remover o Deploy através da opção Delete. Fig. 5.91: Acessando a aplicação - ETAPA 6 Fig. 5.92: Acessando a aplicação - ETAPA 7 Lab 5.6 - Gerenciar Ingress com TLS Neste laboratório vamos aprender como gerenciar Ingress com TLS. Criando chave e certificado 249 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Através da instância custom, abra uma conexão SSH! Crie chave e certificado através do seguinte comando: openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout webserver.key -out webserver.crt \ -subj "/CN=webserver.devops.34.111.128.166.sslip.io/O=Empresa/OU=DevOps" Troque o IP 34.95.176.140 pelo endereço do LoadBalancer criado para o deploy do Nginx! Resultado esperado: Generating a RSA private key .+++++ ..............................+++++ writing new private key to 'webserver.key' Visualize e anote o conteúdo da chave e certificado gerados pelo comando cat webserver.key cat webserver.crt Criando Secret com certificado Para utilizar certificados em secrets, sera preciso criar um novo. openssl. 250 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.93: Criando Secret com certificado - ETAPA 1 Na lista de tipos de secrets vamos selecionar a opção TLS Certificate. Fig. 5.94: Criando Secret com certificado - ETAPA 2 Preencha as seguintes informações: • Name: webserver-cert • Private Key: Cole o conteúdo do arquivowebserver.key • Certificate: Cole o conteúdo do arquivowebserver.crt Clique no botão Create para finalizar a criação do secret. 251 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.95: Criando Secret com certificado - ETAPA 3 Verifique se o secret webserver-cert foi criado. Fig. 5.96: Criando Secret com certificado - ETAPA 4 Adicionar certificado no Ingress Para utilizar nosso certificado em um ingress, vamos editar o ingress webserver através do ícone com três pontinhos e selecionar a opção Edit Config. 252 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.97: Adicionar certificado no Ingress - ETAPA 1 Em seguida clique em Certificates ao lado esquerdo da tela e no botão Add Certificates. Fig. 5.98: Adicionar certificado no Ingress - ETAPA 2 253 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.99: Adicionar certificado no Ingress - ETAPA 3 Na lista de secrets vamos selecionar webserver-cert. Fig. 5.100: Adicionar certificado no Ingress - ETAPA 4 E clique no botão Remover para remover a opção de hosts. 254 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.101: Adicionar certificado no Ingress - ETAPA 5 Feitos os ajustes clique no botão Save para atualizar o ingress. Fig. 5.102: Adicionar certificado no Ingress - ETAPA 6 Vamos testar o certificado abrindo em nova aba o endereço do ingress com https. Para aceitar o certificado clique no botão Avançado. 255 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.103: Adicionar certificado no Ingress - ETAPA 7 m seguida no link Ir para webserver.devops. . . Fig. 5.104: Adicionar certificado no Ingress - ETAPA 8 Como nosso Deploy não tem conteúdo ele vai mostrar uma página com a mensagem Forbidden. 256 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.105: Adicionar certificado no Ingress - ETAPA 9 Para resolver isso volte ao painel do Rancher, e execute um shell dentro do Pod webserver. Fig. 5.106: Adicionar certificado no Ingress - ETAPA 10 Em seguida realize a cópia do arquivo modelo /var/www/html: index.html, cp /usr/share/apache2/default-site/index.html . para o diretório padrão do Apache 257 5. Gerenciar Workloads e Serviços Caique Araujo / caiquearaujoac@gmail.com Fig. 5.107: Adicionar certificado no Ingress - ETAPA 11 Atualize a página do ingress e verifique que nosso site esta sendo acessando através de certificado e agora com conteúdo. Fig. 5.108: Adicionar certificado no Ingress - ETAPA 12 Caique Araujo / caiquearaujoac@gmail.com 6 Gerenciar Storage Competências da Aula • • • • • Conceitos sobre Volumes Gerenciar Volume Local, Bloco e NFS Introdução ao Longhorn Gerenciar volume distribuído com Longhorn Gerenciar Backup e Restore de volumes Volumes Volumes são um mecanismo de armazenamento do Kubernetes que permitem que os dados sejam preservados mesmo quando os pods são recriados ou movidos para outros nós. Eles são criados e anexados aos pods e podem ser compartilhados por vários pods. Volume Local O volume local é o tipo de volume que é alocado em um único disco rígido e não está replicado. Veja a diferenças do tipos de volume local no Kubernetes: • emptDir: É um volume de dados temporários que pode ser compartilhado por um pod e seus descendentes. Ele é limpo automaticamente quando o pod é excluído. • hostPath: É um método de armazenamento de dados que mapeia um diretório em um nó para um volume em um pod. 258 259 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Lab 6.1 - Gerenciar Volume Local no Rancher Neste laboratório vamos aprender como gerenciar volume do tipo emptyDir e hostPath no Rancher. Volume local emptyDir Para criar um novo pod vamos selecionar a opção Pods na área de Workload e depois clique no botão Create from YAML. Fig. 6.1: Gerenciar volume emptyDir - ETAPA 1 Selecione e remova o conteúdo exemplo através da tecla Delete. Fig. 6.2: Gerenciar volume emptyDir - ETAPA 2 260 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Digite ou cole o seguinte exemplo de um Pod que utiliza o volume do tipo emptyDir. apiVersion: v1 kind: Pod metadata: name: pod-com-volume-emptydir namespace: devops spec: containers: - name: busybox image: busybox:1.28 command: - sleep - "3600" volumeMounts: - name: backup-volume mountPath: /backup volumes: - name: backup-volume emptyDir: {} Não esqueça de clicar no botão Create para criar o se Pod. Resultado esperado: Fig. 6.3: Gerenciar volume emptyDir - ETAPA 3 Como resultado um novo Pod com volume emptyDir foi criado no cluster. Para gerenciar os dados do Pod clique no nome dele. 261 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.4: Gerenciar volume emptyDir - ETAPA 4 E depois clique no ícone com três pontinhos e na opção Execute Shell. Fig. 6.5: Gerenciar volume emptyDir - ETAPA 5 Execute comando df df -Th /backup Resultado esperado: -Th /backup para verificar se a pasta /backup foi montada dentro do Pod. 262 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.6: Gerenciar volume emptyDir - ETAPA 6 Volume local hostPath Para criar um novo pod vamos selecionar a opção Pods na área de Workload e depois clique no botão Create from YAML Fig. 6.7: Gerenciar volume hostPath - ETAPA 1 Selecione e remova o conteúdo exemplo através da tecla Delete, e depois digite ou cole o seguinte exemplo de um Pod, que utiliza o volume do tipo hostPath. apiVersion: v1 kind: Pod metadata: 263 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com name: pod-com-volume-hostpath namespace: devops spec: containers: - name: nginx image: nginx volumeMounts: - name: site mountPath: /usr/share/nginx/html volumes: - name: site hostPath: path: /opt/site type: DirectoryOrCreate Não esqueça de clicar no botão Create para criar o se Pod. Resultado esperado: Fig. 6.8: Gerenciar volume hostPath - ETAPA 2 Como resultado um novo Pod com volume hostPath foi criado no cluster. Para gerenciar os dados do Pod clique no nome dele. 264 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.9: Gerenciar volume hostPath - ETAPA 3 E depois clique no ícone com três pontinhos e na opção Execute Shell. Fig. 6.10: Gerenciar volume hostPath - ETAPA 4 Tente conectar na página exemplo do Nginx, através do comando curl localhost curl localhost: 265 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.11: Gerenciar volume hostPath - ETAPA 5 É possível observar que o conteúdo da aplicação não pode ser exibido, porque a pasta /usr/share/nginx/html do container esta mapeando o diretório vazio /opt/site dentro de um nó do cluster! Antes de adicionar um conteúdo ao diretório em que esse Pod esta em execução. /opt/site, precisamos descobrir o nome do nó Anote ou copie o nome do nó na parte superior da tela ao lado de Node. 266 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.12: Gerenciar volume hostPath - ETAPA 6 Vamos alternar para o painel da GCP e acessar via SSH o nó em questão. Fig. 6.13: Gerenciar volume hostPath - ETAPA 7 Execute os comandos necessários para criar um arquivo index.html e copiá-lo para dentro do diretório /opt/site. 267 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com echo 'Pod com Volume hostPath' > index.html sudo cp index.html /opt/site/ sudo ls /opt/site/ Fig. 6.14: Gerenciar volume hostPath - ETAPA 8 Retorne o painel do Rancher e verifique se ao conectar na página exemplo do Nginx, o conteúdo do arquivo index.html sera exibido corretamente. curl localhost Resultado esperado: Fig. 6.15: Gerenciar volume hostPath - ETAPA 9 268 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Removendo Pods Para terminar os exercícios com volume local no Rancher, selecione os Pods com volume emptyDir e hostPath e clique no botão Delete. Fig. 6.16: Removendo Pods - ETAPA 1 Confirma a remoção dos Pods através do botão Delete. Fig. 6.17: Removendo Pods - ETAPA 2 Volume em bloco e Distribuído O volume em bloco é o tipo de volume que é replicado em vários discos rígidos e está conectado a um único computador. Um exemplo é o uso do Google Persistent Disk. 269 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com O volume distribuído é o tipo de volume que é replicado em vários discos rígidos e está localizado em vários computadores. Um exemplo é uso de NFS. Storage Classes As classes de armazenamento Kubernetes permitem que um administrador crie e gerencie políticas de armazenamento detalhadas. Essas políticas podem ser usadas por desenvolvedores para vincular volumes persistentes a seus pods. As classes de armazenamento são usadas pelos componentes kubelet e gerenciador de controlador. As classes de armazenamento podem ser usadas para vincular volumes persistentes a pods e gerenciar o armazenamento subjacente. As classes de armazenamento são usadas pelos componentes kubelet e gerenciador de controlador. As classes de armazenamento permitem que os administradores criem e gerenciem políticas de armazenamento refinadas. Persistent Volume Um Volume Persistente (PV) do Kubernetes é uma parte do armazenamento no cluster que foi provisionado por um administrador ou provisionado dinamicamente usando StorageClasses. Um PV é “anexado” a um Pod em execução e existe enquanto esse Pod existir. Persistent Volume Claim Um Volume Persistente Clain (PVC) no Kubernetes é uma reivindicação em um volume persistente. É essencialmente uma delegação de responsabilidade de um determinado volume de uma entidade para outra, permitindo uma definição abstrata do que é exigido do volume. Lab 6.2 - Gerenciar Volume em Bloco no Rancher Neste laboratório vamos aprender como gerenciar volume em bloco no Rancher. Visualizar StorageClasses no Cluster Antes de interagir com volumes persistentes, vamos selecionar a opção StorageClasses na área de Storage. 270 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.18: Visualizar StorageClasses no Cluster - ETAPA 1 Na lista será exibido os seguintes StorageClasses: • standard: É o StorageClass padrão criar volume em bloco através de um disco na GCP. • nfs-client: StorageClas para criar volume distribuído de um servidor NFS. • Longhorn: StorageClas para criar volume em bloco e distribuído distribuído através da aplicação longhorn Fig. 6.19: Visualizar StorageClasses no Cluster - ETAPA 2 Gerenciar Volume em bloco Para criar um novo volume persistente, selecione a opção PersistentVolumeClaim ao lado esquerdo da tela e depois clique no botão Create. 271 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.20: Gerenciar Volume em bloco - ETAPA 1 Preencha as seguintes informações para o novo volume: • • • • Name: disk-gcp Source: Use a Storage Class to provision a new Persistent Volume Storage Class: standard Request Storage: 1 Fig. 6.21: Gerenciar Volume em bloco - ETAPA 2 Em seguida vamos editar as configurações de acesso ao volume, através da opção Customize. 272 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Para um volume do tipo bloco, selecione Single Node Read-Write, onde somente um nó pode ler e descrever por vez no volume. Não esqueça de clicar no botão Create. Fig. 6.22: Gerenciar Volume em bloco - ETAPA 3 Verifique que um novo PV e PVC de nome disk-gcp gcp foram criados através do StorageClass standard. Fig. 6.23: Gerenciar Volume em bloco - ETAPA 4 273 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.24: Gerenciar Volume em bloco - ETAPA 5 Executar Deploy com Volume em bloco Para trabalhar com volumes persistentes em uma aplicação no cluster, é preciso criar ou selecionar um Pod ou Deploy. Fig. 6.25: Executar Deploy com Volume em bloco - ETAPA 1 Vamos selecionar o deploy webserver e através do ícone que são três pontinhos, selecione a opção Edit Config. 274 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.26: Executar Deploy com Volume em bloco - ETAPA 2 Para gerenciar volumes precisamos clicar na opção Storage, que fica ao lado esquerdo da tela. Fig. 6.27: Executar Deploy com Volume em bloco - ETAPA 3 Para adicionar um novo volume ao deploy, clique na opção Add Volume e na lista selecione Persistent Volume Claim. 275 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.28: Executar Deploy com Volume em bloco - ETAPA 4 Selecione o volume disk-gcp na caixa Persistent Volume Claim. Fig. 6.29: Executar Deploy com Volume em bloco - ETAPA 5 Digite o caminho /var/www/html na caixa Mount Point e depois no botão Save para atualizar o Deploy. 276 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.30: Executar Deploy com Volume em bloco - ETAPA 6 Para verificar se um novo disco foi criado na GCP, alterne para o seu painel e clique em Compute Engine -> Discos. Fig. 6.31: Executar Deploy com Volume em bloco - ETAPA 7 Verifique que o novo disco permanente padrão de 1Gb foi criado dentro da GCP. 277 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.32: Executar Deploy com Volume em bloco - ETAPA 8 Retorne ao painel do Rancher para selecionar o deploy webserver e executar um shell em seu Pod. Fig. 6.33: Executar Deploy com Volume em bloco - ETAPA 9 Em seguida vamos executar os comandos necessários para realizar o download de um site exemplo, que ser armazenado na pasta /var/www/html. apt update apt install git -y 278 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com rm -rf lost+found/ git clone https://github.com/4linux/site.git . Resultado esperado: Fig. 6.34: Executar Deploy com Volume em bloco - ETAPA 10 Para testar o deploy com volume da GCP, vamos acessar o endereço de ingress webserver: 279 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.35: Executar Deploy com Volume em bloco - ETAPA 11 Lab 6.3 - Gerenciar Volume NFS no Rancher Neste laboratório vamos aprender como gerenciar volume NFS no Rancher. Gerenciar Volume NFS Vamos criar um novo volume persistente através da opção PersistentVolumeClaim -> Create. Fig. 6.36: Gerenciar Volume NFS - ETAPA 1 280 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Preencha as seguintes informações para o novo volume: • • • • Name: disk-nfs Source: Use a Storage Class to provision a new Persistent Volume Storage Class: nfs-client Request Storage: 1 Fig. 6.37: Gerenciar Volume NFS - ETAPA 2 Em seguida vamos editar as configurações de acesso ao volume, através da opção Customize. Para um volume do tipo nfs, selecione Many Nodes Read-Write, onde varios nód podem ler e descrever ao mesmo tempo no volume. Não esqueça de clicar no botão Create. 281 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.38: Gerenciar Volume NFS - ETAPA 3 Verifique que um novo PV e PVC de nome disk-nfs foram criados através do StorageClass nfs-client. Executar Deploy com Volume NFS Vamos selecionar o deploy webserver e através do ícone que são três pontinhos, selecione a opção Edit Config. Fig. 6.39: Executar Deploy com Volume NFS - ETAPA 1 Para gerenciar volumes precisamos clicar na opção Storage, que fica ao lado esquerdo da tela. 282 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.40: Executar Deploy com Volume NFS - ETAPA 2 E altere o Persistent Volume Claim para volume-nfs. Fig. 6.41: Executar Deploy com Volume NFS - ETAPA 3 Antes de finalizar atualização do Deploy será necessário adicionar um novo container através da Opção Add Container na caixa Cointainer. 283 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.42: Executar Deploy com Volume NFS - ETAPA 4 Adicione um novo volume ao novo container, através da opção Add Volume e na lista selecione Persistent Volume Claim. Fig. 6.43: Executar Deploy com Volume NFS - ETAPA 5 Adicione e preencha as seguintes informações para esse novo container: • Volume Name: vol0 • Persistent Volume Claim: volume-nfs • Mount Point: /data 284 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.44: Executar Deploy com Volume NFS - ETAPA 6 O próximo passo alterar as informações desse novo container através da opçõa General. Altere para o tipo Init Container e na caixa Container Image digite alpine:3.7. Fig. 6.45: Executar Deploy com Volume NFS - ETAPA 7 Preencha as seguintes informações na parte de comando e argumentos: Command /bin/sh 285 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Arguments -c 'cd /data && rm -rf ..?* .[!.]* * && .com/4linux/site.git /data' apk add --no-cache git && git clone https://github Resultado esperado: Fig. 6.46: Executar Deploy com Volume NFS - ETAPA 8 Role a página e ainda não salve, porque precisamos remover uma configuração duplicada através do botão Edit as YAML. Fig. 6.47: Executar Deploy com Volume NFS - ETAPA 9 Procure um bloco que inicia com _type e termina com name: vol0. 286 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.48: Executar Deploy com Volume NFS - ETAPA 10 Selecione esse bloco duplicado e remova através da tecla Delete. Fig. 6.49: Executar Deploy com Volume NFS - ETAPA 11 Após os ajustes necessários clique no botão Save para atualizar o seu deploy. 287 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.50: Executar Deploy com Volume NFS - ETAPA 12 Uma vez que eu o Deploy foi atualizado clique no nome dele e no Pod. Fig. 6.51: Executar Deploy com Volume NFS - ETAPA 13 288 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.52: Executar Deploy com Volume NFS - ETAPA 14 Verifique dentro do Pod possui dois contêineres: • container-1: O init container que baixou o conteúdo do siste exemplo para a pasta /var/www/html. • container-0: Container com aplicação apache que ira carregar o conteúdo da pasta /var/www/html. Fig. 6.53: Executar Deploy com Volume NFS - ETAPA 15 Para testar o deploy com volume nfs, vamos acessar o endereço de ingress webserver: 289 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.54: Executar Deploy com Volume NFS - ETAPA 16 Visualizar dados no servidor NFS Para visualizar os dados do volume NFS na instância nfs-server, primeiro alterne para o painel da GCP e acesse a área de Compute Engine. Fig. 6.55: Visualizar dados no servidor NFS - ETAPA 1 290 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Procure instância nfs-server e abra uma conexão SSH através da opção Abrir na janela do navegador. Fig. 6.56: Visualizar dados no servidor NFS - ETAPA 2 Liste o contewúdo da pasta /nfs e verifique o conteúdo do volume-nfs. Fig. 6.57: Visualizar dados no servidor NFS - ETAPA 3 Longhorn Longhorn é um sistema de armazenamento em bloco distribuído para Kubernetes. Quando combinado com o Rancher, o Longhorn torna fácil, rápido e confiável a implantação de armazenamento de bloco persistente altamente disponível em seu ambiente Kubernetes. Recursos • Armazenamento em bloco distribuído de nível empresarial sem ponto único de falha. • Snapshots incremental do armazenamento em bloco. 291 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com • Backup para armazenamento em NFS ou S3. • Possui um painel de gerenciamento gráfico Componentes O Longhorn Manager Pod é executado em cada nó no cluster Longhorn como um Kubernetes DaemonSet. Ele é responsável por criar e gerenciar volumes no cluster Kubernetes e lida com as chamadas de API da interface do usuário ou os plug-ins de volume para Kubernetes. O Longhorn Manager se comunica com o servidor da API Kubernetes para criar um novo CRD de volume Longhorn. Em seguida, o Longhorn Manager observa a resposta do servidor de API e, quando vê que o servidor de API do Kubernetes criou um novo CRD de volume Longhorn, o Longhorn Manager cria um novo volume. O Longhorn Engine sempre é executado no mesmo nó que o Pod que usa o volume Longhorn. Ele replica de forma síncrona o volume em várias réplicas armazenadas em vários nós. Arquitetura Fig. 6.58: Arquitetura do Longhorn Fonte: https://longhorn.io/img/diagrams/architecture/how-longhorn-works.svg A imagem abaixo há três instâncias com volumes Longhorn, onde cada volume tem um con- 292 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com trolador dedicado, que é chamado de Longhorn Engine e é executado como um processo Linux. Cada volume Longhorn tem duas réplicas e cada réplica é um processo Linux. As setas na figura indicam o fluxo de dados de leitura/gravação entre o volume, a instância do controlador, as instâncias de réplica e os discos. Ao criar um Longhorn Engine separado para cada volume, se um controlador falhar, a função de outros volumes não será afetada. Lab 6.4 - Gerenciar volume distribuído com Longhorn Neste laboratório vamos aprender como gerenciar volume distribuído com Longhorn. Criar volume via Longhorn Dashboard Sai da conta do usuário analista e logue com o usuário admin. Em seguida selecione Longhorn ao lado esquerdo da tela e clique no link Manage storage system via UI. Fig. 6.59: Criar volume via Longhorn Dashboard - ETAPA 1 Uma vez conectado no painel do Longhorn clique na guia Volume -> Create Volume. 293 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.60: Criar volume via Longhorn Dashboard - ETAPA 2 Preencha as seguintes informações para o novo volume: • • • • • • • Name: disk-longhorn Size: 1 Number of Replicas: 4 Frontend: Block Device Data Locality: disabled Access Mode: ReadWriteOnce Replicas Auto Balance: ignored Fig. 6.61: Criar volume via Longhorn Dashboard - ETAPA 3 294 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Role até o final da página e clique no botão OK para confirmar o novo volume. Fig. 6.62: Criar volume via Longhorn Dashboard - ETAPA 4 Uma vez que o novo volume foi criado, vamos criar um PV e PVC através do menu suspenso e utilizar a opção Create PV/PVC. Fig. 6.63: Criar volume via Longhorn Dashboard - ETAPA 5 Preencha as seguintes informações: 295 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com • File System: Ext4 • Create PVC: Selecionado • Namespace: devops Clique no botão OK para confirmar. Fig. 6.64: Criar volume via Longhorn Dashboard - ETAPA 6 Verifique que um novo volume foi criado mas o mesmo não está sendo usado por nenhum Pod! 296 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.65: Criar volume via Longhorn Dashboard - ETAPA 7 Alterne para o painel do Rancher e verifique que um novo PV e PVC de nome disk-longhorn foram criados através do StorageClass Longhorn. Fig. 6.66: Criar volume via Longhorn Dashboard - ETAPA 8 297 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.67: Criar volume via Longhorn Dashboard - ETAPA 9 Executar Deploy com Volume do Longhorn Sai da conta do usuário admin e logue com o usuário analista. Fig. 6.68: Executar Deploy com Volume do Longhorn - ETAPA 1 Vamos selecionar o deploy webserver e através do ícone que são três pontinhos, selecione a opção Edit Config. 298 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.69: Executar Deploy com Volume do Longhorn - ETAPA 2 Selecione o volume disk-longhorn na caixa Persistent Volume Claim e salve as alterações no Deploy. Fig. 6.70: Executar Deploy com Volume do Longhorn - ETAPA 3 Aguarde a atualização do Deploy webserver! 299 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.71: Executar Deploy com Volume do Longhorn - ETAPA 4 Para testar o deploy com volume do Longhorn, vamos acessar o endereço de ingress webserver: Fig. 6.72: Executar Deploy com Volume do Longhorn - ETAPA 5 Lab 6.5 - Gerenciar Backup de volumes com Longhorn Neste laboratório vamos aprender como gerenciar backup de volumes com Longhorn. Sai da conta do usuário analista e logue com o usuário admin. 300 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.73: Gerenciar Backup de volumes com Longhorn - ETAPA 1 Alterne para o painel do Longhorn para criar um backup. Selecione o volume disk-longhorn e clique na opção Create Backup. Fig. 6.74: Gerenciar Backup de volumes com Longhorn - ETAPA 2 Sera preciso adicionar um label através da opção Add Labels for Backup. 301 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.75: Gerenciar Backup de volumes com Longhorn - ETAPA 3 Define app como chave e php como valor. Clique no botão OK para confirmar. Fig. 6.76: Gerenciar Backup de volumes com Longhorn - ETAPA 4 Para verificar se o um backup foi criado corretamente, clique na guia Backup. 302 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.77: Gerenciar Backup de volumes com Longhorn - ETAPA 5 Fig. 6.78: Gerenciar Backup de volumes com Longhorn - ETAPA 6 Lab 6.6 - Gerenciar Restore de volumes com Longhorn Neste laboratório vamos aprender como gerenciar restore de volumes com Longhorn. Trocando volume no Deploy Vamos selecionar o deploy webserver e através do ícone que são três pontinhos, selecione a opção Edit Config. 303 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.79: Trocando volume no Deploy - ETAPA 1 Clicque na opção Storage, que fica ao lado esquerdo da tela e altere o Persistent Volume Claim para volume-nfs. Não esqueça de clicar no botão Save para atualizar o Deploy! Fig. 6.80: Trocando volume no Deploy - ETAPA 2 304 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Desanexar e deletar volume no Longhorn Retorne o painel do Longhorn para desanexar o volume através da opção Detach. Fig. 6.81: Desanexar e deletar volume no Longhorn - ETAPA 1 Confirme que volume será desanexado através do botão OK. Fig. 6.82: Desanexar e deletar volume no Longhorn - ETAPA 2 Antes de testar o restore de nosso backup, vamos remover o volume disk-longhorn através do botão Delete. 305 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.83: Desanexar e deletar volume no Longhorn - ETAPA 3 Confirme que o volume será removido através botão OK. Fig. 6.84: Desanexar e deletar volume no Longhorn - ETAPA 4 Restaurar backup no Longhorn Para restaurar backup selecione a guia Backup. 306 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.85: Restaurar backup no Longhorn - ETAPA 1 E depois selecione a opção Restore Latest Backup. Fig. 6.86: Restaurar backup no Longhorn - ETAPA 2 Ao restaurar o backup selcione na caixa Access Mode a opção ReadWriteOnce. Para finalizar clique no botao OK. 307 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.87: Restaurar backup no Longhorn - ETAPA 3 Retorne a guia Volume e crie um PV e PVC através da opção Create PV/PVC. Fig. 6.88: Restaurar backup no Longhorn - ETAPA 4 Preencha as seguintes informações: • File System: Ext4 • Create PVC: Selecionado • Namespace: devops 308 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Clique no botão OK para confirmar. Fig. 6.89: Restaurar backup no Longhorn - ETAPA 5 Verifique se o volume disk-longhorn foi restaura com sucesso! Fig. 6.90: Restaurar backup no Longhorn - ETAPA 6 309 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Testar volume restaurado Alterne para o painel do Rancher e acesse a área de Deployments e clique no botão Create. Fig. 6.91: Testar volume restaurado - ETAPA 1 Crie um deploy com as seguintes informações: • Name: webserver2 • Replicas: 1 • Container Image: php:7.2-apache Fig. 6.92: Testar volume restaurado - ETAPA 2 310 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Em Labels & Annotations vamos definir o seguinte Pod Labels: • Key: app • Value: site Fig. 6.93: Testar volume restaurado - ETAPA 3 Clique na opção Storage e selecione o volume disk-longhorn na caixa Persistent Volume Claim. Digite o caminho /var/www/html na caixa Mount Point e depois no botão Create. Fig. 6.94: Testar volume restaurado - ETAPA 4 Antes de acessar aplicação com volume restaurado crie um novo serviço. 311 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.95: Testar volume restaurado - ETAPA 5 Selecione o tipo NodePort e preencha as seguintes informações: • • • • Name: webserver2 Port Name: webserver2-port Listening Port: 80 Target Port: 80 Fig. 6.96: Testar volume restaurado - ETAPA 6 Em Selectors vamos definir o seguinte: • Key: app • Value: site 312 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Para finalizar clique botão Create. Fig. 6.97: Testar volume restaurado - ETAPA 7 Uma vez que o serviço webserver2 foi criado, clique em seu endereço através da coluna Target. Fig. 6.98: Testar volume restaurado - ETAPA 8 Como resultado final você possui agora mais uma aplicação web, que está usando o volume restaurado pelo Longhorn. 313 6. Gerenciar Storage Caique Araujo / caiquearaujoac@gmail.com Fig. 6.99: Testar volume restaurado - ETAPA 9 Caique Araujo / caiquearaujoac@gmail.com 7 GitOps at Scale com Fleet Competências da Aula • • • • • • • • Introdução a GitOps com Fleet Arquitetura e componentes do Fleet Criar um segundo cluster Kubernetes GKE Configurar Cluster Groups, cluster e Git Repos Realizar Deploy do Wordpress Single Cluster com Fleet Instalar aplicação Helm via Fleet Realizar Multi cluster com Fleet Realizar mudanças via Git CLI GitOps Gitops é um método para gerenciar infraestrutura e aplicativos usando repositórios git. Com gitops, todas as alterações na infraestrutura e nos aplicativos são feitas usando solicitações git pull, e todas as alterações são implantadas automaticamente por meio de um pipeline de entrega contínua. GitOps em escala É quando usamos um repositório git para gerenciar todos os aspectos de um sistema de grande escala, desde o código que o executa até a infraestrutura em que ele é executado. A ideia é que, usando uma única fonte de verdade (o repositório git), seja mais fácil gerenciar as 314 315 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com mudanças e garantir que todos estejam trabalhando na mesma base de código. Na prática, isso significa que existe um repositório central que contém todo o código e configuração do sistema, e todos que trabalham no sistema possuem um clone desse repositório. Quando alguém faz uma alteração, ele a confirma em seu repositório local e a envia por push para o repositório central. Em seguida, um sistema de Integração Contínua/Entrega Contínua cria e implanta automaticamente o código. Esta abordagem tem uma série de benefícios, incluindo: • É mais fácil gerenciar as alterações, pois tudo é rastreado no repositório git. • É mais fácil garantir que todos estejam trabalhando na mesma base de código, pois há apenas um repositório central. • É mais fácil automatizar implantações, pois o sistema de Integração Contínua/Entrega Contínua pode construir e implantar automaticamente o código. • É mais fácil reverter as alterações, pois tudo é rastreado no repositório git. • É mais fácil gerenciar vários ambientes, pois o código e a configuração de cada ambiente são armazenados em uma ramificação separada no repositório git. Fleet Fleet é uma ferramenta para gerenciar implantações em larga escala de contêineres docker. Ele permite que você defina sua implantação em um repositório git e, em seguida, implanta e atualiza automaticamente seus contêineres com base nas alterações no repositório. O usdo do Fleet no Rancher permite gerenciar um grande número de servidores a partir de uma única interface. Ele foi projetado para ser usado com um repositório git, para que todas as alterações nos servidores possam ser rastreadas e revertidas, se necessário. Se você gerencia o código no GitHub, pode usar a integração do GitHub para acionar deploy automaticamente quando o código é enviado para seu branch master. Se você usar um repositório de código diferente, poderá usar os webhooks para acionar esses deploy. O Fleet oferece suporte a implantações em vários clusters, namespaces, regiões e provedores de nuvem do Kubernetes. As implantações em vários clusters, namespaces e regiões podem ser acionadas por uma alteração em um único arquivo. Veja abaixo como funciona a arquitetura do Fleet: 316 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.1: Arquitetura do Fleet Fonte: https://rancher.com/docs/img/rancher/fleet-architecture.svg Lab 7.1 - Criar o 2ž Cluster Kubernetes GKE Neste laboratório vamos aprender como criar um segundo cluster Kubernetes usando o provedor de cloud Google Cloud Platform. Para começar vamos logar com o usuário admin e selecionar Cluster Management. 317 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.2: Criar o 2ž Cluster Kubernetes GKE - ETAPA 1 Para criar um cluster Google GKE, clique na opção Clusters e depois do botão Create. Fig. 7.3: Criar o 2ž Cluster Kubernetes GKE - ETAPA 2 Em seguida clique no ícone Google GKE. 318 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.4: Criar o 2ž Cluster Kubernetes GKE - ETAPA 3 Na caixa Cluster Name digite cluster2-gke. Fig. 7.5: Criar o 2ž Cluster Kubernetes GKE - ETAPA 4 Selecione caixa Cloud Credentials cluster2 e no botão Add New. 319 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.6: Criar o 2ž Cluster Kubernetes GKE - ETAPA 5 Para carregar as credenciais a partir da chave clique no botão Read from File. Fig. 7.7: Criar o 2ž Cluster Kubernetes GKE - ETAPA 6 Selecione a partir da sua máquina o arquivo de chave cluster2. 320 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.8: Criar o 2ž Cluster Kubernetes GKE - ETAPA 7 Após carregar o arquivo de chave clique no botão Create para continuar. Fig. 7.9: Criar o 2ž Cluster Kubernetes GKE - ETAPA 8 Em Location Type vamos utilizar a zona us-central1-c. Para continuar clique no botão Configure Cluster. 321 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.10: Criar o 2ž Cluster Kubernetes GKE - ETAPA 9 Em Cluster Options vamos selecionar na caixa Kubernetes Options, a versão do Kubernetes e na parte de segurança vamos selecionar: • Network Policy Config • Network Policy for Nodes • Project Network Isolation Fig. 7.11: Criar o 2ž Cluster Kubernetes GKE - ETAPA 10 Em** Cluster Addons** mantenha as opções Horizontal Pod Autoscaling e HTTP Load Balancing selecionadas. 322 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.12: Criar o 2ž Cluster Kubernetes GKE - ETAPA 11 Em Node Details vamos selecionar: • Imagem Type: Ubuntu with Docker. • Machine Type: 2-highmem-2 que contem 2 vCPUs e 16 GB de RAM. Fig. 7.13: Criar o 2ž Cluster Kubernetes GKE - ETAPA 12 Em Group Details, digite na caixa Name a palavra nodes e na na caixa Initial Node Count o valor 4. Para criar o cluster kubernetes, clique no botão Create. 323 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.14: Criar o 2ž Cluster Kubernetes GKE - ETAPA 13 E aguarde o provisionamento de nosso segundo cluster. Fig. 7.15: Criar o 2ž Cluster Kubernetes GKE - ETAPA 14 Quando status aparecer Active, clique no botão Explore para visualizar os recursos de seu novo cluster. 324 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.16: Criar o 2ž Cluster Kubernetes GKE - ETAPA 15 Fig. 7.17: Criar o 2ž Cluster Kubernetes GKE - ETAPA 16 Lab 7.2 - Configurar Cluster Groups no Rancher Neste laboratório vamos aprender como gerenciar clusters na parte de Continuous Delivery no Rancher. Criar Cluster Groups Para trabalhar com a parte de automação e GitOps At Scale no Rancher, clique em Continuous Delivery na área de GLOBAL APPS. 325 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.18: Criar Cluster Groups no Rancher - ETAPA 1 O nosso primeiro passo será criar um grupo de cluster através da opção Cluster Groups e botão Create. Fig. 7.19: Criar Cluster Groups no Rancher - ETAPA 2 Defina o nome cluster-gke e clique novamente no botão Create. 326 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.20: Criar Cluster Groups no Rancher - ETAPA 3 E clique no nome do grupo para obter mais informações. Fig. 7.21: Criar Cluster Groups no Rancher - ETAPA 4 Na lista é possível observar os cluster 1 e 2 contendo quatro nós cada! 327 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.22: Criar Cluster Groups no Rancher - ETAPA 5 Definir label nos Clusters Para definir labels em cada cluster, clique no ícone com três pontinhos referente ao cluster 1 e selecione a opção Assign to. . . Fig. 7.23: Definir label nos Clusters - ETAPA 1 Clique no botão Add/Set Label para adicionar um novo label. 328 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.24: Definir label nos Clusters - ETAPA 2 Defina os seguintes valores: • Key: env • Value: test Clique no botão Apply para registrar o Label. Fig. 7.25: Definir label nos Clusters - ETAPA 3 Vamos repetir o mesmo processo com o cluster 2 clicando no ícone com três pontinhos e 329 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com selecionando a opção Assign to. . . Fig. 7.26: Definir label nos Clusters - ETAPA 4 Clique no botão Add/Set Label para adicionar um novo label. Fig. 7.27: Definir label nos Clusters - ETAPA 5 Defina os seguintes valores: • Key: env • Value: test 330 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Clique no botão Apply para registrar o Label. Fig. 7.28: Definir label nos Clusters - ETAPA 6 Para verificar se os clusters possuem agora um Label, clique no nome de cada um. Fig. 7.29: Definir label nos Clusters - ETAPA 7 Visualize as informações através do título Labels:. 331 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.30: Definir label nos Clusters - ETAPA 8 Fig. 7.31: Definir label nos Clusters - ETAPA 9 Wordpress no Rancher WordPress é um sistema de gerenciamento de conteúdo (CMS) baseado em PHP e MySQL que geralmente é usado para executar um blog ou um site. Ele pode ser usado em um servidor web que esteja executando Apache, Nginx ou qualquer outro software de servidor web. O WordPress também está disponível como uma plataforma auto-hospedada, o que significa que você pode instalá-lo em seu próprio servidor web. Para provisionar o Wordpress no Rancher, vamos precisar: • Executar deploy de Backend armazenamento em bloco distribuído (MySQL) • Executar deploy de Frontend com NFS (Wordpress) 332 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Lab 7.3 - Realizar Deploy Single Cluster com Fleet Neste laboratório vamos aprender como provisionar a aplicação Wordpress através do processo de Continuous Delivery no Rancher. Visualizar repositório single-cluster no GitHub Para começar vamos acessar o repositório fleet-rancher no Github da 4linux. Selecione a pasta single-cluster que possui os arquivos necessários para provisionar a aplicação Wordpress (banco + servidor web) em um cluster Kubernetes. Fig. 7.32: Visualizar repositório single-cluster no GitHub - ETAPA 1 Cada pasta contem manifestos para implementar os recursos que o Wordpress ira utilizar no cluster Kubernetes. 333 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.33: Visualizar repositório single-cluster no GitHub - ETAPA 2 O arquivo fleet.yaml define em qual namespace o Wordpress sera provisionado no cluster. Fig. 7.34: Visualizar repositório single-cluster no GitHub - ETAPA 3 Realizar Deploy Single Cluster com Fleet Retorne ao painel do Rancher e crie um novo repositório para o Wordpress, através da opção Git Repos e o botão Create. 334 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.35: Realizar Deploy Single Cluster com Fleet - ETAPA 1 Preencha as seguintes informações para o novo repositório: • Name: wordpress-gitops • Repository URL: https://github.com/4linux/fleet-rancher.git • Branch Name: main Fig. 7.36: Realizar Deploy Single Cluster com Fleet - ETAPA 2 O proximo passo é clicar nbo botão Add Path para definir em qual caminho no repositório do Github, vamos encontrar os arquivos necessários para provisionar a aplicação Wordpress. 335 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.37: Realizar Deploy Single Cluster com Fleet - ETAPA 3 Informe single-cluster. Fig. 7.38: Realizar Deploy Single Cluster com Fleet - ETAPA 4 Role a página e selecione na caixa Target o cluster onde vamos aplicar as configurações do repositório do Github. Em nosso exemplo selecione o cluster1-gke. 336 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.39: Realizar Deploy Single Cluster com Fleet - ETAPA 5 Para finalizar a criação do repositório clique no botão Create. Fig. 7.40: Realizar Deploy Single Cluster com Fleet - ETAPA 6 Ao terminar de aplicar os recursos, verifique se o estado está como Active e clique no nome do repositório. 337 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.41: Realizar Deploy Single Cluster com Fleet - ETAPA 7 Como resultado final sera exibido quais recursos foram aplicados no cluster cluster1gke. Fig. 7.42: Realizar Deploy Single Cluster com Fleet - ETAPA 8 Para visualizar os recursos selecione em EXPORE CLUSTER o cluster cluster1-gke. 338 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.43: Realizar Deploy Single Cluster com Fleet - ETAPA 9 É possível observar que uma nova aplicaçõa foi instalada no cluster. Clique em Installed Apps e procure o nome wordpress-gitops-single-cluster. Fig. 7.44: Realizar Deploy Single Cluster com Fleet - ETAPA 10 Acessar e configurar aplicação Wordpress Vamos acessar a aplicação Wordpress através de endereço de serviço. Clique em Services e depois no endereço de NodePort que foi gerado. 339 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.45: Acessar e configurar aplicação Wordpress - ETAPA 1 Realize a instalação do WordPress a partir do idioma Português do Brasil. Fig. 7.46: Acessar e configurar aplicação Wordpress - ETAPA 2 E preencha as seguintes informações: • • • • Título do site: Wordpress GitOps Rancher Nome do usuário: admin Senha: Digite uma senha O seu e-mail: admin@4labs.example 340 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Clique no botão Instalar Wordpress para continuar. Fig. 7.47: Acessar e configurar aplicação Wordpress - ETAPA 3 Teste o acesso através do usuário admin e a senha que você definiu na etapa anterior. Fig. 7.48: Acessar e configurar aplicação Wordpress - ETAPA 4 Para visitar a página selecione na parte superior e ao lado esquerdo da tela, o link Visitar site. 341 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.49: Acessar e configurar aplicação Wordpress - ETAPA 5 Como resultado final temos uma aplicação instalada no cluster Kubernetes, através do processo Continuous Delivery do Rancher. Fig. 7.50: Acessar e configurar aplicação Wordpress - ETAPA 6 Lab 7.4 - Instalar aplicação Helm via Fleet Neste laboratório vamos aprender como provisionar a aplicação nfs-subdir-external-provisioner através do processo de Continuous Delivery no Rancher. 342 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Criar Fork do repositório fleet-rancher no GitHub Acesse novamente o repositório fleet-rancher no Github da 4linux e crie uma cópia para sua conta através do link Fork. Fig. 7.51: Criar Fork do repositório fleet-rancher no GitHub - ETAPA 1 Confirme o nome do repositório fleet-rancher e clique no botão Create fork. Fig. 7.52: Criar Fork do repositório fleet-rancher no GitHub - ETAPA 2 343 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Verifique se o repositório fleet-rancher agora esta presente em sua conta do GitHub. Fig. 7.53: Criar Fork do repositório fleet-rancher no GitHub - ETAPA 3 Alterar dados do repositório fleet-rancher Antes de aplicar novas configurações vamos mudar o ip do servidor NFS presente na pasta helm. Fig. 7.54: Alterar dados do repositório fleet-rancher - ETAPA 1 344 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com E no arquivo values.yaml. Fig. 7.55: Alterar dados do repositório fleet-rancher - ETAPA 2 É preciso clique no link Edit this file para realizar a alteração de conteúdo. Fig. 7.56: Alterar dados do repositório fleet-rancher - ETAPA 3 Mude valor da diretiva server na minha 14, informando o IP público da estância nfs-server. 345 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.57: Alterar dados do repositório fleet-rancher - ETAPA 4 Para copiar o IP público da estância nfs-server, alterne para o painel da GCP e copie na coluna IP Externo essa informação. Fig. 7.58: Alterar dados do repositório fleet-rancher - ETAPA 5 Retorne ao painel do Github e clique no botão Commit changes. 346 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.59: Alterar dados do repositório fleet-rancher - ETAPA 6 Instalar aplicação Helm no cluster cluster2-gke Retorne a área de Continuous Deliveryno Rancher para criar um novo repositório para a aplicação nfs-subdir-external-provisioner, através da opção Git Repos e o botão Create. Fig. 7.60: Instalar aplicação Helm no cluster cluster2-gke - ETAPA 1 Preencha as seguintes informações para o novo repositório: • Name: helm-gitops • Repository URL: https://github.com//fleet-rancher.git • Branch Name: main 347 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.61: Instalar aplicação Helm no cluster cluster2-gke - ETAPA 2 O proximo passo é clicar no botão Add Path para definir o camnho helm, sendo a pasta que armazena os arquivos necessários para provisionar a aplicação nfs-subdir-external-provisioner. Na caixa Target selecione o cluster2-gke. Fig. 7.62: Instalar aplicação Helm no cluster cluster2-gke - ETAPA 3 Para finalizar a criação do repositório clique no botão Create. Fig. 7.63: Instalar aplicação Helm no cluster cluster2-gke - ETAPA 4 348 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Ao terminar de aplicar os recursos, verifique se o estado está como Active e clique no nome do repositório helm-gitops para visualizar quais recursos foram aplicados no cluster cluster2gke. Fig. 7.64: Instalar aplicação Helm no cluster cluster2-gke - ETAPA 5 Para visualizar os recursos selecione em EXPORE CLUSTER o cluster cluster2-gke. Fig. 7.65: Instalar aplicação Helm no cluster cluster2-gke - ETAPA 6 349 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com É possível observar que uma nova aplicação foi instalada no cluster! Clique em Installed Apps e procure o nome helm-gitops-helm. Fig. 7.66: Instalar aplicação Helm no cluster cluster2-gke - ETAPA 7 Verifique se o StorageClass nfs-client foi criado no cluster cluster2-gke. Fig. 7.67: Instalar aplicação Helm no cluster cluster2-gke - ETAPA 8 350 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Lab 7.5 - Realizar Deploy Multi Cluster com Fleet Neste laboratório vamos aprender como realizar o deploy em Multi Cluster com Fleet. Visualizar repositório multi-cluster no GitHub Para começar vamos acessar o repositório fleet-rancher no Github da 4linux. Selecione a pasta multi-cluster que possui os arquivos necessários para provisionar duas versões de uma aplicação PHP, que usa como backend um banco MySQL. Fig. 7.68: Visualizar repositório multi-cluster no GitHub - ETAPA 1 Em seguida clique no arquivo fleet.yaml para conhecer as configurações de cada versão da aplicação PHP. 351 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.69: Visualizar repositório multi-cluster no GitHub - ETAPA 2 Verifique que no cluster1-gke vamos aplicar a versão 1 com storage NFS e em escala, já no cluster2-gke vamos aplicar a versão 1 com storage NFS. Fig. 7.70: Visualizar repositório multi-cluster no GitHub - ETAPA 3 Realizar Deploy Multi Cluster com Fleet Retorne ao painel do Rancher e crie um novo repositório, através da opção Git Repos e o botão Create. 352 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.71: Realizar Deploy Multi Cluster com Fleet - ETAPA 1 Preencha as seguintes informações para o novo repositório: • Name: app-version-gitops • Repository URL: https://github.com//fleet-rancher.git • Branch Name: main Fig. 7.72: Realizar Deploy Multi Cluster com Fleet - ETAPA 2 O próximo passo é clicar no botão Add Path para definir em qual caminho no repositório do Github, vamos encontrar os arquivos necessários para provisionar a aplicação PHP. Informe multi-cluster. 353 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.73: Realizar Deploy Multi Cluster com Fleet - ETAPA 3 Role a página e selecione na caixa Target o cluster onde vamos aplicar as configurações do repositório do Github. Em nosso exemplo selecione o grupo de clusters cluster-gke. Fig. 7.74: Realizar Deploy Multi Cluster com Fleet - ETAPA 4 Para finalizar a criação do repositório clique no botão Create. 354 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.75: Realizar Deploy Multi Cluster com Fleet - ETAPA 5 Ao terminar de aplicar os recursos, verifique se o estado está como Active e clique no nome do repositório app-version-gitops. Fig. 7.76: Realizar Deploy Multi Cluster com Fleet - ETAPA 6 Como resultado final sera exibido quais recursos foram aplicados nos cluster cluster1gke e cluster2-gke. 355 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.77: Realizar Deploy Multi Cluster com Fleet - ETAPA 7 Acessando aplicações nos clusters Para visualizar os recursos do primeiro cluster, selecione em EXPORE CLUSTER o cluster cluster1-gke. Fig. 7.78: Acessando aplicações nos clusters - ETAPA 1 Vamos acessar a aplicação PHP através de endereço de serviço. 356 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Clique em Services e depois no endereço de NodePort que foi gerado. Fig. 7.79: Acessando aplicações nos clusters - ETAPA 2 Verifique que a aplicação PHP versão 1 possui o login na cor azul. Fig. 7.80: Acessando aplicações nos clusters - ETAPA 3 Para visualizar os recursos do segundo cluster, selecione em EXPORE CLUSTER o cluster cluster2-gke. 357 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.81: Acessando aplicações nos clusters - ETAPA 4 Vamos acessar a aplicação PHP através de endereço de serviço. Clique em Services e depois no endereço de NodePort que foi gerado. Fig. 7.82: Acessando aplicações nos clusters - ETAPA 5 Verifique que a aplicação PHP versão 2 possui o login na cor verde. 358 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.83: Acessando aplicações nos clusters - ETAPA 6 Lab 7.6 - Realizar mudanças via Git CLI Neste laboratório vamos atualizar o conteúdo de um deploy no Kubernetes através do comando git. Configurar chaves SSH no Github Através da instância custom, abra uma conexão SSH! Em seguida, crie as chaves privada e publica do SSH: ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/home/suporte/.ssh/id_rsa): <ENTER> Created directory '/home/suporte/.ssh'. Enter passphrase (empty for no passphrase): <ENTER> Enter same passphrase again: <ENTER> Verifique se a chave publica id_rsa.pub foi criada corretamente: ls .ssh/ cat .ssh/id_rsa.pub 359 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com E copie seu conteúdo: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC0aRnJ8ITsLCmawex4gmwlaw5Qcky6vYWpxx3tdGeMijR2+ JByhShcnnDBOXDhoPXRQTH4daAMEPd5iDXicTUx78ynBKvppfTfo8q0m1vCD6lj9OVqKVYA2G/ OgDbrLy7dmTE38wOayLF8R0ht78O9B7pKtJj8UUWVCfQ/z/QVzzwMlsTYMSRUO4mGcFOA/51 OTvdBjHV5GE4JoVcpGtV/mxt/iYwV9/ FcgMLU2U0HGcX4oFs8ILQwu1CDmGVIrZQPbfKjlp3hvYI2gEi8pOTpLqXzZnV/u+h/Iq2J+9/8 WEYb2W41XxOsjwLSOoZoTsTxXlbxLpj0y5f427+ql/T+IxiRC5dc6KLhMIVv/S+5b/9 w2P6aWcszn72U6jDwvgZTgz/UUQXXG6CpFebCt/ bW7trOkLRjYrAbJdNIBnf82hGv9O0Pds2WGg4f5QDDrOgzvkciC9i4C6lGG7Ur4GbeLOn+ iijvK4BD3baAi6hOZUOKV/Bw5NwNc09oJKiAmG1ulIRScJp4kN9xw4U/OhVNkKbc5cIZQx8lzVG+1 zD4j2UxhnsBLND8hJRGJF48uBNHjJCdGsgnV5aU7tTSQJ1/Qt4VEJSYDI+ dzJMkFO8Yq80whatAJyc1nN5txBDLVXH+ifN8FhZOx/tGG0solh+vSuwn1oKUvLtxMy2lfNUFkQ== aluno@custom Acesse sua conta no Github e selecione a opção Settings na parte superior direita da tela. Fig. 7.84: Configurar chaves SSH no Github - ETAPA 1 Em seguida clique em SSH and GPGP Keys lado esquerdo da tela. 360 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.85: Configurar chaves SSH no Github - ETAPA 2 E depois clique no botão New SSH key. Fig. 7.86: Configurar chaves SSH no Github - ETAPA 3 Na caixa Title digite chave-curso-rancher e na caixa Key cole o conteúdo do arquivo id_rsa.pub. Para terminar clique no botão Add SSH key. 361 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.87: Configurar chaves SSH no Github - ETAPA 4 Fig. 7.88: Configurar chaves SSH no Github - ETAPA 5 Atualizar conteúdo do repositório Github Retorne a instância custom e instale o pacote cliente do Github: sudo apt install git -y Os primeiros comandos do git é definir o nome de usuário, e-mail e método de push: git config --global user.name "Suporte" git config --global user.email "suporte-devops@example.org" git config --global push.default simple 362 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Clone o repositório wordpress de sua conta do GitHub: git clone git@github.com:<SUA_CONTA_NO_GITHUB>/fleet-rancher.git E acesse o diretório fleet-rancher/multi-cluster. cd fleet-rancher/multi-cluster Edite o arquivo fleet.yaml através do comando vim. vim fleet.yaml E mude as versões das aplicações em cada cluster. --namespace: gitops targetCustomizations: - name: cluster1-gke clusterSelector: matchLabels: env: test yaml: overlays: - version2 - nfs - scale - name: cluster2-gke clusterSelector: matchLabels: env: homolog yaml: overlays: - version1 - nfs Adicione o arquivo atualizado em seu repositório local: git add fleet.yaml 363 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Confirme os arquivos que você colocou no seu repositório adicionando um comentário: git commit -m "Atualizando versões das aplicações" Envie as alterações no seu repositório local para o GitHub através do subcomando push. git push Acessando aplicações atualizadas nos clusters Após as alterações via comando git, é possivel notar que o repositório app-version-gitops esta sendo atualizado. Fig. 7.89: Acessando aplicações atualizadas nos clusters - ETAPA 1 Clique em Services no primeiro cluster e depois no endereço de NodePort que foi gerado. 364 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.90: Acessando aplicações atualizadas nos clusters - ETAPA 2 Verifique que a aplicação PHP versão 1 possui o login na cor verde. Fig. 7.91: Acessando aplicações atualizadas nos clusters - ETAPA 3 Clique em Services no segundo cluster e depois no endereço de NodePort que foi gerado. 365 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.92: Acessando aplicações atualizadas nos clusters - ETAPA 4 Verifique que a aplicação PHP versão 2 possui o login na cor azul. Fig. 7.93: Acessando aplicações atualizadas nos clusters - ETAPA 5 Removendo aplicações no Fleet Retorne ao Rancher e na área de Continuous Delivery, selecione todos os repositórios e clique no botão Delete. 366 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.94: Removendo aplicações no Fleet - ETAPA 1 Confirme a remoção a partir do botão Delete. Fig. 7.95: Removendo aplicações no Fleet - ETAPA 2 367 7. GitOps at Scale com Fleet Caique Araujo / caiquearaujoac@gmail.com Fig. 7.96: Removendo aplicações no Fleet - ETAPA 3 Caique Araujo / caiquearaujoac@gmail.com 8 Gerenciamento de Logs Competências da Aula • • • • • • Introdução a pilha ELK (ElasticSearch + Logstash + Kibana) Instalação do K3S e Helm na VM custom Deploy da pilha ELK via Helm Banzai Cloud Logging Operator Configurar envio de logs do cluster para o Elasticsearch Visualizar logs de Pods através do Kibana ELK ELK significa Elasticsearch, Logstash e Kibana. A pilha ajuda os usuários a obter dados de qualquer fonte, analisá-los e indexá-los em vários servidores. O Elasticsearch é um mecanismo de pesquisa orientado a documentos que armazena todos os seus dados no formato JSON. É sem esquema, o que significa que pode indexar e pesquisar qualquer tipo de dados sem precisar primeiro estruturar esses dados. O Elasticsearch é distribuído, o que significa que pode ser dimensionado horizontalmente com muita facilidade. Também é muito rápido e é capaz de pesquisar e filtrar grandes quantidades de dados muito rapidamente. O Logstash é uma ferramenta para gerenciar eventos e logs. Ele pode coletar, analisar e armazenar logs para uso posterior. O Logstash é de código aberto e pode se integrar a uma 368 369 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com ampla variedade de outras ferramentas de código aberto. O Kibana é uma interface web para Elasticsearch. Ele pode ser usado para pesquisar e visualizar dados armazenados no Elasticsearch. O Kibana é de código aberto e está disponível para download gratuito. K3S K3s é um servidor de Kubernetes de código aberto projetado para ser executado em ambientes de baixa largura de banda ou de dispositivos de baixo poder. K3s suporta a maioria das funcionalidades do Kubernetes, incluindo a orquestração de contêineres, implantação de aplicativos e gerenciamento de cluster. Além disso, K3s é compatível com a maioria dos aplicativos e ferramentas Kubernetes existentes. Lab 8.1 - Instalação do K3S e Helm na VM custom Neste laboratório vamos aprender como instalar o K3S na instância custom na GCP. Instalação do K3S Para iniciar a instalação do K3S na instância custom, acesse o painel da GCP e selecione a opção Abrir uma janela do navegador. Fig. 8.1: Instalação do K3S na VM custom - ETAPA 1 Em seguida realize a instalação K3Ss através do seguinte comando: curl -sfL https://get.k3s.io | sh - 370 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Aguarde alguns segundos e liste os nodes através do seguinte comando: sudo k3s kubectl get nodes Instalação do Helm Antes de instalar o Helm, vamos alternar para a conta do usuário root: sudo su - Instale o Helm através do comando snap: snap install helm --classic E declare na variável KUBECONFIG o caminho do arquivo export KUBECONFIG=/etc/rancher/k3s/k3s.yaml Para testar a instalação do Helm execute o comando helm Resultado esperado: helm: k3s.yaml. 371 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.2: Instalação do Helm na VM custom Lab 8.2 - Instalação do ElasticSearch e Kibana via Helm Neste laboratório vamos aprender como instalar o ElasticSearch e Kibana via Helm no cluster K3S. Adicionar repositório Elastic Execute os comandos necessários para adicionar o repositório do ElasticSearch. helm repo add elastic https://helm.elastic.co helm repo update helm repo list Resultado esperado: 372 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.3: Repositório Elastic adicionado na VM custom Instalação do ElasticSearch Vamos baixar o arquivo que possui as os valores necessários para realizar a instalação do ElasticSearch. curl -O https://raw.githubusercontent.com/4linux/543/main/elasticsearch/values.yaml Verifique se o arquivo values.yaml possui os seguintes valores: cat values.yaml Resultado esperado: --antiAffinity: "soft" esJavaOpts: "-Xmx128m -Xms128m" resources: requests: cpu: "300m" memory: "1024M" limits: cpu: "1500m" memory: "1024M" volumeClaimTemplate: accessModes: [ "ReadWriteOnce" ] storageClassName: "local-path" resources: requests: storage: "100M" service: type: "LoadBalancer" 373 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Para realizar e checar a instalação do ElasticSearch execute os seguintes comandos: helm install elasticsearch elastic/elasticsearch -f ./values.yaml helm list kubectl get pods,service -l app=elasticsearch-master Resultado esperado: Fig. 8.4: Instalação do ElasticSearch na VM custom Realizar instalação do Kibana Para realizar e checar a instalação do Kibana execute os seguintes comandos: helm install kibana elastic/kibana --set service.type="LoadBalancer" helm list kubectl get pods,service -l app=kibana Resultado esperado: Fig. 8.5: Instalação do Kibana na VM custom 374 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Checar instalação do ElasticSearch e Kibana Para testar instalação do ElasticSearch e Kibana, copie o IP externo da instância custom. Fig. 8.6: Checar instalação do ElasticSearch e Kibana - ETAPA 1 Verifique se é possível acessar o ElasticSearch digite em seu navegador o IP externo da instância custom e a porta 9200. Fig. 8.7: Checar instalação do ElasticSearch e Kibana - ETAPA 2 Para visualizar os indices presentes no ElasticSearch, adicione o caminho /_cat/indices ao final do endereço. 375 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.8: Checar instalação do ElasticSearch e Kibana - ETAPA 3 Verifique se é possível acessar o Kibana digite em seu navegador o IP externo da instância custom e a porta 5601. Fig. 8.9: Checar instalação do ElasticSearch e Kibana - ETAPA 4 Banzai Cloud Logging Operator O Operador Banzai Cloud Logging é um operador Kubernetes usado para automatizar o gerenciamento de logs na plataforma Banzai Cloud Pipeline. O Operador de Log lida com a implantação e o gerenciamento de componentes de log em um ambiente nativo da nuvem. Ele fornece uma camada de abstração sobre a orquestração de contêiner subjacente (Docker Compose, Kubernetes e assim por diante) para facilitar a implantação e o gerenciamento do registro de aplicativos nativos da nuvem. O Operador de Log pode ser usado para implantar os seguintes componentes de log: • Fluentd • Elasticsearch • Kibana 376 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Flow e ClusterFlow O Flow (fluxo) define quais logs coletar e filtrar e para qual saída enviar os logs. O Flow é um recurso com namespace, o que significa que os logs serão coletados apenas do namespace em que o Flow está implantado. O ClusterFlow tem escopo no nível do cluster e pode configurar a coleta de logs em todos os namespaces. Depois que o ClusterFlow seleciona logs de todos os namespaces no cluster, os logs do cluster serão coletados e registrados no ClusterOutput selecionado. Lab 8.3 - Instalar Cloud Logging no Rancher Neste laboratório vamos aprender como instalar o operador de logs no Rancher. Vamos instalar operador de logs no cluster1-gke através do botão Cluster Tools. Fig. 8.10: Instalar Cloud Logging no Rancher - ETAPA 1 Em seguida clique no botão Install localizado em Logging. 377 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.11: Instalar Cloud Logging no Rancher - ETAPA 2 Selecione o projeto Default e a opção Customize Helm options before install e clique no botão Next e novamente Next para continuar. Fig. 8.12: Instalar Cloud Logging no Rancher - ETAPA 3 378 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.13: Instalar Cloud Logging no Rancher - ETAPA 4 Para iniciar a instalação do pacote clique no botão Install. Fig. 8.14: Instalar Cloud Logging no Rancher - ETAPA 5 Após a instalação exibir a mensagem SUCCESS clique no ícone para fechar o terminal. 379 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.15: Instalar Cloud Logging no Rancher - ETAPA 6 Lab 8.4 - Configurar envio de logs do cluster para o Elasticsearch Neste laboratório vamos aprender como configurar o envio de logs do cluster para o Elasticsearch. Configurar Output de Logs do Cluster Vamos configurar para onde os logs do cluster serão enviados, através da opção ClusterOutputs e depois no botão Create. Fig. 8.16: Configurar Output de Logs do Cluster - ETAPA 1 E preenche as seguintes informações: • Name: cluster1-gke-output 380 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com • • • • • Output: Elasticsearch Scheme: http Host: Informe o IP Público da instância custom Port: 9200 Index Name: cluster1-gke-output Fig. 8.17: Configurar Output de Logs do Cluster - ETAPA 2 Role até o final da página e clique no botão Create para criar a saida de logs do cluster. Fig. 8.18: Configurar Output de Logs do Cluster - ETAPA 3 381 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Configurar Flows de Logs do Cluster Vamos configurar quais logs coletar e filtrar e para qual saída enviar os logs, através da opção ClusterFlows e depois no botão Create. Fig. 8.19: Configurar Flows de Logs do Cluster - ETAPA 1 Defina o nome cluster1-gke-flow e clique em Outputs. Fig. 8.20: Configurar Flows de Logs do Cluster - ETAPA 2 Selecione na caixa Cluster Outputs a opção cluster1-gke-output e depois no botão Create. 382 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.21: Configurar Flows de Logs do Cluster - ETAPA 3 Lab 8.5 - Configurar envio de logs de aplicações para o Elasticsearch Neste laboratório vamos aprender como configurar o envio de logs da aplicação webserver para o Elasticsearch. Configurar output de logs de aplicações Vamos configurar para onde os logs da aplicação webserver serão enviados, através da opção Outputs e depois no botão Create. Fig. 8.22: Configurar output de logs de aplicações - ETAPA 1 383 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com E preenche as seguintes informações: • • • • • • • Namespace: devops Name: webserver-output Output: Elasticsearch Scheme: http Host: Informe o IP Público da instância custom Port: 9200 Index Name: webserver-output Fig. 8.23: Configurar output de logs de aplicações - ETAPA 2 Role até o final da página e clique no botão Create para criar a saida de logs da aplicação webserver. 384 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.24: Configurar output de logs de aplicações - ETAPA 3 Configurar Flow de Logs de aplicações Vamos configurar quais logs coletar e filtrar e para qual saída enviar os logs, através da opção Flows e depois no botão Create. Fig. 8.25: Configurar Flow de logs de aplicações - ETAPA 1 E preenche as seguintes informações: • Namespace: devops • Name: webserver-flow • Pod Label Key: app 385 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com • Pod Label Value: php Em seguida clique na opção Outputs. Fig. 8.26: Configurar Flow de logs de aplicações - ETAPA 2 Selecione na caixa Outputs a opção webserver-output e depois no botão Create. Fig. 8.27: Configurar Flow de logs de aplicações - ETAPA 3 386 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Lab 8.6 - Indexar logs no Kibana Neste laboratório vamos aprender como indexar logs do cluster Kubernetes no Kibana. Gerando logs no cluster Antes de visualizar logs no Kibana acesse o deploy e pod do webserver. Fig. 8.28: Gerando logs no cluster - ETAPA 1 Em seguida remova o pod do webserver através da opção Delete. Fig. 8.29: Gerando logs no cluster - ETAPA 2 387 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.30: Gerando logs no cluster - ETAPA 3 Alterne para lista de serviços e acesse o IP do serviço NodePort do webserver. Fig. 8.31: Indexar logs no Kibana - ETAPA 4 388 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.32: Indexar logs no Kibana - ETAPA 5 Indexar logs no Kibana Verifique se é possível visualizar os novos indices presentes no ElasticSearch, digitando em seu navegador o IP externo da instância custom na porta 9200, e o caminho /_cat/indices ao final do endereço. Fig. 8.33: Indexar logs no Kibana - ETAPA 1 Acesse novamente o Kibana digite em seu navegador o IP externo da instância custom e a porta 5601. E caixa de pesquisas vamos digitar e selecionar Index Patterns. 389 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.34: Indexar logs no Kibana - ETAPA 2 Para criar uma nova indexção, clique no link Create index pattern. Fig. 8.35: Indexar logs no Kibana - ETAPA 3 Na caixa Name digite cluster* e selecione na caixa Timestamp field o campo time. Para finalizar clique no link Create index pattern. 390 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.36: Indexar logs no Kibana - ETAPA 4 Como resultado podemos visualizar os campos de pesquisas para logs do cluster Kubernetes. Fig. 8.37: Indexar logs no Kibana - ETAPA 5 Novamente acesse a caixa de pesquisas para digitar e selecionar Index Patterns. 391 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.38: Indexar logs no Kibana - ETAPA 6 E novamente clique no link Create index pattern para criar uma nova indexação. Fig. 8.39: Indexar logs no Kibana - ETAPA 7 Na caixa Name digite webserver* e selecione na caixa Timestamp field o campo time. Para finalizar clique no link Create index pattern. 392 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.40: Indexar logs no Kibana - ETAPA 8 Como resultado podemos visualizar os campos de pesquisas para logs da aplicação webserver. Fig. 8.41: Indexar logs no Kibana - ETAPA 9 Lab 8.7 - Visualizar logs de Pods através do Kibana Neste laboratório vamos aprender como visualizar logs de Pods através do Kibana. 393 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Visualizar logs do Cluster Para visualizar os logs selecione a opção Discovery ao lado esquerdo da tela. Fig. 8.42: Visualizar logs no Kibana - ETAPA 1 Para alterar a data de criação dos logs, clique no ícone ao lado de Last 15 minutes. Fig. 8.43: Visualizar logs no Kibana - ETAPA 2 Faça o teste visualizando o conteúdo de log do cluster: 394 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.44: Visualizar logs no Kibana - ETAPA 3 Fig. 8.45: Visualizar logs no Kibana - ETAPA 4 395 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Visualizar logs da aplicação Para avisar os logs aplicação no Kibana, vamos selecionar a opção webserver* ao lado esquerdo da tela abaixo de + Add filter. Fig. 8.46: Visualizar logs da aplicação - ETAPA 1 Faça o teste visualizando o conteúdo de log da aplicação webserver. 396 8. Gerenciamento de Logs Caique Araujo / caiquearaujoac@gmail.com Fig. 8.47: Visualizar logs da aplicação - ETAPA 2 Fig. 8.48: Visualizar logs da aplicação - ETAPA 3 Caique Araujo / caiquearaujoac@gmail.com 9 Gerenciar Monitoramento Competências da Aula • • • • • • • • Introdução ao Prometheus e Grafana Ativar monitoramento no Rancher Visualizar métricas no Prometheus Deploy do Apache Exporter Configurar Service Monitors Visualizar e Adicionar Dashboards no Grafana Configurar e Visualizar Prometheus Rule Configurar integração entre Prometheus e Slack Introdução ao Prometheus e Grafana Prometheus é um sistema de monitoramento e alerta open-source. Ele é feito para coletar, armazenar e permitir que você visualize métricas em tempo real. Ele pode ser usado para analisar o desempenho e a estabilidade de um servidor, e também para gerar alertas se houver problemas. Grafana é um programa open-source que pode ser usado para criar painéis e dashboards de métricas. Ele pode ser integrado com Prometheus para fornecer uma interface gráfica para analisar os dados coletados pelo Prometheus. 397 398 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Lab 9.1 - Ativar monitoramento no Rancher Neste laboratório vamos aprender como instalar o operador de monitoramento no Rancher. Vamos instalar operador de monitoramento no cluster2-gke através do botão Cluster Tools. Fig. 9.1: Ativar monitoramento no Rancher no Rancher - ETAPA 1 Em seguida clique no botão Install localizado em Monitoring. Fig. 9.2: Ativar monitoramento no Rancher no Rancher - ETAPA 2 Selecione o projeto Default e a opção Customize Helm options before install e clique no botão Next para continuar. 399 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.3: Ativar monitoramento no Rancher no Rancher - ETAPA 3 Em General vamos apenas selecionar Use Host Network For Prometheus Operator. Fig. 9.4: Ativar monitoramento no Rancher no Rancher - ETAPA 4 Em Prometheus deixe as opções padrão. 400 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.5: Ativar monitoramento no Rancher no Rancher - ETAPA 5 Em Alerting vamos apenas selecionar Deploy Alertmanager. Fig. 9.6: Ativar monitoramento no Rancher no Rancher - ETAPA 6 Em Grafana deixe as opções padrão e depois clique em Edit YAML. 401 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.7: Ativar monitoramento no Rancher no Rancher - ETAPA 7 Altere os valores das linhas 8 até 12 conforme o exemplo abaixo e clique no botão Next para continuar. Fig. 9.8: Ativar monitoramento no Rancher no Rancher - ETAPA 8 Para iniciar a instalação do pacote clique no botão Install. 402 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.9: Ativar monitoramento no Rancher no Rancher - ETAPA 9 Após a instalação exibir a mensagem SUCCESS clique no ícone para fechar o terminal. Fig. 9.10: Ativar monitoramento no Rancher no Rancher - ETAPA 10 Uma vez que operador de monitoramento foi instalado, clique no novo menu Monitoring ao lado esquerdo da tela. 403 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.11: Ativar monitoramento no Rancher no Rancher - ETAPA 11 Como resultado agora temos um Dashboard com opções de gerenciamento do Prometheus e Grafana. Fig. 9.12: Ativar monitoramento no Rancher no Rancher - ETAPA 12 Lab 9.2 - Visualizar Targets e Service Discovery no Prometheus Neste laboratório vamos aprender como visualizar Targets e Service Discovery no painel do Prometheus. Vamos começar visualizando os alvos de monitoramento do Prometheus, através do link Prometheus Targets. 404 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.13: Visualizar Targets e Service Discovery no Prometheus - ETAPA 1 Para visualizar os Service Discovery clique no menu Status. Fig. 9.14: Visualizar Targets e Service Discovery no Prometheus - ETAPA 2 Resultado esperado: 405 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.15: Visualizar Targets e Service Discovery no Prometheus - ETAPA 3 Lab 9.3 - Deploy do Apache Exporter Neste laboratório vamos aprender como realizar o deploy do Apache Exporter para coletar métricas de uma aplicação Apache. O Apache Exporter reúne estatísticas do módulo mod_status do Apache via HTTP para consumo do Prometheus. Realizar Deploy do Apache Exporter Vamos começar criando um novo deploy através da opção Deployments -> Create. 406 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.16: Deploy do Apache Exporter - ETAPA 1 Vamos criar um deploy coma as seguintes informações: • • • • Name: apache Replicas: 1 Container Name: apache Container Image: ubuntu/apache2 • Clique em Labels & Annotations ao lado esquerdo da tela e depois no botão Add Label (em Pod Labels). Digite app caixa Key, e apache-exporter na caixa Value. 407 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.17: Deploy do Apache Exporter - ETAPA 3 Vamos executar no mesmo Pod o exportar do apache, e será necessário adicionar um novo container através da Opção Add Container na caixa Cointainer. Fig. 9.18: Deploy do Apache Exporter - ETAPA 4 Preencha as seguintes informações para o novo container: • Container Name: apache-exporter • Container Image: bitnami/apache-exporter 408 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.19: Deploy do Apache Exporter - ETAPA 5 Na área de Ports preencha as seguintes informações: • • • • Service Type: Do not create Name: apache-exporter Private Container Port: 9117 Protocol: TCP Fig. 9.20: Deploy do Apache Exporter - ETAPA 6 Feitos os ajustes clique no botão Create para criar um novo deploy. 409 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.21: Deploy do Apache Exporter - ETAPA 7 Clique no deploy apache para visualizar os Pods. Fig. 9.22: Deploy do Apache Exporter - ETAPA 8 E clique no Pod do apache. 410 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.23: Deploy do Apache Exporter - ETAPA 9 Confirme se o container do apache e do exportador foram criados dentro do Pod! Fig. 9.24: Deploy do Apache Exporter - ETAPA 10 Criar serviço e acessar aplicação Apache Para configurar um novo serviço, clique opção Services e depois clique no botão Create: 411 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.25: Criar serviço e acessar aplicação Apache - ETAPA 1 Na lista de serviços vamos selecionar NodePort. Fig. 9.26: Criar serviço e acessar aplicação Apache - ETAPA 2 Preencha as seguintes informações para o novo serviço: • • • • Name: apache Port Name: apache-port Listening Port: 80 Target Port: 80 412 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.27: Criar serviço e acessar aplicação Apache - ETAPA 3 Clique em Selectors e digite app na caixa Key e apache-exporter na caixa Value. Para criar o serviço clique no botão Create. Fig. 9.28: Criar serviço e acessar aplicação Apache - ETAPA 4 Para testar o acesso ao serviço do Apache, clique no porta do serviço que esta na coluna Target. 413 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.29: Criar serviço e acessar aplicação Apache - ETAPA 5 Como resultado final temos a página padrão do Apache, sendo acessada pelo IP e porta gerada pelo serviço NodePort. Fig. 9.30: Criar serviço e acessar aplicação Apache - ETAPA 6 Criar serviço e visualizar métricas do Apache Clique novamente no botão Create para criar um serviço para o exportador do apache. 414 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.31: Criar serviço e visualizar métricas do Apache - ETAPA 1 Na lista de serviços vamos selecionar NodePort. Fig. 9.32: Criar serviço e visualizar métricas do Apache - ETAPA 2 Preencha as seguintes informações para o novo serviço: • • • • Name: apache-exporter Port Name: apache-exporter Listening Port: 9117 Target Port: 9117 415 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.33: Criar serviço e visualizar métricas do Apache - ETAPA 3 Clique em Selectors e digite app na caixa Key e apache-exporter na caixa Value. Fig. 9.34: Criar serviço e visualizar métricas do Apache - ETAPA 4 Em em Label & Annotations e digite app na caixa Key e apache-exporter na caixa Value. 416 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.35: Criar serviço e visualizar métricas do Apache - ETAPA 5 Para testar o acesso ao serviço do exportador do Apache, clique no porta do serviço que esta na coluna Target. Fig. 9.36: Criar serviço e visualizar métricas do Apache - ETAPA 6 Em seguida clique no link Metrics. 417 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.37: Criar serviço e visualizar métricas do Apache - ETAPA 7 Fig. 9.38: Criar serviço e visualizar métricas do Apache - ETAPA 8 ServiceMonitors e PodMonitors ServiceMonitors e PodMonitors são pseudo-CRDs que mapeiam a configuração de raspagem do recurso personalizado do Prometheus. Esses objetos de configuração especificam declarativamente os pontos de extremidade dos quais o Prometheus coletará as métricas. ServiceMonitor Quando um ServiceMonitor é criado, o Operador do Prometheus atualiza a configuração de raspagem do Prometheus para incluir a configuração do ServiceMonitor. Em seguida, o Prometheus começa a extrair as métricas do endpoint definido no ServiceMonitor. Quaisquer serviços em seu cluster que correspondam aos rótulos localizados no campo seletor de ServiceMonitor serão monitorados com base nos pontos de extremidade especificados no ServiceMonitor. Para obter mais informações sobre quais campos podem ser especificados, consulte a especificação fornecida pelo Operador Prometheus. 418 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com PodMonitors Quando um PodMonitor é criado, o Operador do Prometheus atualiza a configuração de raspagem do Prometheus para incluir a configuração do PodMonitor. Em seguida, o Prometheus começa a extrair as métricas do endpoint definido no PodMonitor. Quaisquer pods em seu cluster que correspondam aos rótulos localizados no campo seletor do PodMonitor serão monitorados com base nos podMetricsEndpoints especificados no PodMonitor. Para obter mais informações sobre quais campos podem ser especificados, consulte a especificação fornecida pelo Operador Prometheus. Lab 9.4 - Configurar Service Monitors no Rancher Neste laboratório vamos aprender como configurar um service monitors no Rancher. Configurar Service Monitors Para gerenciar monitoramento de pods e serviços clique em Monitors. Fig. 9.39: Configurar Service Monitors no Rancher - ETAPA 1 Selecione a guia Service Monitors e depois clique no botão Create. 419 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.40: Configurar Service Monitors no Rancher - ETAPA 2 Selecione e limpe o conteúdo modelo atraves da tecla Delete. Fig. 9.41: Configurar Service Monitors no Rancher - ETAPA 3 Digite ou cole o exemplo apresentado para coletar as métricas do exportador do apache. apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: apache-monitor namespace: default spec: endpoints: - interval: 15s path: /metrics targetPort: apache-exporter namespaceSelector: 420 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com matchNames: - default selector: matchLabels: app: apache-exporter Para criar o Service Monitor clique no botão Create. Resultado esperado: Fig. 9.42: Configurar Service Monitors no Rancher - ETAPA 4 Fig. 9.43: Configurar Service Monitors no Rancher - ETAPA 5 Visualizar Service Discovery e Target Retorne ao dashboard de monitoramento e clique em Configured Targets. 421 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.44: Visualizar Target e Service Discovery - ETAPA 1 E verifique se apache-monitor aparece na lista de targets. Fig. 9.45: Visualizar Target e Service Discovery - ETAPA 2 Em seguida clique no menu Status e na opção Service Discovery para visualizar o apachemonitor. 422 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.46: Visualizar Target e Service Discovery - ETAPA 3 Fig. 9.47: Visualizar Target e Service Discovery - ETAPA 4 Lab 9.5 - Visualizar métricas no Prometheus Neste laboratório vamos aprender como visualizar métricas do apache no Prometheus. Para começar clique no menu Graph. 423 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.48: Visualizar métricas no Prometheus - ETAPA 1 Digite apache_up na caixa de pesquisas e clique no botão Execute. apache_up Como resultado sera exibido o valor 1 para a métrica apache_up do pod do Apache. Fig. 9.49: Visualizar métricas no Prometheus - ETAPA 2 Faça um nova pesquisa digitando Execute. apache_cpuload na caixa de pesquisas e clique no botão 424 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com apache_cpuload Como resultado sera exibido o valor do uso de cpu para a métrica apache_cpuload do pod do Apache. Fig. 9.50: Visualizar métricas no Prometheus - ETAPA 3 Através da guia Graph é possível visualizar o gráfico de uso de CPU do Apache. 425 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.51: Visualizar métricas no Prometheus - ETAPA 4 Dashboards do Grafana Um dashboard é uma coleção de gráficos e outros elementos de visualização que você pode usar para monitorar um sistema, um aplicativo ou uma API. Você pode criar dashboards no Grafana para visualizar e compartilhar os dados do Prometheus. Os painéis são úteis para visualizar rapidamente os dados mais importantes de um sistema ou aplicativo. Para adicionar novos painéis no Grafana, utilize o repositório publico através do seguinte link: https://grafana.com/grafana/dashboards/ Lab 9.6 - Visualizar métricas no Dashboards do Grafana Neste laboratório vamos aprender como visualizar métricas do cluster e da aplicação apache no Dashboards do Grafana. Visualizar métricas do Cluster Retorne ao dashboard de monitoramento e clique em Metrics Dashboards. 426 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.52: Visualizar métricas do Cluster no Grafana - ETAPA 1 Como resultado podemos visualizar o uso de CPU, memoria e disco. Fig. 9.53: Visualizar métricas do Cluster no Grafana - ETAPA 2 Para visualizar métricas de outros recursos, clique em Dashboards e selecione Manage. 427 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.54: Visualizar métricas do Cluster no Grafana - ETAPA 3 Na lista selecione Node Exporter / Nodes para visualizar métricas dos nós do cluster. Fig. 9.55: Visualizar métricas do Cluster no Grafana - ETAPA 4 Na caixa instance selecione o IP do nó para visualizar as métricas. 428 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.56: Visualizar métricas do Cluster no Grafana - ETAPA 5 Clique novamente em Dashboards -> Manage e selecione Rancher / Cluster para visualizar métricas do cluster. Fig. 9.57: Visualizar métricas do Cluster no Grafana - ETAPA 6 429 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.58: Visualizar métricas do Cluster no Grafana - ETAPA 7 Adicionar Dashboard do Apache o Grafana Para visualizar as métricas do exportador do Apache, é preciso adicionar um novo dashboard no grafana com o usuário admin e no momento não sabemos a senha do usuário admin. Sera preciso visualizar o secret rancher-monitoring-grafana através da opção Installed Apps e depois clique em rancher-monitoring. Fig. 9.59: Adicionar Dashboard do Apache o Grafana - ETAPA 1 Na lista clique no secret rancher-monitoring-grafana. 430 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.60: Adicionar Dashboard do Apache o Grafana - ETAPA 2 Procure admin-password e copie a senha através do botão Copy. Fig. 9.61: Adicionar Dashboard do Apache o Grafana - ETAPA 3 Em seguida retorne ao painel do grafana e clique na opção Sign In. 431 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.62: Adicionar Dashboard do Apache o Grafana - ETAPA 4 E entre com o usuário admin e senha copiada. Fig. 9.63: Adicionar Dashboard do Apache o Grafana - ETAPA 5 Em seguida clique no ícone que é um sinal + e depois clique em Import. 432 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.64: Adicionar Dashboard do Apache o Grafana - ETAPA 6 Na caixa Import via grafana.com informe o valor 3894 e clique no botão Load. Fig. 9.65: Adicionar Dashboard do Apache o Grafana - ETAPA 7 Na caixa localhost selecione Prometheus e clique no botão Import. 433 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.66: Adicionar Dashboard do Apache o Grafana - ETAPA 8 Agora é possível visualizar as métricas na nossa aplicação Apache através do grafana! Fig. 9.67: Adicionar Dashboard do Apache o Grafana - ETAPA 9 434 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Prometheus Rules As regras do Prometheus são escritas em uma linguagem chamada PromQL (Prometheus Query Language). As regras são armazenadas em um arquivo chamado rules.rule. Cada regra tem um nome, um nome de métrica (ou expressão) a ser avaliada e uma expressão de gatilho (ou limite) que aciona um alerta. Uma regra tem a seguinte aparência: alert:httpd expr:apache_up == 0 for: 1m labels: severity: critical annotations: description: Apache is down summary: The Apache server {{$labels.instance }} is down Prometheus Alert Os Alertas do Prometheus são usados para notificar os usuários sobre eventos críticos. Um alerta é acionado quando o valor de uma métrica excede um determinado limite. Os alertas podem ser enviados para vários destinos, incluindo e-mail, PagerDuty e Slack. Quando um alerta é acionado, o Prometheus pode enviar uma notificação para o destino configurado. A notificação inclui informações sobre a métrica que acionou o alerta, bem como o período de tempo em que a métrica excedeu o limite. Os alertas do Prometheus são configurados usando regras. As regras são definidas em um arquivo chamado alerts.rules . Cada regra consiste em uma condição e uma ou mais ações. A condição é uma expressão PromQL que deve ser avaliada como verdadeira para que o alerta seja acionado. As ações são as notificações que devem ser enviadas quando a condição for atendida. Lab 9.7 - Configurar Prometheus Rules e Alert no Prometheus Neste laboratório vamos aprender como configurar um Prometheus Rules e Alert no Prometheus. Para gerenciar regras no prometheus, clique na opção Prometheus Rules e depois no botão Create. 435 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.68: Configurar Prometheus Rules e Alert no Prometheus - ETAPA 1 E preencha as seguintes informações: • • • • Namespace: cattle-monitoring-system Name: apache-rule Group Name: apache Override Group Interval: 60 Fig. 9.69: Configurar Prometheus Rules e Alert no Prometheus - ETAPA 2 Vamos continuar e criar um novo alerta através do botão Add Alert. 436 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.70: Configurar Prometheus Rules e Alert no Prometheus - ETAPA 3 Crie um nova regra com as seguintes informações: • • • • • • Alert Name: apache-alert Wait to fire for: 10 PromQL Expression: apache_up == 0 Severity Label Value: critical Key: app Value: apache-exporter Fig. 9.71: Configurar Prometheus Rules e Alert no Prometheus - ETAPA 4 Ainda em Annotations selecione Summary e digite Apache is down. Selecione a opção Description e digite The Apache server {{$labels.instance]] is down. 437 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Para terminar clique no botão Create. Fig. 9.72: Configurar Prometheus Rules e Alert no Prometheus - ETAPA 5 Como resultado temos uma nova regra chamado apache-rule. Fig. 9.73: Configurar Prometheus Rules e Alert no Prometheus - ETAPA 6 Retorne ao dashboard de monitoramento e clique em Configured Rules. 438 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.74: Configurar Prometheus Rules e Alert no Prometheus - ETAPA 7 Verifique se a nova regra chamada apache-alert foi criada e seu estado esta OK. Fig. 9.75: Configurar Prometheus Rules e Alert no Prometheus - ETAPA 8 É possivel verificar que o alerta ainda não esta ativo porque o serviço do apache esta em execução! 439 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.76: Configurar Prometheus Rules e Alert no Prometheus - ETAPA 9 Receivers e Route As integrações de notificação são configuradas com um Receiver. Route é a seção do recurso personalizado Alertmanager que controla como os alertas disparados pelo Prometheus são agrupados e filtrados antes de chegarem ao receptor. Quando uma rota é alterada, o Operador do Prometheus gera novamente o recurso personalizado Alertmanager para refletir as alterações. Slack O Slack é uma ferramenta de comunicação de equipe que fornece serviços de mensagens com histórico pesquisável, arquivamento e integração com vários serviços de terceiros. Está disponível como aplicativo da web, aplicativo de desktop (para Windows, macOS e Linux) e aplicativo móvel (para iOS e Android). O Slack é um serviço freemium, com planos pagos que oferecem recursos adicionais, como armazenamento ilimitado de mensagens, recursos e integrações de pesquisa mais avançados e a capacidade de recuperar e excluir mensagens. Lab 9.8 - Configurar integração entre Prometheus e Slack Neste laboratório vamos aprender como configurar a integração entre Prometheus e Slack para enmvios de alertas. Criar conta e canal no Slack Antes de configurar envio de alertas é preciso criar uma conta no Slack: https://slack.com 440 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com E clique no botão ENTRAR COM O GOOLE. Fig. 9.77: Criar conta e canal no Slack - ETAPA 1 E confirme através do link Confirm. 441 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.78: Criar conta e canal no Slack - ETAPA 2 O proximo passo é clicar no botão Criar um workspace. Fig. 9.79: Criar conta e canal no Slack - ETAPA 3 442 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Digite como exemplo CursoRancher4Linux o nome da equipe e clique no botão Próximo. Fig. 9.80: Criar conta e canal no Slack - ETAPA 4 Em seguida ignore a etapa para encontrar pessoas. Fig. 9.81: Criar conta e canal no Slack - ETAPA 5 Vamos definir monitoramento para o canal no Slack. 443 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.82: Criar conta e canal no Slack - ETAPA 6 Em seguida ignore a etapa para enviar e-mails. Fig. 9.83: Criar conta e canal no Slack - ETAPA 7 E clique em Pular etapa. 444 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.84: Criar conta e canal no Slack - ETAPA 8 Para continuar usando o navegador clique no link Agora não, continuar no navegador. Fig. 9.85: Criar conta e canal no Slack - ETAPA 9 Verifique que agora você tem um novo canal chamado monitoramento dentro do Slack! 445 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.86: Criar conta e canal no Slack - ETAPA 10 Configurar Webhooks de entrada no Slack Para gerenciar aplicações no Slack digite o seguinte endereço: https://sua_conta_no_slack.slack.com/apps Fig. 9.87: Configurar Webhooks de entrada no Slack - ETAPA 1 E na caixa de pesquisa digite webhook e selecione Webhooks de entrada. 446 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.88: Configurar Webhooks de entrada no Slack - ETAPA 2 Em seguida clique no botão Adicionar ao Slack. Fig. 9.89: Configurar Webhooks de entrada no Slack - ETAPA 3 Na caixa Postar no canal, vamos selecionar # monitoramento. 447 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.90: Configurar Webhooks de entrada no Slack - ETAPA 4 E depois clique no botão Adicionar integração com Webhooks de entrada. Fig. 9.91: Configurar Webhooks de entrada no Slack - ETAPA 5 E copie o endereço na caixa URL do webhook. 448 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.92: Configurar Webhooks de entrada no Slack - ETAPA 6 Configurar Receivers Retorne à página do Rancher para acessar Routers and Receivers e clique no botão Create. Fig. 9.93: Configurar Receiver no Rancher - ETAPA 1 E selecione Slack e clique no botão Add Slack. 449 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.94: Configurar Receiver no Rancher - ETAPA 2 Fig. 9.95: Configurar Receiver no Rancher - ETAPA 3 Na caixa Webhook URL é preciso colar o link que você copiou na janela do Slack. Para finalizar clique no botão Create. 450 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.96: Configurar Receiver no Rancher - ETAPA 4 Configurar Route Para configurar rotas clique na guia Routes. Fig. 9.97: Configurar Route no Rancher - ETAPA 1 E clique no ícone com três pontinos na linha do root e na opção Edit Config. 451 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.98: Configurar Route no Rancher - ETAPA 2 Mude para slack na caixa Receiver e clique no botão Save para atualizar a rota. Fig. 9.99: Configurar Route no Rancher - ETAPA 3 Lab 9.9 - Simular falha no serviço do Apache Neste laboratório vamos aprender como simular falha no serviço do Apache, e assim testar o alerta do Prometheus. Retorne a área de deploy e edite a configuração do deploy do apache. 452 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.100: Simular falha no serviço do Apache - ETAPA 1 Mude o valor da caixa Container Image para busybox:1.28. Aqui o objetivo é simular que a aplicação apache não esta mais disponivel! Fig. 9.101: Simular falha no serviço do Apache - ETAPA 2 Na caixa Command digite sleep 300 para manter o container do busybox no ar durante 300 segundos. 453 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.102: Simular falha no serviço do Apache - ETAPA 3 Role a página e clique no botão Save para atualizar o Deploy. Fig. 9.103: Simular falha no serviço do Apache - ETAPA 4 Verifique no painel de alertas do Prometheus o alerta apache-alert mudou seu estatus para active. Fig. 9.104: Simular falha no serviço do Apache - ETAPA 5 454 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Verifique no painel do Slack existe uma nova notificação do Alertmanager! Para acessar o alerta clique no link Mostrar mais. Fig. 9.105: Simular falha no serviço do Apache - ETAPA 6 Fig. 9.106: Simular falha no serviço do Apache - ETAPA 7 Você será redirecionado para o painel do Alertmanager onde será mostrado as informações do 455 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com alerta. Fig. 9.107: Simular falha no serviço do Apache - ETAPA 8 Retorne a área de deploy e edite a configuração do deploy do apache, para mudar o valor da caixa Container Image para ubuntu/apache2. Fig. 9.108: Simular falha no serviço do Apache - ETAPA 9 Não esqueça de remover o conteúdo da caixa Command 456 9. Gerenciar Monitoramento Caique Araujo / caiquearaujoac@gmail.com Fig. 9.109: Simular falha no serviço do Apache - ETAPA 10 Verifique no painel do Slack existe uma nova notificação do Alertmanager! Fig. 9.110: Simular falha no serviço do Apache - ETAPA 11 Caique Araujo / caiquearaujoac@gmail.com 10 Gerenciar Segurança com Rancher Competências da Aula • • • • • Gerenciar Gerenciar Gerenciar Gerenciar Gerenciar políticas Egress e Ingress para bloquear acesso políticas a partir de Labels políticas a partir de portas TCP/UDP regras de RBAC (Role/RoleBinding) Auditoria e violações no cluster com OPA Gatekeeper NetworkPolicies A política de rede é um recurso nativo do Kubernetes que você pode usar para definir controles de acesso à rede para seus pods. É uma regra isolada que pode ser anexada a um namespace ou a um pod específico. As políticas de rede especificam como os grupos de pods podem se comunicar entre si e com outros endpoints de rede. Por padrão, os pods não são isolados; eles aceitam tráfego de qualquer fonte. Os pods ficam isolados com a criação de um objeto (ou objetos) NetworkPolicy que os seleciona e especifica a política. O NetworkPolicy trabalha com as seguintes politicas: • Ingress: Regra de entrada. • Egress: Regra de saida. 457 458 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Cada politica pode conter uma ou mais regras que corresponde ao tráfego. Regras • podSelector: Permite controlar o fluxo de tráfego a partir do Label de um Pod. Exemplo: Apenas o Pod que possui o label app=frontend, consegue comunica-se com o Pod que possui o label app=backend. • namespaceSelector: Permite controlar o fluxo de tráfego a partir do Namespace. Apenas o Pod que possui esta no namespace monitoring, consegue comunica-se com os Pods do namespace production. • ipBlock: Permite controlar o fluxo de tráfego a partir do bloco de IP. Apenas as requisições que estão no bloco de endereço 0.0.0.0/0, conseguem comunica-se de fora de cluster, e quem esta na rede 172.16.1.0/24 esta bloqueado. Lab 10.1 - Gerenciar políticas Egress e Ingress para bloquear acesso Neste laboratório vamos criar uma política de segurança de rede padrão para bloquear o Ingress e Egress no namespace devops. O objetivo desse NetworkPolicy é bloquear todo o fluxo de tráfego entre os Pods no namespace devops. Testar acesso entre Pods Para começar vamos lugar com usuário analista da base ao LDAP. Fig. 10.1: Testar acesso entre Pods - ETAPA 1 Para testar a criação de um novo pod, selecione Pods ao lado esquerdo da tela e depois clique 459 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com no botão Create from YAML. Fig. 10.2: Testar acesso entre Pods - ETAPA 2 Limpe o conteúdo exemplo e em seguida digite ou copie e cole, o modelo abaixo: --apiVersion: v1 kind: Pod metadata: name: pod-client namespace: devops labels: curso: rancher spec: containers: - name: busyboxplus image: radial/busyboxplus imagePullPolicy: IfNotPresent command: - sleep - "3600" Clique no botão Create para criar o novo Pod. A função deste manifesto é criar um Pod no namespace devops! 460 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.3: Testar acesso entre Pods - ETAPA 3 Em seguida vamos executar um Shell dentro do pod-client. Fig. 10.4: Testar acesso entre Pods - ETAPA 4 No terminal vamos testar a comunicação com o serviço webserver, através do comando curl: curl http://webserver Resultado esperado: 461 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.5: Testar acesso entre Pods - ETAPA 5 Através do resultado do comando curl, é possível observar que pod-client tem acesso ao serviço webserver. Fig. 10.6: Testar acesso entre Pods - ETAPA 6 Gerenciar políticas Egress e Ingress Uma vez que o teste entre os pods foi concluído, vamos agora configurar regras de Network Policies para definir controles de acesso à rede entre os recursos do Cluster. Vamos começar através do da opção NetworkPolicies presente na área de Service Discovery. 462 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.7: Gerenciar políticas Egress e Ingress para bloquear acesso - ETAPA 1 Em seguida clique no botão Create from YAML. Fig. 10.8: Gerenciar políticas Egress e Ingress para bloquear acesso - ETAPA 2 Vamos utilizar como exemplo alguns modelos prontos de regras de Network Policies, disponível no repositório 543 do GitHub da 4Linux. Acesse o link abaixo onde você ira encontrar diversos exemplos: 463 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com https://github.com/4linux/543/tree/main/network-policies Fig. 10.9: Gerenciar políticas Egress e Ingress para bloquear acesso - ETAPA 3 Selecione e Copie o conteúdo do modelo 1-network-policy-deny-all.yaml. Fig. 10.10: Gerenciar políticas Egress e Ingress para bloquear acesso - ETAPA 4 Retorne ao painel do Rancher para limpar o contéudo exemplo, e colar o conteúdo do modelo 1-network-policy-deny-all.yaml. 464 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.11: Gerenciar políticas Egress e Ingress para bloquear acesso - ETAPA 5 Não esqueça de clicar no botão Create para criar a regra de Network Policy! Descrição: • podSelector: Seleciona o grupo de pods que a política se aplica. Para selecionar todos os pods em todo o cluster use {}. • policyTypes: Define a lista de tipos de politicas que pode incluir Ingress, Egress ou ambos. • Ingress: Inclui uma lista de regras de entrada permitidas através do campo ingress. Se o campo não estiver presente, toda as entradas serão bloqueadas. • Egress: Inclui uma lista de regras de saídas permitidas através do campo egress. Se o campo não estiver presente, toda as saídas serão bloqueadas. 465 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.12: Gerenciar políticas Egress e Ingress para bloquear acesso - ETAPA 6 Uma vez que a regra que bloqueia todo acesso dentro da namespace devops foi criada, tente novamente através do pod-client acessar o serviço webserver: Fig. 10.13: Gerenciar políticas Egress e Ingress para bloquear acesso - ETAPA 7 Observe que a comunicação entre os recursos foi bloqueado! 466 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com LAB 10.2 - Criar políticas para liberar acesso via Labels Neste laboratório vamos criar 2 políticas de segurança de rede para: • Liberar o Egress do pod webserver até o pod client • Liberar o Ingress do pod client até o pod webserver. liberar acesso Egress Vamos criar mais uma regra de Network Policy através do botão Create from YAML. Fig. 10.14: Criar política Egress para liberar acesso via Labels - ETAPA 1 Novamente acesse repositório 543 da 4Linux para copiar o conteúdo do arquivo modelo 2egress-webserver-to-pod-client.yaml. 467 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.15: Criar políticas Egress para liberar acesso via Labels - ETAPA 2 Retorne ao painel do Rancher para limpar o conteúdo exemplo, e colar o conteúdo do modelo 2-egress-webserver-to-pod-client.yaml. Fig. 10.16: Criar políticas Egress para liberar acesso via Labels - ETAPA 3 Descrição Egress • podSelector e matchLabels: Seleciona os pods com a label “app=php”. 468 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com • egress, to: Seleciona os pods com a label “curso=rancher”. liberar acesso Ingress Vamos criar mais uma regra de Network Policy através do botão Create from YAML. Fig. 10.17: Criar política Ingress para liberar acesso via Labels - ETAPA 1 Novamente acesse repositório 543 da 4Linux para copiar o conteúdo do arquivo modelo 3ingress-pod-client-from-webserver.yaml. Fig. 10.18: Criar política Ingress para liberar acesso via Labels - ETAPA 2 Retorne ao painel do Rancher para limpar o contéudo exemplo, e colar o conteúdo do modelo 469 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com 3-ingress-pod-client-from-webserver.yaml. Fig. 10.19: Criar política Ingress para liberar acesso via Labels - ETAPA 3 Descrição Ingress • podSelector e matchLabels: Seleciona os pods com a label “curso=rancher”. • ingress, from: Seleciona os pods com a label “app=php”. Testando políticas egress e ingress Uma vez que as duas novas regras de Network Policy foram criadar, teste o acesso entre os recursos: 470 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.20: Testando políticas egress e ingress - ETAPA 1 É possível verificar que o acesso entre os recursos resolvendo nomes, ainda não será possível! Acesse a lista de Pods e copie o IP do pod do webserver. Fig. 10.21: Testando políticas egress e ingress - ETAPA 2 471 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Agora realize o teste de comunicação apontando IP do Pod do webserver: Fig. 10.22: Testando políticas egress e ingress - ETAPA 3 Não é possível a comunicação entre o pod-client e o pod webserver por nome e IP. Neste caso o motivo é a falta de label no pod-client, já que as regras de Network Policy só permitem o acesso através do label app = rancher. Fig. 10.23: Testando políticas egress e ingress - ETAPA 4 Para resolver isso vamos editar o manifesto do pod-client, através da opção Edit YAML. 472 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.24: Testando políticas egress e ingress - ETAPA 5 Adicione na linha 82: labels: curso: rancher Fig. 10.25: Testando políticas egress e ingress - ETAPA 6 Salve as alterações e teste novamente o acesso por IP ao serviço webserver: 473 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.26: Testando políticas egress e ingress - ETAPA 7 LAB 10.3 - Criar políticas para liberar acesso via DNS Neste laboratório vamos criar 1 política de segurança de rede para: • Liberar as portas 53 TCP e 53 UDP no Egress e Ingress O objetivo desse NetworkPolicy é liberar somente o fluxo de tráfego entre os pods a partir da resolução de nomes. Para poder acessar os recursos por nomes, vamos criar um novo Network Policy através do botão Create from YAML. 474 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.27: Criar políticas para liberar acesso via DNS - ETAPA 1 Novamente acesse repositório 543 da 4Linux para copiar o conteúdo do arquivo modelo 4allow-dns.yaml. Fig. 10.28: Criar políticas para liberar acesso via DNS - ETAPA 2 Retorne ao painel do Rancher para limpar o conteúdo exemplo, e colar o conteúdo do modelo 4-allow-dns.yaml. 475 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.29: Criar políticas para liberar acesso via DNS - ETAPA 3 Descrição Egress • port: Define em qual porta a regra sera aplicada. Para selecionar uma faixa de porta use port para porta inicial e endport para porta final. • protocol: Define em qual protocolo a regra sera aplicada. Utilize os protocolos TCP e UDP. Agora tente realizar o acesso ao serviço webserver usando o DNS: 476 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.30: Criar políticas para liberar acesso via DNS - ETAPA 4 Como resultado final é possível verificar que o Network Policy 4-allow-dns esta permitindo o acesso entre recursos via nome! Fig. 10.31: Criar políticas para liberar acesso via DNS - ETAPA 5 477 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com LAB 10.4 - Criar política para liberar acesso a internet Neste laboratório vamos criar 1 política de segurança de rede para: • Liberar o Egress apenas ao pod webserver no namespace devops O objetivo desse NetworkPolicy é liberar o fluxo de tráfego do pod instalação de pacotes. até a internet. webserver permitindo a Vamos realizar um teste de conectividade no pod do webserver, através da opção Execute Shell. Fig. 10.32: Criar política para liberar acesso a internet - ETAPA 1 Tente atualizar a lista de pacotes através do seguinte comando: apt update 478 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.33: Criar política para liberar acesso a internet - ETAPA 2 O comando apresenta erros porque o pod não ter acesso a porta 53, e sendo assim não é possível resolver os nomes dos repositórios presentes no arquivo sources.list! Para resolver isso vamos criar um novo Network Policy através do botão Create from YAML. Fig. 10.34: Criar política para liberar acesso a internet - ETAPA 3 479 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Novamente acesse repositório 543 da 4Linux para copiar o conteúdo do arquivo modelo 5allow-internet-webserver-to-egress.yaml. Fig. 10.35: Criar política para liberar acesso a internet - ETAPA 4 Retorne ao painel do Rancher para limpar o conteúdo exemplo, e colar o conteúdo do modelo 5-allow-internet-webserver-to-egress.yaml. Fig. 10.36: Criar política para liberar acesso a internet - ETAPA 5 480 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Descrição Egress • ipBlock: Define um conjunto particular de faixas de IP a serem permitidos como origens no caso de entrada ou destinos no caso de saída. • cidr: Define os ips permitidos na regra. Mais uma vez tente atualizar a lista de pacotes através do comando que agora é possível acesso a porta 53 resolvendo nomes. apt update, e verifique Fig. 10.37: Criar política para liberar acesso a internet - ETAPA 6 RBAC RBAC significa controle de acesso baseado em função. É um modelo de segurança que oferece controle granular sobre o que pode ser feito em um cluster e por quem. É fundamental para qualquer implantação de um cluster Kubernetes de classe empresarial. Esteja você usando o projeto Kubernetes de software livre ou um grande provedor de nuvem que oferece serviços, o mecanismo subjacente para controlar o acesso ao seu cluster é o RBAC. O RBAC é um recurso do Kubernetes separado dos recursos de autenticação e autorização integrados ao plano de controle. Com o RBAC, você pode controlar quem tem acesso ao seu cluster e quais ações eles podem realizar. O RBAC é baseado em dois conceitos: Roles e RoleBindings. • Role: Uma função é um conjunto de permissões. Por exemplo, você pode criar uma função que permita que um usuário leia um recurso específico, mas não grave nele. 481 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Uma associação de função concede uma função a um usuário ou grupo específico. Por exemplo, você pode criar uma associação de função que dê a função somente leitura aos desenvolvedores do grupo de usuários. Você pode usar o RBAC para controlar o acesso a qualquer objeto de API no Kubernetes, incluindo pods, serviços e secrets. • RoleBinding: É um método de atribuição de uma Role a um usuário em um cluster Kubernetes. Uma associação de Role pode ser usada para conceder a um usuário permissões para vários recursos ou pode ser usada para conceder a um usuário permissões para um único recurso. Lab 10.5 - Gerenciar RBAC no Rancher Neste laboratório vamos aprender como gerenciar RBAC no Rancher. Testar acesso ao namespace default Vamos testar se o usuário analista consegue criar um pod no namespace default. Selecione Pods ao lado esquerdo da tela e depois clique no botão Create from YAML. Fig. 10.38: Testar acesso ao namespace default - ETAPA 1 Digite ou cole o conteúdo abaixo: --apiVersion: v1 kind: Pod 482 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com metadata: name: pod-busybox namespace: default labels: app: busybox spec: containers: - name: busybox image: busybox:1.28 command: - sleep - "3600" Não esqueça de clicar no botão Create. Fig. 10.39: Testar acesso ao namespace default - ETAPA 2 Ao tentar criar o recurso sera mostrado uma mensagem de erro, indicando que o usuário analista não tem permissão para criar pods dentro do namespace default. 483 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.40: Testar acesso ao namespace default - ETAPA 3 Vamos agora testar a criação de um Deploy através da opção Deployments e no botão Create. Fig. 10.41: Testar acesso ao namespace default - ETAPA 4 Em seguida clique no link Edit as YAML. 484 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.42: Testar acesso ao namespace default - ETAPA 5 Digite ou cole o conteúdo abaixo: --kind: Deployment apiVersion: apps/v1 metadata: name: deploy-nginx namespace: default labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx E clique no botão Create. 485 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.43: Testar acesso ao namespace default - ETAPA 6 Ao tentar criar o recurso sera mostrado uma mensagem de erro, indicando que o usuário analista não tem permissão para criar deployments dentro do namespace default. Fig. 10.44: Testar acesso ao namespace default - ETAPA 7 Vamos agora testar a criação de um serviço através da opção Services e no botão Create. 486 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.45: Testar acesso ao namespace default - ETAPA 8 Vamos utilize o serviço do tipo NodePort. Fig. 10.46: Testar acesso ao namespace default - ETAPA 9 Em seguida clique no link Edit as YAML. 487 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.47: Testar acesso ao namespace default - ETAPA 10 Digite ou cole o conteúdo abaixo: --apiVersion: v1 kind: Service metadata: name: service-nginx namespace: default labels: app: nginx spec: ports: - Port: port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePort E clique no botão Create. 488 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.48: Testar acesso ao namespace default - ETAPA 11 Ao tentar criar o recurso sera mostrado uma mensagem de erro, indicando que o usuário analista não tem permissão para criar services dentro do namespace default. Fig. 10.49: Testar acesso ao namespace default - ETAPA 12 Gerenciar Roles Deslogue da conta do usuário analista e logue com o a conta local do usuário admin. 489 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.50: Gerenciar Roles no Rancher - ETAPA 1 Para trabalhar com Roles, clique na opção More Resources -> RBAC. Fig. 10.51: Gerenciar Roles no Rancher - ETAPA 2 E depois clique na opção Roles. 490 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.52: Gerenciar Roles no Rancher - ETAPA 3 Vamos criar roles através do comando kubectl, através da opção Kubectl Shell. Fig. 10.53: Gerenciar Roles no Rancher - ETAPA 4 Crie uma role de nome analista, permitindo a listagem, criação, atualização, e remoção dos recursos pod, deployments, services no namespace default. kubectl create role analista --verb=get,list,create,update,patch,delete --resource=pods, deployments,services,services/proxy -n default Resultado esperado: 491 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.54: Gerenciar Roles no Rancher - ETAPA 5 Gerenciar RoleBindings Antes de criar uma RoleBinding é preciso copiar o ID do usuário analista, através da opção Users & Authentication -> Users. Na lista de usuários vamos selecionar e copiar o ID do usuário analista. Fig. 10.55: Gerenciar RoleBindings no Rancher - ETAPA 1 Retorne ao More Resources -> RBAC e clique em RoleBindings. 492 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.56: Gerenciar RoleBindings no Rancher - ETAPA 2 Novamente abra a opção Kubectl Shell e crie uma RoleBinding de nome analista, associando a role analista ao ID do usuário analista no namespace default. kubectl create rolebinding analista --role=analista --user=u-4k4hxzzv4l -n default Resultado esperado: Fig. 10.57: Gerenciar RoleBindings no Rancher - ETAPA 3 Testando regras no namespace default Deslogue da conta local do usuário admin e logue com a conta do usuário analista. 493 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.58: Gerenciar RoleBindings no Rancher - ETAPA 1 Agora vamos testar se é possível criar um pod no namespace default, através da opção Pods e depois clique no botão Create from YAML. Fig. 10.59: Gerenciar RoleBindings no Rancher - ETAPA 2 Digite o conteúdo do arquivo modelo abaixo e depois clique no botão Create. --apiVersion: v1 kind: Pod metadata: name: pod-busybox namespace: default labels: app: busybox spec: 494 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com containers: - name: busybox image: busybox:1.28 command: - sleep - "3600" Fig. 10.60: Gerenciar RoleBindings no Rancher - ETAPA 3 Como resultado final é possível perceber que a Role e RoleBinding teve efeito, pois agora o usuário analista consegue criar um pod dentro do namespace default. Fig. 10.61: Gerenciar RoleBindings no Rancher - ETAPA 4 Vamos agora testar a criação de um Deploy através da opção Deployments e no botão Create. 495 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.62: Gerenciar RoleBindings no Rancher - ETAPA 5 Digite ou cole o conteúdo do arquivo modelo abaixo e depois clique no botão Create. --kind: Deployment apiVersion: apps/v1 metadata: name: deploy-nginx namespace: default labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx 496 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.63: Gerenciar RoleBindings no Rancher - ETAPA 6 Como resultado final é possível perceber que a Role e RoleBinding teve efeito, pois agora o usuário analista consegue criar um deploy dentro do namespace default. Fig. 10.64: Gerenciar RoleBindings no Rancher - ETAPA 7 Vamos agora testar a criação de um serviço através da opção Services e no botão Create. 497 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.65: Gerenciar RoleBindings no Rancher - ETAPA 8 Digite ou cole o conteúdo do arquivo modelo abaixo e depois clique no botão Create. Fig. 10.66: Gerenciar RoleBindings no Rancher - ETAPA 9 Como resultado final é possível perceber que a Role e RoleBinding teve efeito, pois agora o usuário analista consegue criar um service dentro do namespace default. Vamos testar o serviço através do IP do NodePort. 498 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.67: Gerenciar RoleBindings no Rancher - ETAPA 10 Fig. 10.68: Gerenciar RoleBindings no Rancher - ETAPA 11 OPA Gatekeeper O OPA Gatekeeper é um componente que ajuda a controlar o acesso à implantação do OPA. Você pode usar o OPA Gatekeeper para impor políticas de autorização em sua implantação do OPA. O OPA Gatekeeper é construído no projeto Open Policy Agent (OPA). O projeto OPA Gatekeeper é um projeto de código aberto desenvolvido e mantido pela comunidade OPA. O OPA Gatekeeper é um conjunto de ferramentas que ajuda a implantar e gerenciar o OPA em seu ambiente. O projeto OPA Gatekeeper fornece uma interface de linha de comando (CLI) e uma interface de usuário (UI) baseada na web que você pode usar para implantar e gerenciar o OPA em seu ambiente. Como funciona o OPA Gatekeeper? 499 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com • O OPA Gatekeeper usa o Open Policy Agent (OPA) para impor políticas de autorização em sua implantação do OPA. OPA é um projeto de código aberto desenvolvido e mantido pela comunidade OPA. • O OPA Gatekeeper usa a linguagem de política OPA Rego para criar políticas de autorização. OPA Rego é uma linguagem de política projetada para o projeto Open Policy Agent. • O OPA Gatekeeper armazena as políticas que você cria no OPA Rego em um repositório de políticas. O repositório de políticas é um repositório Git hospedado no GitHub. • O OPA Gatekeeper impõe as políticas que você cria no repositório de políticas. O OPA Gatekeeper usa a API OPA para impor as políticas. A API OPA é uma API HTTP fornecida pelo projeto OPA. Quais são os benefícios de usar o OPA Gatekeeper? • O OPA Gatekeeper ajuda você a controlar o acesso à sua implantação OPA. Você pode usar o OPA Gatekeeper para impor políticas de autorização em sua implantação do OPA. Lab 10.6 - Instalação do OPA Gatekeeper no Rancher Neste laboratório vamos aprender como realizar a instalação do OPA Gatekeeper no Rancher. Deslogue da conta do usuário analista e logue com o a conta local do usuário admin. Fig. 10.69: Instalação do OPA Gatekeeper no Rancher - ETAPA 1 Em seguida selecione o cluster cluster1-gke e depois clique no botão Cluster Tools. 500 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.70: Instalação do OPA Gatekeeper no Rancher - ETAPA 2 Clique no botão Install localizado em OPA Gatekeeper. Fig. 10.71: Instalação do OPA Gatekeeper no Rancher - ETAPA 3 Selecione o projeto Default e clique no botão Next para continuar. 501 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.72: Instalação do OPA Gatekeeper no Rancher - ETAPA 4 Para iniciar a instalação do pacote clique no botão Install. Fig. 10.73: Instalação do OPA Gatekeeper no Rancher - ETAPA 5 Após a instalação exibir a mensagem SUCCESS clique no ícone para fechar o terminal. 502 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.74: Instalação do OPA Gatekeeper no Rancher - ETAPA 6 Lab 10.7 - Criar ConstraintTemplates no OPA Gatekeeper Neste laboratório vamos aprender como criar ConstraintTemplates no OPA Gatekeeper. Visualizar ConstraintTemplates prontos Para gerenciar templates selecione OPA Gatekeeper ao lado esquerdo da tela. Fig. 10.75: Visualizar ConstraintTemplates prontos - ETAPA 1 E depois selecione a opção Template. 503 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.76: Visualizar ConstraintTemplates prontos - ETAPA 2 Para visualizar as configurações do template clique no nome k8srequiredlabels. Fig. 10.77: Visualizar ConstraintTemplates prontos - ETAPA 3 O objetivo desse template é forçar a criação de um recurso, somente se o mesmo possuir um label. Um exemplo de uso na prática é a criação de um novo namespace. 504 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.78: Visualizar ConstraintTemplates prontos - ETAPA 4 Descrição: • violation: Define a mensagem e os detalhes que são exibidos ao usuário quando a política é violada (violação representa uma regra). É assim que obtemos feedback para nossos usuários do cluster sobre por que o Gatekeeper rejeitou uma alteração em seu recurso; • provied: Define uma variável para manter a lista de labels para o recurso; • required: Define uma variável que contém uma lista dos labels que precisamos para presentes no recurso; • missing: = Cria uma matriz com os itens encontrados em required, mas não encontrados em provied; • count: Se houver mais de zero itens nessa matriz de diferença, isso significa que temos um ou mais labels obrigatórios que não estão lá e isso é uma violação da política; • msg: A mensagem é uma frase personalizada que é exibida ao cliente. Agora vamos visualizar as configurações do template k8sallowrepos. 505 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.79: Visualizar ConstraintTemplates prontos - ETAPA 5 O objetivo desse template é forçar a utilização de um determinado servidor de imagem para container. Um exemplo de uso na prática é permitir somente o uso de imagens do servidor privado da empresa. Fig. 10.80: Visualizar ConstraintTemplates prontos - ETAPA 6 Criar ConstraintTemplates no OPA Gatekeeper Para facilitar a nossa administração, acesse o link do curso onde você ira encontrar diversos exemplos: https://github.com/4linux/543/tree/main/opa-gatekeeper 506 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.81: Criar Templates no OPA Gatekeeper - ETAPA 1 Retorne ao painel do Rancher e abra o Kubectl Shell. Fig. 10.82: Criar Templates no OPA Gatekeeper - ETAPA 2 Através do comando kubectl, vamos criar o template k8sminreplicacount usando o arquivo modelo 1-opa-template-replica-count.yaml disponível no Github da 4Linux. kubectl create -f https://raw.githubusercontent.com/4linux/543/main/opa-gatekeeper/1-opatemplate-replica-count.yaml 507 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com O objetivo desse template é forçar a criação de um recurso com uma quantidade de réplicas. Um exemplo de uso na prática é padronizar a quantidade minima de replicas para suas aplicações no cluster Kubernetes. Fig. 10.83: Criar Templates no OPA Gatekeeper - ETAPA 3 Conteúdo do ConstraintTemplate k8sminreplicacount --apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8sminreplicacount spec: crd: spec: names: kind: K8sMinReplicaCount validation: openAPIV3Schema: properties: min: type: integer targets: - target: admission.k8s.gatekeeper.sh rego: | package k8sminreplicacount violation[{"msg": msg, "details": {"missing_replicas": missing}}] { provided := input.review.object.spec.replicas required := input.parameters.min missing := required - provided 508 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com } missing > 0 msg := sprintf("Voce deve fornecer mais %v replicas", [missing]) Através do comando kubectl, vamos criar o template k8sdenyprivileged usando o arquivo modelo 2-opa-template-deny-privileged.yaml disponível no Github da 4Linux. kubectl create -f https://raw.githubusercontent.com/4linux/543/main/opa-gatekeeper/2-opatemplate-deny-privileged.yaml O objetivo desse template é impedir a criação de um recurso que possua privilégios administrativos. Um exemplo de uso na prática é padronizar a segurança de suas aplicações no cluster Kubernetes. Fig. 10.84: Criar Templates no OPA Gatekeeper - ETAPA 4 Conteúdo do ConstraintTemplate k8sdenyprivileged --apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8sdenyprivileged 509 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com spec: crd: spec: names: kind: K8sDenyPrivileged targets: - target: admission.k8s.gatekeeper.sh rego: | package k8sdenyprivileged violation[{"msg": msg, "details": {}}] { c := input_containers[_] c.securityContext.privileged msg := sprintf("Nao e permitido executar container com privilegio: %v, securityContext: %v", [c.name, c.securityContext]) } input_containers[c] { c := input.review.object.spec.containers[_] } input_containers[c] { c := input.review.object.spec.initContainers[_] } Através do comando kubectl, vamos criar o template k8sdenysecret usando o arquivo modelo 3-opa-template-deny-secret.yaml disponível no Github da 4Linux. kubectl create -f https://raw.githubusercontent.com/4linux/543/main/opa-gatekeeper/3-opatemplate-deny-secret.yaml O objetivo desse template é impedir a criação de secrets em um determinado namespace. Um exemplo de uso na prática é padronizar a segurança no cluster Kubernetes. 510 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.85: Criar Templates no OPA Gatekeeper - ETAPA 5 Conteúdo do ConstraintTemplate k8sdenysecret --apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8sdenysecret spec: crd: spec: names: kind: K8sDenySecret validation: openAPIV3Schema: properties: message: type: string targets: - target: admission.k8s.gatekeeper.sh rego: | package k8sdenysecret violation[{"msg": msg}] { 1 > 0 msg := input.parameters.message } Lab 10.8 - Criar Constraints no OPA Gatekeeper Neste laboratório vamos aprender como criar Constraints no OPA Gatekeeper. 511 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Criar via painel Uma vez que os templates foram criados, vamos criar constraints através da opção Constraints e depois clique no botão Create. Fig. 10.86: Criar Constraints no OPA Gatekeeper - ETAPA 1 Selecione o template k8srequiredlabels. Fig. 10.87: Criar Constraints no OPA Gatekeeper - ETAPA 2 E preencha as seguintes informações: • Name: namespace-label • Enforcement Action: Deny - deny admission requests with any violation • Scope: Cluster & Namespaced 512 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com • Namespaces: devops Fig. 10.88: Criar Constraints no OPA Gatekeeper - ETAPA 3 Na parte de Rules clique no botão Add ApiGroup. Fig. 10.89: Criar Constraints no OPA Gatekeeper - ETAPA 4 E preencha as seguintes informações: • ApiGroups: "" • Kinds: Namespace 513 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.90: Criar Constraints no OPA Gatekeeper - ETAPA 5 Na parte de Parameters digite: - Labels: - curso Para terminar clique no botão Create. Fig. 10.91: Criar Constraints no OPA Gatekeeper - ETAPA 6 Em seguida vamos criar um segundo contraint através do botão Create. 514 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.92: Criar Constraints no OPA Gatekeeper - ETAPA 7 Selecione o template k8sallowrepos. Fig. 10.93: Criar Constraints no OPA Gatekeeper - ETAPA 8 E preencha as seguintes informações: • • • • Name: images-from-docker-hub Enforcement Action: Deny - deny admission requests with any violation Scope: Namespaced Namespaces: devops 515 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.94: Criar Constraints no OPA Gatekeeper - ETAPA 9 Na parte de Rules preencha as seguintes informações: • ApiGroups: "" • Kinds: Pod Fig. 10.95: Criar Constraints no OPA Gatekeeper - ETAPA 10 516 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Na parte de Parameters digite: registry: "docker.io/" Para terminar clique no botão Create. Fig. 10.96: Criar Constraints no OPA Gatekeeper - ETAPA 11 Criar via kubectl Vamos criar novos contraints através do Kubectl Shell. 517 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.97: Criar Constraints via kubectl - ETAPA 1 Através do comando kubectl, vamos criar o contraint deployment-min-replicas usando o arquivo modelo 1-opa-contraint-replica-count.yaml disponível no Github da 4Linux. kubectl create -f https://raw.githubusercontent.com/4linux/543/main/opa-gatekeeper/1-opacontraint-replica-count.yaml Conteúdo do Constraint deployment-min-replicas --apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sMinReplicaCount metadata: name: deployment-min-replicas spec: match: kinds: - apiGroups: ["apps"] kinds: ["Deployment"] namespaces: - "devops" parameters: min: 2 Através do comando kubectl, vamos criar o contraint deny-privileged-container usando o arquivo modelo 2-opa-contraint-deny-privileged.yaml disponível no Github da 4Linux. 518 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com kubectl create -f https://raw.githubusercontent.com/4linux/543/main/opa-gatekeeper/2-opacontraint-deny-privileged.yaml Conteúdo do Constraint deny-privileged-container --apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sDenyPrivileged metadata: name: deny-privileged-container spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "devops" Através do comando kubectl, vamos criar o contraint deny-secret usando o arquivo modelo 3-opa-constraint-deny-secret.yaml disponível no Github da 4Linux. kubectl create -f https://raw.githubusercontent.com/4linux/543/main/opa-gatekeeper/3-opaconstraint-deny-secret.yaml Conteúdo do Constraint deny-privileged-container --apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sDenySecret metadata: name: deny-secret spec: match: kinds: - apiGroups: [""] kinds: ["Secret"] namespaces: - "devops" parameters: message: "ACESSO NEGADO!" Após criar o comando kubectl podemos verificar a existencia de cinco ConstraintTemplates. 519 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.98: Criar Constraints via kubectl - ETAPA 2 Lab 10.9 - Testando regras do OPA Gatekeeper Neste laboratório vamos testar as regras do OPA Gatekeeper. Vamos agora testar a criação de um Deploy através da opção Deployments e no botão Create. 520 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.99: Testando regras do OPA Gatekeeper - ETAPA 1 Vamos criar um deploy coma as seguintes informações: • Name: nginx • Replicas: 1 • Container Image: nginx Fig. 10.100: Testando regras do OPA Gatekeeper - ETAPA 2 521 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com É possível observar que não é possível criar um Deploy somente com 1 réplica! Fig. 10.101: Testando regras do OPA Gatekeeper - ETAPA 3 Edite os números de réplicas mudando para os 2 e tente criar novamente. Fig. 10.102: Testando regras do OPA Gatekeeper - ETAPA 4 522 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.103: Testando regras do OPA Gatekeeper - ETAPA 5 Como resultado final agora temos um Deploy com 2 réplicas. Fig. 10.104: Testando regras do OPA Gatekeeper - ETAPA 6 Faça um novo testes, selecionandoe Pods ao lado esquerdo da tela e depois clique no botão Create from YAML. 523 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.105: Testando regras do OPA Gatekeeper - ETAPA 7 Digite ou cole o modelo que cria um Pod com contexto de segurança que permite privilegios. --apiVersion: v1 kind: Pod metadata: labels: run: pod-priviled name: pod-priviled namespace: devops spec: containers: - image: nginx name: pod-priviled 524 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.106: Testando regras do OPA Gatekeeper - ETAPA 8 É possível observar que não é possível criar um Pod com privilégios! Fig. 10.107: Testando regras do OPA Gatekeeper - ETAPA 9 Remova as 2 últimas linhas do Pod e tente criar novamente. 525 10. Gerenciar Segurança com Rancher Caique Araujo / caiquearaujoac@gmail.com Fig. 10.108: Testando regras do OPA Gatekeeper - ETAPA 10 Como resultado final agora temos um Pod respeitando as regras de segurança. Fig. 10.109: Testando regras do OPA Gatekeeper - ETAPA 11 Caique Araujo / caiquearaujoac@gmail.com 11 Gerenciar Manutenção e Backup Competências da Aula • • • • • Gerenciar disponibilidade dos Nodes (cordon/drain) Instalar nfs-subdir-external-provisioner no cluster local Instalar Rancher Backups Realizar backup de clusters com Rancher Realizar restore de clusters com Rancher Cordon/Drain O cordon é um comando no Kubernetes que marca um nó como “não programável”. Isso significa que nenhum novo pod pode ser agendado nesse nó. Os pods que já estão em execução no nó não são afetados. Cordon é útil quando você precisa realizar manutenção em um nó. Por exemplo, pode ser necessário atualizar o kernel ou instalar um novo software. Com o cordão instalado, você pode ter certeza de que novos pods não serão agendados no nó enquanto você estiver realizando a manutenção. Depois de concluir a manutenção, você pode usar o comando uncordon para remover o marcador “não programável” e permitir que novos pods sejam agendados no nó. O comando kubectl cordon node impede que um nó receba novos pods, mas não afeta os pods que já estão em execução no nó. O drain é um comando no Kubernetes usado para remover normalmente um nó de um cluster. 526 527 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Isso é feito primeiro isolando o nó, o que o marca como não programável. Isso impede que novos pods sejam atribuídos ao nó. Em seguida, o processo de drenagem do nó exclui todos os pods no nó, um por um. Finalmente, o nó é desarmado e removido do cluster. O comando aceita várias opções para controlar o processo de despejo. Por exemplo, você pode usar a flag --ignore-daemonsets para ignorar pods gerenciados por objetos DaemonSet. Lab 11.1 - Gerenciar disponibilidade dos Nodes no Rancher Neste laboratório vamos aprender como gerenciar disponibilidade dos Nodes no Rancher. Cordon Para começar logue com a conta do usuário local admin. Fig. 11.1: Mudar estado do nó para Cordon - ETAPA 1 Em seguida clique em Nodes na área de Cluster. 528 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.2: Mudar estado do nó para Cordon - ETAPA 2 Selecione um nó da lista e clique no Cordon. Fig. 11.3: Mudar estado do nó para Cordon - ETAPA 3 Verifique o status do nó mudou para Cordoned. A partir de agora esse nó não irá receber novas réplicas de Pods! 529 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.4: Mudar estado do nó para Cordon - ETAPA 4 Para testar o estado de Cordon, vamos editar as configurações do deploy deploy-nginx. Fig. 11.5: Mudar estado do nó para Cordon - ETAPA 5 Na caixa réplicas altere o valor para 10 e Salve as alterações deploy. 530 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.6: Mudar estado do nó para Cordon - ETAPA 6 Para verificar em qual nó as novas réplicas foram locados, clique no deploy deploy-nginx. Fig. 11.7: Mudar estado do nó para Cordon - ETAPA 7 531 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Perceba que o nó que esta em Cordon possui poucas réplicas! Fig. 11.8: Mudar estado do nó para Cordon - ETAPA 8 Retorne a lista de nodes e remova o estado de Cordon, através do botão Uncordon. 532 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.9: Mudar estado do nó para Cordon - ETAPA 9 Verifique o status do nó mudou para Active. Fig. 11.10: Mudar estado do nó para Cordon - ETAPA 10 Drain Selecione um nó da lista e clique no Drain. 533 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.11: Mudar estado do nó para Drain - ETAPA 1 Nas opções do Drain selecione: • Delete Empty Dir Data: Yes • Force: Yes Confirme através do botão Drain. Fig. 11.12: Mudar estado do nó para Drain - ETAPA 2 534 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Acompanha a drenagem dos Pods! Fig. 11.13: Mudar estado do nó para Drain - ETAPA 3 É possível observar que uma vez que o nó esteja com o status Drained e não será possível alocar nenhuma réplica para ele. Fig. 11.14: Mudar estado do nó para Drain - ETAPA 4 535 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Ao clicar no nó podemos verificar a existência dos pods de infraestrutura e sistema. Fig. 11.15: Mudar estado do nó para Drain - ETAPA 5 Retorne a lista de nodes e remova o estado de Drained, através do botão Uncordon. Fig. 11.16: Mudar estado do nó para Drain - ETAPA 6 536 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Verifique o status do nó mudou para Active. Fig. 11.17: Mudar estado do nó para Drain - ETAPA 7 Backup/Restore O operador Rancher Backup é usado para fazer backup e restauração do Rancher em qualquer cluster Kubernetes. Este aplicativo é um gráfico do Helm e pode ser implantado por meio da página Rancher Apps & Marketplace ou usando a CLI do Helm. O operador de restauração de backup precisa ser instalado no cluster local e faz backup apenas do aplicativo Rancher. As operações de backup e restauração são executadas apenas no cluster local do Kubernetes. Lab 11.2 - Instalar nfs-subdir-external-provisioner no cluster Local Neste laboratório vamos instalar o pacote nfs-subdir-external-provisioner no cluster Local. Alterne para o painel do gcp e abra uma janela do navegador para a instância rancher. 537 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.18: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 1 Instale o cliente do nfs através do seguinte comando: sudo docker container exec -it rancher-manager zypper install nfs-client Confirme a instalação dos pacotes através da tecla Y. Fig. 11.19: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 2 Retorne ao painel do Rancher selecione o cluster local. 538 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.20: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 3 Em seguida selecione a opção Repositories em Apps & Marketplace. Fig. 11.21: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 4 Cique no botão Create para adicionar um novo repositório. 539 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.22: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 5 Preencha as seguintes informações: • Name: nfs-subdir-external-provisioner • Index URL: https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner Fig. 11.23: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 6 Verifique se o repositório nfs-subdir-external-provisioner foi criado corretamente. 540 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.24: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 7 Para instalar a nova aplicação clique em Charts, pesquise nfs na caixa ao lado direito da tela, e selecione o pacote nfs-subdir-external-provisioner. Fig. 11.25: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 8 Para continuar a instalação clique no botão Install. 541 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.26: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 9 Selecione o namespace detault e digite o nome nfs-subdir-external-provisioner. Selecione a opção Customize Helm options before install e clique no botão Next para continuar. Fig. 11.27: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 10 No bloco de configuração nfs vamos alterar as seguintes informações: • path: /backups • reclaimPolicy: Retain 542 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com • server: Digite ou cole o IP externo da instância nfs-server Clique no botão Next para continuar. Fig. 11.28: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 11 Para iniciar a instalação do pacote clique no botão Install. Fig. 11.29: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 12 Após a instalação exibir a mensagem SUCCESS clique no ícone para fechar o terminal. 543 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.30: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 13 Na área de Storage é possível observar que um novo StorageClass de nome nfs-client foi criado em nosso cluster. Fig. 11.31: Instalar nfs-subdir-external-provisioner no cluster Local - ETAPA 14 Lab 11.3 - Instalar Rancher Backups Neste laboratório vamos instalar o operador de backups no Rancher. Vamos instalar operador de backups através do botão Cluster Tools. 544 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.32: Instalar Rancher Backups - ETAPA 1 Em seguida clique no botão Install localizado em Rancher Backups. Fig. 11.33: Instalar Rancher Backups - ETAPA 2 Selecione o projeto Default e a opção Customize Helm options before install e clique no botão Next para continuar. 545 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.34: Instalar Rancher Backups - ETAPA 3 Na área de Chart Options vamos selecionar User an existent storage class. Na caixa Storage Class selecione nfs-client e na caixa Size deixe com 10Gi. Clique no botão Next para continuar. Fig. 11.35: Instalar Rancher Backups - ETAPA 4 546 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Para iniciar a instalação do pacote clique no botão Install. Fig. 11.36: Instalar Rancher Backups - ETAPA 5 Após a instalação exibir a mensagem SUCCESS clique no ícone para fechar o terminal. Fig. 11.37: Instalar Rancher Backups - ETAPA 6 Lab 11.4 - Gerenciar backup de cluster no Rancher Neste laboratório vamos gerenciar backups de cluster no Rancher. Para gerenciar backup e restauração de clusters, clique em Rancher Backups. 547 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.38: Gerenciar backup de cluster no Rancher - ETAPA 1 Para criar um novo backup, clique em Backup e depois no botão Create. Fig. 11.39: Gerenciar backup de cluster no Rancher - ETAPA 2 Preencha as seguintes informações para o seu novo backup: • • • • Name: clusters-gke Schedule: One-Time Backup Encryption: Store the contents of the backup unencrypted Storage Location: Use the defaul storage localtion configured during installation Clique no botão Create para criar o backup. 548 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.40: Gerenciar backup de cluster no Rancher - ETAPA 3 Como resultado final temos um backup dos clusters presentes no Rancher. Os arquivos de backups estão armazenados no servidor NFS, porque no cluster local o StorageClass default é o nfs-client! Fig. 11.41: Gerenciar backup de cluster no Rancher - ETAPA 4 Lab 11.5 - Gerenciar restore de cluster no Rancher Neste laboratório vamos gerenciar restore de cluster no Rancher. 549 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Antes de testar a restauração de clusters, vamos selecionar o cluster2-gke e depois removê-lo. Fig. 11.42: Gerenciar restore de cluster no Rancher - ETAPA 1 Fig. 11.43: Gerenciar restore de cluster no Rancher - ETAPA 2 Para criar um novo restore, clique em Restores e depois no botão Create. Fig. 11.44: Gerenciar restore de cluster no Rancher - ETAPA 3 550 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Preencha as seguintes informações para o seu novo restore: • Backup Source: An existing backup config • Target Backup: clusters-gke Clique no botão Create para criar o restore. Fig. 11.45: Gerenciar restore de cluster no Rancher - ETAPA 4 Como resultado final temos um restore dos clusters presentes no Rancher. Fig. 11.46: Gerenciar restore de cluster no Rancher - ETAPA 5 Aguarde alguns minutos e verifique que o cluster 2 foi restaurado com sucesso 551 11. Gerenciar Manutenção e Backup Caique Araujo / caiquearaujoac@gmail.com Fig. 11.47: Gerenciar restore de cluster no Rancher - ETAPA 6 Fig. 11.48: Gerenciar restore de cluster no Rancher - ETAPA 7 Caique Araujo / caiquearaujoac@gmail.com 12 Provisionar Rancher na GCP/AWS/Azure através do Terraform Competências da Aula • • • • • Introdução ao Terraform Instalação e configuração do google-cloud-sdk no Linux Provisionar o Rancher e Cluster Kubernetes com provedor GCP Provisionar o Rancher e Cluster Kubernetes com provedor AWS Provisionar o Rancher e Cluster Kubernetes com provedor Azure Terraform O Terraform é um software para criar, alterar e versionar a infraestrutura de TI de forma segura e eficaz. Ele é código aberto e disponível sob a licença Apache 2.0. Ele é construído para trabalhar com qualquer provedor de nuvem, incluindo AWS, Azure, Google Cloud, DigitalOcean, e muitos outros. Com o Terraform, você pode criar, alterar e destruir toda a infraestrutura de TI, como máquinas virtuais, redes, contêineres e muito mais. 552 553 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com LAB 12.1 - Instalação do Terraform Neste laboratório vamos aprender como instalar o Terraform. Através da instância custom, abra uma conexão SSH! Realize o download o binário compactado do Terraform. wget https://releases.hashicorp.com/terraform/1.0.7/terraform_1.0.7_linux_amd64.zip Descompacte o arquico através do comando unzip. unzip terraform_1.0.7_linux_amd64.zip Mova o binário terraform para o diretório /usr/local/bin/. sudo mv terraform /usr/local/bin/ Teste a instalação através do seguinte comando: terraform -version Resultado esperado: Terraform v1.0.7 on linux_amd64 Para terminar vamos instalar o Auto Completion para o Terraform. terraform -install-autocomplete 554 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com LAB 12.2 - Instalação e configuração do google-cloud-sdk no Linux Neste laboratório vamos aprender como instalar o google-cloud-sdk na máquina virtual com o sistema operacional Linux. O primeiro passo e fazer a instalação do Google Cloud SDK. Vamos seguir os passos da documentação oficial: https://cloud.google.com/sdk/docs/quickstart#deb Para começar realize o download do google-cloud-sdk: curl https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-354.0.0linux-x86_64.tar.gz \ -o "google-cloud-sdk.tar.gz" Em seguida descompacte o arquivo através do comando tar: tar -xf google-cloud-sdk.tar.gz Realize a instalação através do script install.sh, localizado na pasta google-cloud-sdk: ./google-cloud-sdk/install.sh Tecle ENTER para iniciar a instalação: Do you want to help improve the Google Cloud SDK (y/N)? <TECLE ENTER> Tecle Y e ENTER para atualizar a variável de ambiente $PATH e habilitar o autocompletion de comandos: Modify profile to update your $PATH and enable shell command completion? Do you want to continue (Y/n)? Tecle ENTER Y <TECLE ENTER> para confirme o caminho do arquivo .bashrc: 555 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Enter a path to an rc file to update, or leave blank to use [/home/suporte-gcp/.bashrc]: <TECLE ENTER> Antes de testar a instalação atualize a sessão do Shell, através do comando bash. bash Para instalar o Google Cloud SDK no Debian/Ubuntu através de repositórios, siga as etapas de instalação da documentação oficial: https://cloud.google.com/sdk/docs/quickstart#deb Para instalar o Google Cloud SDK no Red Hat/Fedora/CentOS através de repositórios, siga as etapas de instalação da documentação oficial: https://cloud.google.com/sdk/docs/quickstart#rpm Para instalar o Google Cloud SDK no Windows, siga as etapas de instalação da documentação oficial: https://cloud.google.com/sdk/docs/quickstart#windows Para instalar o Google Cloud SDK no Mac OSX, siga as etapas de instalação da documentação oficial: https://cloud.google.com/sdk/docs/quickstart#mac Configuração do google-cloud-sdk Execute o comando gcloud init para inicializar o SDK sem realizar um diagnostico da rede: gcloud init --skip-diagnostics Tecle Y e ENTER para realizar o login em sua conta do google: Your current configuration has been set to: [default] You must log in to continue. Would you like to log in (Y/n)? Y <TECLE ENTER> 556 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Em seguida copie o link e cole em seu navegador para permitir acesso ao Goocle Cloud SDK. Fig. 12.1: Configuração do Google Cloud SDK - ETAPA 1 Logue com a conta do usuário que possui acesso ao projeto multicloud. Fig. 12.2: Configuração do Google Cloud SDK - ETAPA 2 Clique no botão Permitir para permitir acesso ao Goocle Cloud SDK. 557 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.3: Configuração do Google Cloud SDK - ETAPA 3 Sera gerado um código onde é preciso copiá-lo: 558 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.4: Configuração do Google Cloud SDK - ETAPA 4 Retorne ao terminal onde o usuário suporte-gcp esta logado, e cole o código em Enter verification code: e tecle ENTER. Fig. 12.5: Configuração do Google Cloud SDK - ETAPA 5 Em seguida digite o valor correspondente ao projeto cluster2 e tecle ENTER. 559 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Pick cloud project to use: [1] cluster1-346911 [2] cluster2-346911 [3] tokyo-silicon-340713 [4] Create a new project Please enter numeric choice or text value (must exactly match list item): 2 <TECLE ENTER> Tecle Y e ENTER para configurar a região e zona na GCP: Do you want to configure a default Compute Region and Zone? (Y/n)? Y <TECLE ENTER> Digite o valor 7 e tecle ENTER, para selecionar us-central1-c. Did not print [42] options. Too many options [92]. Enter "list" at prompt to print choices fully. Please enter numeric choice or text value (must exactly match list item): 7 <TECLE ENTER> Para testar execute o comando que lista as instâncias na conta do suporte-aws: gcloud compute instances list Resultado: NAME EXTERNAL_IP STATUS gke-cluster2-gke-nodes-010f64a7-2w8r 104.198.77.34 RUNNING gke-cluster2-gke-nodes-010f64a7-7849 104.198.247.252 RUNNING gke-cluster2-gke-nodes-010f64a7-bw9p 34.121.235.149 RUNNING gke-cluster2-gke-nodes-010f64a7-phxd 34.136.111.55 RUNNING ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP us-central1-c n2-highmem-2 10.128.0.52 us-central1-c n2-highmem-2 10.128.0.51 us-central1-c n2-highmem-2 10.128.0.50 us-central1-c n2-highmem-2 10.128.0.53 Lab 12.3 - Provisionar o Rancher e Cluster Kubernetes com provedor GCP Neste laboratório vamos aprender como provisionar o Rancher e um cluster Kubernetes com provedor GCP através do Terraform. 560 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Excluir cluster cluster2-gke Para começar vamos acessar área de Cluster Management e selecionar a opção Clusters. Fig. 12.6: Excluir cluster cluster2-gke - ETAPA 1 Selecione o cluster2-gke e depois clique no botão Delete. Fig. 12.7: Excluir cluster cluster2-gke - ETAPA 2 Confirmar remoção através do botão Delete. 561 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.8: Excluir cluster cluster2-gke - ETAPA 3 } Provisionar o Rancher e Cluster na GCP com Terraform Alterne para a instância custom e realize o clone do projeto quickstart. Em seguida acesse a pasta quickstart/gcp: git clone https://github.com/rancher/quickstart cd quickstart/gcp O primeiro passo é pesquisar a localização do arquivo adc.json, que contém as suas credenciais de acesso a GCP. find /home/suporte -iname adc.json 562 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Resultado esperado: /home/suporte/.config/gcloud/legacy_credentials/<seu_email>/adc.json O proximo passo é selecionar em qual projeto vamos provisionar o Rancher. Execute o comando abaixo para listar os seus projetos na GCP: gcloud projects list Na lista de projetos vamos anotar o ID do cluster2: PROJECT_ID cluster1-346911 cluster2-346911 tokyo-silicon-340713 NAME cluster1 cluster2 My First Project PROJECT_NUMBER 761011794426 267338272310 35651740265 Agora que você possui as informações necessárias, vamos renomear o arquivo de variáveis utilizadas pelo Terraform: mv terraform.tfvars.example terraform.tfvars E em seguida edite o arquivo terraform.tfvars através do comando vim: vim terraform.tfvars Defina os seguintes valores: gcp_account_json = "/home/suporte/.config/gcloud/legacy_credentials/<seu_email>/adc.json" gcp_project = "<id_do_projeto_cluster2>" rancher_server_admin_password = "CursoRancher4Linux" cert_manager_version = "1.7.1" docker_version = "19.03" gcp_region = "us-central1" 563 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com gcp_zone = "us-central1-c" machine_type = "n1-standard-2" prefix = "rancher-gcp" rancher_kubernetes_version = "v1.21.11+k3s1" rancher_version = "v2.6.2" workload_kubernetes_version = "v1.21.10-rancher1-1" Antes de realizar o Deploy de uma instância com Terraform, execute o comando terraform para inicializar o ambiente. terraform init Resultado esperado: Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary. Se estiver tudo ok, você precisa executar o comando terraform apply. terraform apply --auto-approve Resultado esperado: Apply complete! Resources: 16 added, 0 changed, 0 destroyed. Outputs: rancher_node_ip = "34.68.230.125" rancher_server_url = "https://rancher.34.68.230.125.sslip.io" workload_node_ip = "104.198.247.252" init 564 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Acesse em seu navegador o endereço gerado em rancher_server_url. Clique n o botão Avançado e no link Ir para rancher para aceitar o certificado. Fig. 12.9: Provisionar o Rancher e Cluster na GCP com Terraform - ETAPA 1 Fig. 12.10: Provisionar o Rancher e Cluster na GCP com Terraform - ETAPA 2 Entre com o usuário admin a senha CursoRancher4Linux. 565 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.11: Provisionar o Rancher e Cluster na GCP com Terraform - ETAPA 3 Para visualizar os recursos do cluster, clique em quickstart-gcp-custom na área de EXPLORE CLUSTER. Fig. 12.12: Provisionar o Rancher e Cluster na GCP com Terraform - ETAPA 4 Como resultado final temos um Rancher com cluster kubernetes provisionado na GCP através do terraform! 566 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.13: Provisionar o Rancher e Cluster na GCP com Terraform - ETAPA 5 Para remover os recursos que o Terraform criou, execute o comando terraform destroy. terraform destroy --auto-approve Resultado esperado: google_compute_instance.rancher_server: Destruction complete after 1m55s tls_private_key.global_key: Destroying... [id=81d179f0562fd7f5ecd42f64a3300fef17247c0b] tls_private_key.global_key: Destruction complete after 1s google_compute_address.rancher_server_address: Destroying... [id=projects/cluster2-346911/ regions/us-central1/addresses/rancher-server-ipv4-address] google_compute_firewall.rancher_fw_allowall: Destroying... [id=projects/cluster2-346911/ global/firewalls/rancher-gcp-rancher-allowall] google_compute_address.rancher_server_address: Still destroying... [id=projects/cluster2 -346911/regions/us-cen.../addresses/rancher-server-ipv4-address, 10s elapsed] google_compute_firewall.rancher_fw_allowall: Still destroying... [id=projects/cluster2 -346911/global/firewalls/rancher-gcp-rancher-allowall, 10s elapsed] google_compute_address.rancher_server_address: Destruction complete after 11s google_compute_firewall.rancher_fw_allowall: Destruction complete after 11s Destroy complete! Resources: 16 destroyed. Lab 12.4 - Provisionar o Rancher e Cluster Kubernetes com provedor AWS Neste laboratório vamos aprender como provisionar o Rancher e um cluster Kubernetes com provedor AWS através do Terraform. 567 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Criar usuário e gerar chaves na AWS ATENÇÃO: Se você não possui uma configuração de chaves para o seu usuário na AWS, siga as instruções na Aula 2, “Lab 2.6 - Criar Cluster Kubernetes EKS”. Provisionar o Rancher e Cluster na AWS com Terraform Alterne para a instância custom e acesse a pasta quickstart/aws: cd ~/quickstart/aws Renomeie o arquivo de variáveis utilizadas pelo Terraform: mv terraform.tfvars.example terraform.tfvars E em seguida edite o arquivo terraform.tfvars através do comando vim terraform.tfvars Defina os seguintes valores: aws_access_key = "COLE_AQUI_SUA_aws_access_key" aws_secret_key = "COLE_AQUI_SUA_aws_secret_key" rancher_server_admin_password = "CursoRancher4Linux" add_windows_node = false aws_region = "us-east-1" aws_session_token = "" cert_manager_version = "1.7.1" docker_version = "19.03" instance_type = "t3a.medium" prefix = "rancher-aws" rancher_kubernetes_version = "v1.21.11+k3s1" rancher_version = "v2.6.2" vim: 568 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com windows_instance_type = "t3a.large" workload_kubernetes_version = "v1.21.10-rancher1-1" Antes de realizar o Deploy de uma instância com Terraform, execute o comando terraform para inicializar o ambiente. terraform init Resultado esperado: Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary. Se estiver tudo ok, você precisa executar o comando terraform apply. terraform apply --auto-approve Resultado esperado: Apply complete! Resources: 3 added, 0 changed, 1 destroyed. Outputs: rancher_node_ip = "35.175.124.18" rancher_server_url = "https://rancher.35.175.124.18.sslip.io" windows-workload-ips = [] windows_password = <sensitive> workload_node_ip = "3.232.131.17" Acesse em seu navegador o endereço gerado em rancher_server_url. Clique n o botão Avançado e no link Ir para rancher para aceitar o certificado. init 569 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.14: Provisionar o Rancher e Cluster na AWS com Terraform - ETAPA 1 Fig. 12.15: Provisionar o Rancher e Cluster na AWS com Terraform - ETAPA 2 Entre com o usuário admin a senha CursoRancher4Linux. 570 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.16: Provisionar o Rancher e Cluster na AWS com Terraform - ETAPA 3 Para visualizar os recursos do cluster, primeiro clique em Cluster Management. Fig. 12.17: Provisionar o Rancher e Cluster na AWS com Terraform - ETAPA 4 Em seguida clique no botão Explore do cluster quickstart-aws-custom 571 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.18: Provisionar o Rancher e Cluster na AWS com Terraform - ETAPA 5 Como resultado final temos um Rancher com cluster kubernetes provisionado na AWS através do terraform! Fig. 12.19: Provisionar o Rancher e Cluster na AWS com Terraform - ETAPA 6 Para remover os recursos que o Terraform criou, execute o comando terraform destroy --auto-approve Resultado esperado: terraform destroy. 572 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com aws_instance.rancher_server: Destruction complete after 2m13s aws_security_group.rancher_sg_allowall: Destroying... [id=sg-0dac790ec17ba9796] aws_key_pair.quickstart_key_pair: Destroying... [id=rancher-aws-rancher -20220429180926857600000001] aws_key_pair.quickstart_key_pair: Destruction complete after 1s tls_private_key.global_key: Destroying... [id=243a3aee6c226e8883bf89d239a638db86aeb87e] tls_private_key.global_key: Destruction complete after 0s aws_security_group.rancher_sg_allowall: Destruction complete after 2s Destroy complete! Resources: 15 destroyed. Lab 12.5 - Provisionar o Rancher e Cluster Kubernetes com provedor Azure Neste laboratório vamos aprender como provisionar o Rancher e um cluster Kubernetes com provedor Azure através do Terraform. O Terraform precisa do ID de client e secret do Azure para realizar o provisionamento do ambiente. Para gerar esses IDs sera necessário registrar um aplicativo no AD do Azure e criar um secret para esse aplicativo. Registrar aplicativo no Azure AD Para regitrar um aplicativo no no AD do Azure, clique no menu do portal e selecione na lista o menu Azure Acitive Directory e clique na opção Exibir. Fig. 12.20: Registrar aplicativo no Azure AD - ETAPA 1 573 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Em seguida clique em Registros de aplicativo ao lado esquerdo da tela. Fig. 12.21: Registrar aplicativo no Azure AD - ETAPA 2 Depois clique no ícone + Novo registro. Fig. 12.22: Registrar aplicativo no Azure AD - ETAPA 3 Digite app-rancher na caixa Nome e depois clique no botão Registrar. 574 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.23: Registrar aplicativo no Azure AD - ETAPA 4 Aproveite para copiar o ID do aplicativo (cliente) e colar em um arquivo de texto. Fig. 12.24: Registrar aplicativo no Azure AD - ETAPA 5 Copie também o ID do diretório (locatário) e cole em um arquivo de texto. 575 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.25: Registrar aplicativo no Azure AD - ETAPA 6 Criar secret para o aplicativo no Azure AD Para criar um novo certificado segredo, clique no link Adicionar um certificado ou segredo. Fig. 12.26: Criar secret para o aplicativo no Azure AD - ETAPA 1 Em seguida clique no botão + Novo segredo do cliente. 576 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.27: Criar secret para o aplicativo no Azure AD - ETAPA 2 Na caixa descrição digite app-rancher e depois clique no botão Adicionar. Fig. 12.28: Criar secret para o aplicativo no Azure AD - ETAPA 3 Aproveite para copiar o ID do secret e colar em um arquivo de texto. 577 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.29: Criar secret para o aplicativo no Azure AD - ETAPA 4 Definir atribuição de função o aplicativo no IAM O próximo passo agora é gerenciar as assinaturas, através do ícone Assinaturas. Digite e acesse assinatura na caixa de pesquisa. Fig. 12.30: Definir atribuição de função o aplicativo no IAM - ETAPA 1 Na lista selecione a sua assinatura onde vamos gerenciar novos recursos. 578 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.31: Definir atribuição de função o aplicativo no IAM - ETAPA 2 Aproveite para copiar o ID da Assinatura e colar em um arquivo de texto. Fig. 12.32: Definir atribuição de função o aplicativo no IAM - ETAPA 3 Próximo passo é clicar em IAM (Controle de acesso) ao lado esquerdo da tela. 579 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com O nosso objetivo é atribuir uma função a nossa aplicação app-rancher! Fig. 12.33: Definir atribuição de função o aplicativo no IAM - ETAPA 4 Em seguida clique no botão Adicionar atribuição de função. Fig. 12.34: Definir atribuição de função o aplicativo no IAM - ETAPA 5 Na lista selecione a função Proprietário e clique no botão Próximo. 580 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.35: Definir atribuição de função o aplicativo no IAM - ETAPA 6 Em seguida vamos selecionar um membro através do link + Selecionar membros. Fig. 12.36: Definir atribuição de função o aplicativo no IAM - ETAPA 7 Na caixa Selecionar sera preciso digitar app-rancher depois clicar no botão Selecionar. 581 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.37: Definir atribuição de função o aplicativo no IAM - ETAPA 8 Em seguida clique no botão Próximo. Fig. 12.38: Definir atribuição de função o aplicativo no IAM - ETAPA 9 A terminar clique no botão Examinar + atribuir. 582 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.39: Definir atribuição de função o aplicativo no IAM - ETAPA 10 Para validar se o aplicativo app-rancher tem função de Proprietário, clique na guia Atribuições de função. Fig. 12.40: Definir atribuição de função o aplicativo no IAM - ETAPA 11 Provisionar o Rancher e Cluster na Azure com Terraform Alterne para a instância custom e acesse a pasta quickstart/azure: 583 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com cd ~/quickstart/azure Renomeie o arquivo de variáveis utilizadas pelo Terraform: mv terraform.tfvars.example terraform.tfvars E em seguida edite o arquivo terraform.tfvars através do comando vim: vim terraform.tfvars Defina os seguintes valores: azure_client_id = "COLE_AQUI_O_SEU_azure_client_id" azure_client_secret = "COLE_AQUI_O_SEU_azure_client_secret" azure_subscription_id = "COLE_AQUI_O_SEU_azure_subscription_id" azure_tenant_id = "COLE_AQUI_O_SEU_azure_tenant_id" rancher_server_admin_password = "CursoRancher4Linux" windows_admin_password = "" add_windows_node = false azure_location = "Brazil South" cert_manager_version = "1.7.1" docker_version = "19.03" instance_type = "Standard_D2as_v4" prefix = "rancher-azure" rancher_kubernetes_version = "v1.21.11+k3s1" rancher_version = "v2.6.2" workload_kubernetes_version = "v1.21.10-rancher1-1" Antes de realizar o Deploy de uma instância com Terraform, execute o comando terraform para inicializar o ambiente. init 584 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com terraform init Resultado esperado: Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary. Se estiver tudo ok, você precisa executar o comando terraform apply. terraform apply --auto-approve Resultado esperado: Apply complete! Resources: 20 added, 0 changed, 0 destroyed. Outputs: rancher_node_ip = "20.226.57.80" rancher_server_url = "https://rancher.20.226.57.80.sslip.io" windows-workload-ips = [] workload_node_ip = "20.226.40.36" Acesse em seu navegador o endereço gerado em rancher_server_url. Clique n o botão Avançado e no link Ir para rancher para aceitar o certificado. 585 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.41: Provisionar o Rancher e Cluster na Azure com Terraform - ETAPA 1 Fig. 12.42: Provisionar o Rancher e Cluster na Azure com Terraform - ETAPA 2 Entre com o usuário admin a senha CursoRancher4Linux. 586 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.43: Provisionar o Rancher e Cluster na Azure com Terraform - ETAPA 3 Para visualizar os recursos do cluster, primeiro clique em Cluster Management. Fig. 12.44: Provisionar o Rancher e Cluster na Azure com Terraform - ETAPA 4 Em seguida clique no botão Explore do cluster quickstart-azure-custom 587 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com Fig. 12.45: Provisionar o Rancher e Cluster na Azure com Terraform - ETAPA 5 Como resultado final temos um Rancher com cluster kubernetes provisionado na Azure através do terraform! Fig. 12.46: Provisionar o Rancher e Cluster na Azure com Terraform - ETAPA 6 Para remover os recursos que o Terraform criou, execute o comando terraform destroy --auto-approve Resultado esperado: terraform destroy. 588 12. Provisionar Rancher na GCP/AWS/Azure através do Terraform Caique Araujo / caiquearaujoac@gmail.com tls_private_key.global_key: Destruction complete after 0s azurerm_network_interface.rancher-server-interface: Destruction complete after 6s azurerm_public_ip.rancher-server-pip: Destroying... [id=/subscriptions/0009f13e-68f4-4cae-8 cb2-9e26239157a1/resourceGroups/rancher-azure-rancher-quickstart/providers/Microsoft. Network/publicIPAddresses/rancher-server-pip] azurerm_subnet.rancher-quickstart-internal: Destroying... [id=/subscriptions/0009f13e-68f4 -4cae-8cb2-9e26239157a1/resourceGroups/rancher-azure-rancher-quickstart/providers/ Microsoft.Network/virtualNetworks/rancher-azure-network/subnets/rancher-quickstartinternal] azurerm_public_ip.rancher-server-pip: Still destroying... [id=/subscriptions/0009f13e-68f4 -4cae-8cb2-...k/publicIPAddresses/rancher-server-pip, 10s elapsed] azurerm_subnet.rancher-quickstart-internal: Still destroying... [id=/subscriptions/0009f13e -68f4-4cae-8cb2-...rk/subnets/rancher-quickstart-internal, 10s elapsed] azurerm_public_ip.rancher-server-pip: Destruction complete after 10s azurerm_subnet.rancher-quickstart-internal: Destruction complete after 11s azurerm_virtual_network.rancher-quickstart: Destroying... [id=/subscriptions/0009f13e-68f4 -4cae-8cb2-9e26239157a1/resourceGroups/rancher-azure-rancher-quickstart/providers/ Microsoft.Network/virtualNetworks/rancher-azure-network] azurerm_virtual_network.rancher-quickstart: Still destroying... [id=/subscriptions/0009f13e -68f4-4cae-8cb2-.../virtualNetworks/rancher-azure-network, 10s elapsed] azurerm_virtual_network.rancher-quickstart: Destruction complete after 13s azurerm_resource_group.rancher-quickstart: Destroying... [id=/subscriptions/0009f13e-68f4-4 cae-8cb2-9e26239157a1/resourceGroups/rancher-azure-rancher-quickstart] azurerm_resource_group.rancher-quickstart: Still destroying... [id=/subscriptions/0009f13e -68f4-4cae-8cb2-...roups/rancher-azure-rancher-quickstart, 10s elapsed] azurerm_resource_group.rancher-quickstart: Destruction complete after 16s