SLA, DR e IaC¶
Objetivos
- Entender os conceitos básicos Infraestrutura como código.
- Entender os conceitos básicos sobre SLA e DR.
Pré-requisitos:
Terminar o capítulo anterior (Openstack) Realizar a leitura [Kavis - Cap 11 e Cap 13]
Info
DIVISÃO DO ROTEIRO O Roteiro é dividido em 4 partes principais.
- Entendendo IaC - Visão Geral
- Criando hierarquia de projetos
- Criando a Infraestrutura utilizando IaC
- Subindo aplicação separada por aluno
IaC Visão geral¶
Infraestrutura como código (IaC) é o gerenciamento e provisionamento de infraestrutura por meio de código, em vez de processos manuais.
Utilizando o IaC, é possível criar arquivos de configuração que contenham especificações de infraestrutura, o que facilita a edição e distribuição das configurações. Também garante que você sempre forneça o mesmo ambiente. Ao codificar e documentar suas especificações de configuração, o IaC auxilia no gerenciamento de configuração e ajuda a evitar alterações de configuração não documentadas. O IaC evoluiu para lidar com a deriva ambiental em dutos de liberação. Sem o IaC, as equipes teriam que manter as configurações do ambiente de implantação separadamente. Com o tempo, cada ambiente se torna um "floco de neve", uma configuração única que não pode ser replicada automaticamente. Inconsistências entre ambientes podem causar problemas de implantação. O gerenciamento e a manutenção da infraestrutura envolvem processos manuais que são propensos a erros e difíceis de rastrear.
Reforçando¶
O IaC evita a configuração manual e garante consistência ao expressar o estado desejado do ambiente por meio de código bem documentado em formatos como por exemplo o JSON. A implantação de infraestrutura com IaC é repetível e evita problemas de tempo de execução causados por configurações quebradas ou dependências ausentes.
Para fazer alterações, você precisa editar a origem, não o destino.
A idempotência (a capacidade de uma determinada operação produzir sempre o mesmo resultado) é um princípio fundamental da IaC. O comando deploy sempre define o ambiente de destino com a mesma configuração, independentemente do estado inicial do ambiente. A idempotência é alcançada configurando automaticamente os destinos existentes ou excluindo os destinos existentes e recriando novos ambientes.
O que é Terraform em Infraestrutura como Código?¶
É uma das possiveis ferramentas para IaC.
O mercado de Infraestrutura como Código amadureceu ao longo dos anos. Há uma grande variedade de ferramentas, oferecendo diferentes recursos.
Terraform é a infraestrutura da HashiCorp como ferramenta de código. Ele permite que você defina recursos e infraestrutura em arquivos de configuração declarativos legíveis por humanos e gerencie o ciclo de vida de sua infraestrutura. O uso do Terraform tem várias vantagens em relação ao gerenciamento manual de sua infraestrutura:
- O Terraform pode gerenciar a infraestrutura em várias plataformas de nuvem.
- A linguagem de configuração legível por humanos ajuda você a escrever código de infraestrutura rapidamente.
- O estado do Terraform permite rastrear alterações de recursos em todas as suas implantações.
- Você pode confirmar suas configurações no controle de versão para colaborar com segurança na infraestrutura.
Para implantar infraestrutura com o Terraform:
* Scope - Identifique a infraestrutura para o seu projeto.
* Author - Escreva a configuração para sua infraestrutura.
* Initialize - Instale os plugins que o Terraform precisa para gerenciar a infraestrutura.
* Plan - Visualize as alterações que o Terraform fará para corresponder à sua configuração.
* Apply - Faça as alterações planejadas.
Instalar Terraform¶
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform
Ir na pagina oficial e baixar o pacote binário
https://www.terraform.io/downloads
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
Entendendo a estrutura de gestão de projetos Openstack¶
O OpenStack, uma plataforma de nuvem de código aberto, fornece uma infraestrutura flexível como serviço (IaaS) para grandes e pequenas organizações. A Canonical oferece um ecossistema para implementar e gerenciar o OpenStack através de ferramentas como MAAS (Metal as a Service), que gerencia o hardware físico; JUJU, que orquestra os serviços; e o próprio OpenStack, que gerencia os recursos de computação, armazenamento e rede na nuvem. Dentro do OpenStack, especialmente na aba de Identity (conhecida como Keystone), você encontra vários conceitos fundamentais: Domains, Projects, Users, Groups, e Roles. Vamos detalhar cada um:
-
Domains
Um Domain no OpenStack é a unidade de alta hierarquia para organizar e isolar os recursos e usuários. Ele é usado para agrupar projetos e usuários, permitindo uma gestão mais fácil em ambientes com múltiplas organizações ou departamentos distintos. Em outras palavras, um domínio pode ser considerado como uma organização ou um tenant de mais alto nível.
-
Projects
Um Project (anteriormente conhecido como "tenant") é uma unidade que agrupa e isola recursos dentro do OpenStack. Projetos são utilizados para organizar usuários, instâncias de máquinas virtuais, redes, e outros recursos de nuvem, facilitando a gestão de custos, segurança e quota de recursos. Os projetos podem ser entendidos como departamentos ou times dentro de uma organização, cada um com seus recursos alocados.
-
Users
Um User é uma conta que representa uma pessoa, sistema ou serviço que utiliza ou gerencia os recursos na nuvem do OpenStack. Usuários podem ter acesso a um ou mais projetos e podem ter diferentes permissões em cada um, dependendo dos roles (funções) que lhes são atribuídos.
-
Groups
Um Group é uma coleção de usuários. Grupos facilitam a gestão de políticas e permissões para um conjunto de usuários, permitindo que administradores apliquem regras de acesso e permissões a muitos usuários simultaneamente, em vez de configurar cada usuário individualmente.
-
Roles
Um Role (função) define as permissões de acesso que um usuário ou grupo tem sobre os recursos e operações dentro do OpenStack. Roles determinam o que um usuário pode ou não fazer. Por exemplo, um usuário com o role de "admin" em um projeto pode criar e gerenciar instâncias de máquinas virtuais, redes e volumes de armazenamento, enquanto um usuário com um role mais restrito pode apenas visualizar esses recursos.
Esses conceitos trabalham juntos dentro do Keystone para fornecer um sistema de gerenciamento de identidade e acesso (IAM) robusto, flexível e escalável para projetos de nuvem OpenStack, permitindo uma administração eficaz dos recursos de nuvem em ambientes complexos e multi-tenant.
Criando a hierarquia de projetos separado por aluno¶
Agora vamos ver como isso funciona. Até agora você acessou o dashboard ou utilizou a interface de linha de comando (CLI) para criar rede, subrede, instancia, roteador e outros recursos. Iremos criar isso via cógigo
Para não confundir os recursos de cada usuário, como por exemplo na topologia abaixo, iremos criar uma separação lógica destes usuários, assim como deveria acontecer em nuvem
Criar um domínio, dois projetos e um usuário "Aluno" em cada projeto no OpenStack via Horizon Dashboard (a interface web do OpenStack), siga os passos abaixo. Este processo pode variar ligeiramente dependendo da versão do OpenStack que você está utilizando, mas em geral, os passos devem ser bastante similares.
Criar um unico Domain¶
- Criar um Domínio Navegue até Identity > Domains. Clique em Create Domain. Forneça o nome para o domínio (AlunosDomain) e uma descrição opcional. Clique em Create Domain para finalizar a criação.
- Defina o Domain criado com o novo Contexto de uso
Criar um projeto para cada Aluno.¶
- Criar Projeto Navegue até Identity > Projects. Clique em Create Project. Forneça o nome para o projeto que deve seguir o padrão → ( Kit + letra do kit + nome_do _aluno). Adicione uma descrição opcional para o projeto. Configure qualquer quota que você deseje para o projeto. Clique em Create Project para concluir. Crie o proximo project, aluno2
- Criar Usuários Navegue até Identity > Users. Clique em Create User. Forneça o nome do usuário (por exemplo, aluno1), e-mail, descrição, e uma senha inicial. Selecione o domínio (que voces acabaram de criar). Selecione o projeto deste aluno para associar o usuário a este projeto. Atribua-lhe os papéis administrativos. Repita este processo para o segundo usuário (aluno2). Clique em Create User para cada usuário para finalizar.
- Atribuir Papéis aos Usuários caso esquecido acima Após criar os usuários, você será capaz de atribuir papéis a eles dentro do projeto. Navegue até Identity > Projects e clique no projeto que você criou (AlunosProject). Vá até a aba Members. Clique em Manage Members. Adicione os usuários (aluno1 e aluno2) ao projeto e atribua-lhes os papéis administrativos. Clique em Save para aplicar as alterações.
Criando a Infraestrutura utilizando IaC¶
O Terraform conta com arquivos .tf, que definem a infraestrutura.
O Terraform sabe o que é implantado por meio do arquivo de estado. Este estado é armazenado por padrão em um arquivo local chamado “terraform.tfstate”. Também pode ser armazenado remotamente, o que funciona melhor em um ambiente de equipe.
O Terraform permite vários provedores, normalmente inicializados em um arquivo chamado provider.tf.
A estrutura de pastas ficará conforme figura abaixo:
-
Cada Aluno deve entrar no MAIN pela sua maquina e criar a estrutura
-
Crie umapasta para você com o mesmo nome do projeto criado na etapa acima:
-
Dentro desta pasta crie a pasta terraform e dentro dela crie os arquivos abaixo: (modifique o que for necessário)
provider.tf
# Terraform Openstack deployment
# Author: Tiago Demay - tiagoaodc@insper.edu.br
# Define required providers
terraform {
required_version = ">= 0.14.0"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.35.0"
}
}
}
# Configure the OpenStack Provider
provider "openstack" {
region = "RegionOne"
user_name = "SEU_USUARIO"
}
instance1.tf
resource "openstack_compute_instance_v2" "instancia" {
name = "basic"
image_name = "bionic-amd64"
flavor_name = "m1.small"
key_pair = "mykey"
security_groups = ["default"]
network {
name = "network_1"
}
depends_on = [openstack_networking_network_v2.network_1]
}
instance2.tf
resource "openstack_compute_instance_v2" "instancia" {
name = "basic2"
image_name = "jammy-amd64"
flavor_name = "m1.tiny"
key_pair = "mykey"
security_groups = ["default"]
network {
name = "network_1"
}
depends_on = [openstack_networking_network_v2.network_1]
}
Info
observação amiga: a sua rede e do seu amigo não podem ter o mesmo nome! Então uma delas pode ser chamada de network_1 e outra network_2 por exemplo! (lembre de mudar em todos arquivos que a utilizam).
network.tf
resource "openstack_networking_network_v2" "network_1" {
name = "network_1"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
network_id = "${openstack_networking_network_v2.network_1.id}"
cidr = "192.167.199.0/24"
}
Info
Alterar a variavel external_network_id = <"ID_EXT_NETWORK"> para o ID da sua rede externa, você pode encontrar esta informacão, acessando o Dashboard do Openstack ou via CLI openstack
router.tf
resource "openstack_networking_router_v2" "router_1" {
name = "my_router"
admin_state_up = true
external_network_id = <"ID_EXT_NETWORK">
}
resource "openstack_networking_router_interface_v2" "int_1" {
router_id = "${openstack_networking_router_v2.router_1.id}"
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
}
Credenciais do seu usuário¶
- Entre no dashboard com o login do seu usuario (cada aluno terá o seu);
- Na aba project → API access, faça o download do openstack rc file do seu usuário;
- Copie o conteudo para a sua pasta de projeto (Obs: o arquivo será baixado noseu notebook pessoal, passe o conteudo para o servidor Main)
- De a permissão de execução para o arquivo
chmod +x arquivo.sh
- Carregue as variaveis de ambiente do seu usuário
source arquivo.sh
Dica
Caso aconteça o erro abaixo:
Attempting to parse version from URL.
SSL exception connecting to https://172.16.0.x:5000/v3/auth/tokens: HTTPSConnectionPool(host='172.16.0.x', port=5000):
Max retries exceeded with url: /v3/auth/tokens (Caused by SSLError(SSLCertVerificationError
(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)')))
O erro que você está enfrentando está relacionado à verificação do certificado SSL ao tentar se conectar ao endpoint do OpenStack. O erro [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate sugere que o cliente (neste caso, possivelmente um cliente OpenStack CLI, uma SDK ou um script personalizado que usa a API OpenStack) não conseguiu verificar o certificado SSL do servidor devido à ausência do certificado da autoridade certificadora (CA) correspondente no armazenamento local de certificados confiáveis.
Aqui estão algumas maneiras de contornar ou resolver esse problema, basta utilizar uma delas:
- Colocar suas credenciais depois das credenciais do admin, isso modifica somente o necessário nas ENVs do ambiente
- Desabilitar a Verificação de SSL (Não Recomendado para Produção)
export OS_VERIFY=False
ou dar o comando com a flag --insecure
- Indicar o caminho correto do certificado
export OS_CACERT=/caminho/para/o/certificado.pem
Para fazer a implementação da infraestrutura, execute os comandos abaixo:
terraform plan
- Este comando é utilizado para criar um plano de execução. Ele mostra quais ações o Terraform executará quando você aplicar suas configurações.
terraform apply
- O comando
terraform apply
aplica as mudanças necessárias para alcançar o estado desejado da sua configuração. Ele cria, atualiza ou destrói os recursos conforme necessário.
Utlize a CLI do openstack para verificar que a instancia foi criada.
Exercise
CheckPoint-Por_aluno
- De um print das Telas abaixo:
- Da aba Identy projects no OpenStack.
- Da aba Identy users no OpenStack.
- Da aba compute overview no OpenStack.
- Da aba compute instances no OpenStack.
- Da aba network topology no OpenStack.
Criando um plano de Disaster Recovery e SLA (QUESTOES)¶
Pode ser no Word!!!¶
Exercise
QUESTOES
- Você é o CTO (Chief Technology Officer) de uma grande empresa com sede em várias capitais no Brasil e precisa implantar um sistema crítico, de baixo custo e com dados sigilosos para a área operacional.
- Você escolheria Public Cloud ou Private Cloud?
- Agora explique para ao RH por que você precisa de um time de DevOps.
- Considerando o mesmo sistema crítico, agora sua equipe deverá planejar e implementar um ambiente resiliente e capaz de mitigar possíveis interrupções/indisponibilidades. Para isso, identifiquem quais são as principais ameaças que podem colocar sua infraestrutura em risco, e descreva as principais ações que possibilitem o restabelecimento de todas as aplicações de forma rápida e organizada caso algum evento cause uma interrupção ou incidente de segurança. Para isso monte um plano de DR e HA que considere entre as ações:
- Mapeamento das principais ameaças que podem colocar em riscos o seu ambiente.
- Elenque e priorize as ações para a recuperação de seu ambiente em uma possível interrupção/desastre.
- Como sua equipe irá tratar a política de backup?
- Considerando possíveis instabilidades e problemas, descreva como alta disponibilidade será implementada em sua infraestrutura.