Implante o Oracle Cloud Infrastructure Kubernetes Engine (OKE) usando Módulos Avançados do Terraform

Introdução

Este é o segundo tutorial em nossa série de automação do Oracle Cloud Infrastructure Kubernetes Engine (OKE), com base nos conceitos fundamentais do primeiro, Crie o Cluster do Oracle Cloud Infrastructure Kubernetes Engine usando o Terraform. Neste artigo, levamos as implantações do OKE para o próximo nível, introduzindo automação avançada e design modular para provisionar ambientes escaláveis, resilientes e altamente personalizáveis na Oracle Cloud Infrastructure (OCI).

Desenvolvido para engenheiros e clientes da Oracle, este guia permite que você transforme uma configuração básica do Terraform em um módulo estruturado e reutilizável que pode ser adaptado a qualquer tamanho de implantação. Utilizando os princípios de Infraestrutura como Código (IaC) com o Terraform (versão da comunidade), combinados com o Jenkins e a Oracle Command Line Interface (CLI), fornecemos uma solução de provisionamento single-click para clusters do OKE, suas configurações e testes automatizados.

Este tutorial se concentra em quatro áreas principais:

  1. Design e Automação Modulares: Crie módulos reutilizáveis para componentes principais, como VCN, Clusters do OKE e Hosts do Bastion, com controle de versão para compatibilidade para simplificar o gerenciamento e promover a reutilização de código.
  2. Configuração Dinâmica: Gerencie configurações específicas do ambiente (dev, test, prod) a partir de uma única base de código para implantações consistentes e repetíveis.
  3. Pools de Nós Avançados: Otimize o uso e os custos de recursos com formas especializadas, imagens compatíveis do OKE e rótulos para posicionamento inteligente da carga de trabalho.
  4. Integração perfeita de CI/CD: Automatize o provisionamento e as atualizações do OKE usando pipelines que integram o Terraform, o Jenkins e a CLI da OCI para implantações one-click eficientes.

A arquitetura descrita neste guia usa uma topologia de rede em camadas para criar uma base segura e escalável. Ele separa o tráfego do plano de controle, dos nós de trabalho e do balanceador de carga, garantindo flexibilidade para cargas de trabalho corporativas de qualquer escala. Demonstraremos como automatizar totalmente o provisionamento desse ambiente, incluindo rede, clusters e pools de nós, ao mesmo tempo em que fornecemos as ferramentas para personalizar e estender a solução às suas necessidades.

Este tutorial pressupõe uma compreensão dos princípios do Kubernetes, da rede e do IaC, bem como do conhecimento prático de ferramentas como Terraform, OCI CLI e Jenkins. No final, você terá as habilidades necessárias para implementar um ambiente OKE resiliente, de alto desempenho e escalável na OCI, com a flexibilidade de adaptá-lo aos seus requisitos específicos.

Visão Geral do Oracle Cloud Infrastructure Kubernetes Engine (OKE)

Embora o Oracle Cloud Infrastructure Kubernetes Engine (OKE) seja um serviço gerenciado, a execução bem-sucedida de cargas de trabalho de missão crítica requer uma abordagem de arquitetura deliberada e bem estruturada. A transição de uma configuração básica para um ambiente de nível empresarial escalável exige um planejamento cuidadoso e o uso de ferramentas de Infraestrutura como Código (IaC), como o Terraform.

A modularização e a automação são essenciais para o OKE, a fim de garantir escalabilidade, segurança e eficiência operacional. Ao aproveitar módulos estruturados e ferramentas de automação, as empresas podem implementar e gerenciar cargas de trabalho de missão crítica com consistência, reduzir erros manuais e acelerar o tempo de lançamento no mercado.

O diagrama a seguir ilustra a arquitetura do OKE, destacando sua topologia de rede em camadas, ponto final de API privada e controles de acesso seguro:

Arquitetura do OKE

Para obter um exemplo detalhado da arquitetura, consulte a documentação da Oracle.

Considerações de Arquitetura
Criar um ambiente OKE escalável envolve enfrentar, pelo menos, os seguintes desafios técnicos:

Principais Elementos de Design
Essa solução modular é desenvolvida em uma arquitetura de rede em camadas, fornecendo uma base segura e escalável para cargas de trabalho empresariais no OKE:

Criando uma Automação Modular do Terraform para o OKE

Transformando uma configuração do Terraform flat em uma structured, o design modular é essencial para criar ambientes repetíveis e escaláveis. Essa abordagem garante melhor organização, reutilização de código e capacidade de manutenção em escala empresarial, com controle de versão para compatibilidade e colaboração entre as equipes.

Processo de Transformação: Flat to Structured Module

A partir do módulo simples descrito no primeiro tutorial, refatoramos o código em um design modular:

  1. Reestruturando o Diretório: Criando módulos filhos (vcn, oke, bastion) e organizando recursos em suas respectivas pastas.
  2. Aplicando Princípios-Chave:
    • Estrutura e Lógica: Encapsula recursos em diretórios independentes (por exemplo, modules/vcn, modules/oke, modules/bastion) e divide o código monolítico em main.tf, variables.tf e outputs.tf para fins de legibilidade e manutenção.
    • Entradas/Saídas e Controle de Versão: Defina entradas em variables.tf, exponha saídas em outputs.tf e use o controle de versão do módulo Terraform (restrição version em source) para obter fluxo de dados contínuo e compatibilidade.
    • Orquestração: trata a lógica condicional, como count, no nível do módulo raiz, mantendo os módulos filhos focados em seus recursos.

Estrutura do Diretório: Plano vs. Modular

Módulo Simples: Um único diretório monolítico com todos os recursos em alguns arquivos. Simples para provas de conceito, mas torna-se incontrolável à medida que a complexidade cresce.

Estrutura do Módulo Simples

Módulo Estruturado: Cada grupo de recursos (VCN, OKE, Bastion) está em seu próprio diretório de módulos. O módulo raiz orquestra dependências e configuração de nível superior.

Estrutura Avançada do Módulo

Módulos de Exemplo

Por que Módulos?

Orquestração de Módulos - raiz main.tf

O main.tf raiz orquestra a implantação de três módulos principais (modules/vcn, modules/oke e modules/bastion) em sequência. Cada módulo é chamado condicionalmente com base em flags de configuração (is_vcn_created, is_oke_created, is_bastion_created), fornecendo flexibilidade na implantação. Veja a seguir uma versão simplificada do fluxo de orquestração, destacando a lógica do módulo-chave sem detalhar o main.tf completo.

Fluxo de Orquestração:

  1. Módulo da VCN (modules/vcn):
    • Provisiona a rede virtual na nuvem (VCN) e as sub-redes relacionadas (por exemplo, sub-redes privadas para API do Kubernetes e nós de trabalho, sub-redes públicas para balanceadores de carga e bastion).
    • Controlado por is_vcn_created. Se ativada, ela criará a VCN; caso contrário, ela assumirá uma VCN existente (você precisará fornecer seu OCID de sub-rede usado).
    • Exemplo de trecho de código:
         module "vcn" {
             count = var.is_vcn_created ? 1 : 0  
             source = "./modules/vcn?ref=v1.0.0"  # Specify the module version  
             # Key variables: compartment_id, vcn_cidr_block, subnet configs, ...  
         }
      
  2. Módulo OKE (modules/oke):
    • Implanta o cluster do OCI Kubernetes Engine (OKE), incluindo o plano de controle e os pools de nós gerenciados opcionais.
    • Depende do módulo VCN para IDs de sub-rede. Só será chamado se is_oke_created e is_vcn_created forem verdadeiros.
    • Exemplo de trecho de código:
         module "oke" {
             count = var.is_oke_created && var.is_vcn_created ? 1 : 0  
             source = "./modules/oke?ref=v1.0.0"  # Specify the module version   
             # Key variables: vcn_id, subnet IDs, k8 version, node pool config, ...  
         }
      
  3. Módulo Bastion (modules/bastion):
    • Cria um bastion host para acesso SSH seguro a recursos privados.
    • Depende do módulo VCN para o ID da sub-rede pública. Só será chamado se is_bastion_created e is_vcn_created forem verdadeiros.
    • Exemplo de trecho de código:
         module "bastion" {
             count = var.is_bastion_created && var.is_vcn_created ? 1 : 0  
             source = "./modules/bastion?ref=v1.0.0"  # Specify the module version   
             # Key variables: bastion_subnet_id, SSH keys, parameters...  
         }
      

      Observações Principais:

    • Dependências de Módulos: As saídas do módulo VCN, como module.vcn[0].vcn_id, são passadas como entradas para os módulos OKE e Bastion, garantindo uma cadeia de dependência clara.
    • Lógica de Configuração: Mapas de parâmetros simplificados (por exemplo, node_pool_param, bastion_params) simplificam a configuração e a legibilidade.
    • Controle de Versão: O uso de restrições de versão no source garante que os módulos sejam implantados com as versões corretas e testadas, garantindo a compatibilidade

Depois de estabelecer uma estrutura modular do Terraform para o OKE, a próxima etapa é automatizar sua implantação. A automação garante consistência, reduz erros manuais, acelera o processo de provisionamento e melhora diretamente o Time-to-Market (TTM) ao permitir a entrega rápida de novos recursos e serviços.

Opções de Automação

Várias ferramentas podem automatizar implantações do OKE, incluindo CLI do Terraform, ORM (OCI Resource Manager), CLI do OCI, módulos do Ansible OCI e Helm. No entanto, este guia se concentra nas duas abordagens de infraestrutura como código (IaC) mais proeminentes na Oracle Cloud Infrastructure (OCI): CLI do Terraform e OCI Resource Manager (ORM).

Ambas as ferramentas utilizam a mesma Linguagem de Configuração HashiCorp declarativa (HCL), mas diferem em seus modelos operacionais:

Vamos explorar cada opção em detalhes.

Opção 1: Implantar Recursos do OKE com a CLI do Terraform

A CLI do Terraform é ideal quando você precisa de controle completo sobre seu ambiente local. É mais adequado para desenvolvedores individuais ou pequenas equipes que podem gerenciar o arquivo de estado e colaborar de forma eficaz usando um backend compartilhado. Sua portabilidade permite que você o execute de qualquer máquina: local, VM, contêiner, OCI CloudShell ou executores de CI/CD, como Jenkins. No entanto, essa flexibilidade vem com responsabilidades, como gerenciar arquivos de estado e garantir configurações locais consistentes entre os membros da equipe.

Para começar, faça download e descompacte o pacote de código-fonte da CLI do Terraform no diretório de trabalho do Terraform. Este pacote inclui main.tf, um exemplo de terraform.tfvars e configurações detalhadas de módulos: Faça download de oke_advanced_module.zip.

A implantação do OKE com a CLI do Terraform envolve sete tarefas principais, desde a configuração de variáveis e rede até a configuração do cluster do OKE, pools de nós e bastion host. Veja a seguir as etapas detalhadas para provisionar e verificar seu ambiente OKE usando a CLI do Terraform.

Tarefa 1.1: Configurar Variáveis do Terraform

Atualize o arquivo terraform.tfvars com detalhes específicos do ambiente, como tenancy_ocid, região, compartment_ocid e network_compartment_ocid. Ative os seguintes sinalizadores para controlar a criação de recursos:

Tarefa 1.2: Configuração de Rede

Defina blocos CIDR para a VCN e suas sub-redes:

Tarefa 1.3: Configuração do Cluster do OKE

Tarefa 1.4: Configuração do Pool de Nós

Configuração do Bastion Host da Tarefa 1.5

Tarefa 1.6: Executar Comandos do Terraform

Execute os seguintes comandos para implantar a infraestrutura:

	terraform init
	terraform plan
	terraform apply

Após a conclusão do terraform apply, seu cluster do OKE será provisionado com:

Tarefa 1.7: Verificação

  1. Navegue até a Console do OCI para verificar a configuração do cluster.
  2. Execute terraform destroy para limpar recursos quando terminar.

Automatizando a Implantação do OKE com o Pipeline CI/CD do Jenkins
Para integrar a implantação do OKE em pipelines DevOps, a CLI do Terraform é uma excelente escolha. Nossa abordagem, detalhada em Criar Cluster do Oracle Cloud Infrastructure Kubernetes Engine usando o Terraform, usa script de base para orquestrar o processo. Esse workflow pode ser consolidado em um pipeline do Jenkins para execução automatizada.

Opção 2: Automação do OKE com o OCI Resource Manager

O OCI Resource Manager (ORM) é a escolha ideal quando você precisa de uma solução gerenciada nativa da nuvem para implantações de infraestrutura. Ele é especialmente adequado para ambientes corporativos colaborativos em que a segurança, o gerenciamento centralizado de estados e a governança são essenciais. A principal vantagem do ORM é que ele lida com todo o ciclo de vida de implantação na OCI, armazenando com segurança o arquivo de estado e evitando conflitos. Isso elimina a necessidade de configuração local ou gerenciamento de um backend compartilhado. Além disso, a profunda integração do ORM com o Oracle Cloud permite que ele aproveite recursos nativos da OCI, como Identity and Access Management (IAM), aprimorando a segurança e o controle.

Neste tutorial, combinamos o OCI Resource Manager (ORM) com a CLI do OCI, o Bash e os integramos aos pipelines de CI/CD do Jenkins, oferecendo um fluxo de automação one-click completo com recursos adicionais do DevOps, como detecção de desvio, gerenciamento de estado seguro e colaboração de equipe com controle de versão para compatibilidade.

Fluxo do OCI Resource Manager
O diagrama a seguir ilustra o workflow do ORM, composto por sete etapas:
Workflow do ORM

  1. Configuração de Origem: Define a origem da configuração IaC (por exemplo, OCI Object Storage, GitHub, arquivo Zip).
  2. Modelo do Terraform: A infraestrutura é definida usando o Terraform.
  3. OCI Resource Manager: O ORM pega o modelo do Terraform e gerencia o processo de provisionamento.
  4. Criar uma Pilha: O ORM usa o modelo para criar uma pilha de recursos do OCI.
  5. Plano: Gera um plano que descreve as ações a serem executadas.
  6. Aplicar: Provisiona os recursos com base no plano.
  7. Destruir: Desprovisa os recursos quando não são mais necessários.

Para implantar um cluster do OKE usando o novo módulo do OCI Resource Manager (ORM), comece fazendo download do módulo avançado do ORM: oke_advanced_module_orm.zip. Essa versão é pré-configurada para o ORM, com variáveis definidas como placeholders genéricos, como REPLACE_WITH_YOUR_OWN_VARIABLE_VALUE.

Tarefa 2.1: Configuração de Origem

Atualize o variables.tf com detalhes específicos do seu ambiente, como região, CIDRs de rede e flags para controlar a criação de recursos (VCN, cluster do OKE, pool de nós, bastion host).

O script bash a seguir cria o arquivo zip de origens de recursos do ORM.

Verifique seu diretório de origem (~/oke_advanced_module_orm) para se certificar de que um arquivo chamado stackconfig.zip contenha todas as definições de recursos terraform.

Tarefa 2.2: Criar Pilha do OCI Resource Manager

Usar a CLI do OCI para criar uma pilha do ORM. O script abaixo simplifica o processo:

Script Bash: create_new_oke_stack.sh.

	#!/bin/bash
	
	# Load environment variables (e.g., COMPARTMENT_ID, STACK_NAME, etc.)
	source "./env-vars"

	# Create the Oracle Resource Manager stack and capture the OCID
	stack_output=$(oci resource-manager stack create \
	--compartment-id "$COMPARTMENT_ID" --display-name "$STACK_NAME" \
	--description "$STACK_DESCRIPTION" --config-source "$CONFIG_SOURCE")

	# Extract the OCID of the newly created stack and display it
	STACK_OCID=$(echo "$stack_output" | jq -r '.data.id')

	echo "Stack OCID: $STACK_OCID"

Tarefa 2.3: Executar Job do Plano de Pilha

Execute o job Plan para verificar as alterações antes de aplicá-las. Este dryrun fornece transparência nas mudanças de infraestrutura.

Script Bash: create_oke_stack_plan_job.sh

	#!/bin/bash

	# Load environment variables (e.g., STACK_OCID)
	source "./env-vars"

	# Create a plan job for the specified stack
	plan_job_output=$(oci resource-manager job create-plan-job \
		--stack-id "$STACK_OCID")

	# Extract the OCID of the plan job and check for errors
	PLAN_JOB_OCID=$(echo "$plan_job_output" | jq -r '.data.id')
	if [[ -z "$PLAN_JOB_OCID" ]]; then
		echo "Error: Failed to retrieve plan job OCID." >&2
		exit 1
	fi

	echo "Plan job OCID: $PLAN_JOB_OCID"

Tarefa 2.4: Criar Job de Candidatura

Provisione o cluster do OKE e os recursos associados, como pool de nós, usando o job Apply.

Script Bash: create_oke_stack_apply_job.sh

	#!/bin/bash

	# Load environment variables (e.g., STACK_OCID, EXEC_PLAN_STRATEGY)
	source "./env-vars"

	# Create an apply job for the specified stack
	apply_job_output=$(oci resource-manager job create-apply-job \
		--stack-id "$STACK_OCID" \
		--execution-plan-strategy "$EXEC_PLAN_STRATEGY")

	# Extract the OCID of the apply job and check for errors
	APPLY_JOB_OCID=$(echo "$apply_job_output" | jq -r '.data.id')
	if [[ -z "$APPLY_JOB_OCID" ]]; then
		echo "Error: Failed to retrieve apply job OCID." >&2
		exit 1
	fi

	echo "Apply job OCID: $APPLY_JOB_OCID"

Tarefa 2.5: Executar Job de Destruição

Limpe recursos executando o job Destroy quando o ambiente não for mais necessário.

Script Bash: create_oke_stack_destroy_job.sh

	#!/bin/bash

	# Load environment variables (e.g., STACK_OCID, EXEC_PLAN_STRATEGY)
	source "./env-vars"

	# Create an  jotroy for the specified stack
	apply_job_output=$(oci resource-manager job create-destroy-job \
		--stack-id "$STACK_OCID"  \
		--execution-plan-strategy "$EXEC_PLAN_STRATEGY")

	# Extract the OCID of the destroy job and check for errors
	DESTROY_JOB_OCID=$(echo "$apply_job_output" | jq -r '.data.id')
	if [[ -z "$DESTROY_JOB_OCID" ]]; then
		echo "Error: Failed to retrieve destroy job OCID." >&2
		exit 1
	fi

	echo "Apply job OCID: $DESTROY_JOB_OCID"

Automatizando o OKE com o Jenkins e o OCI Resource Manager

Criamos um pipeline do Jenkins para automatizar o processo de provisionamento de ponta a ponta (Tarefas 2.1–2.4). O pipeline executa scripts bash usando a CLI do OCI para interagir com o ORM.

A imagem abaixo mostra a automação do one-click para as quatro primeiras tarefas; a etapa do destroy não é incluída para simplificar.

OKEJenkinsPipeline

O pipeline inclui configuração de origem, criação de pilha do ORM, geração de plano, provisionamento de recursos e desprovisionamento de recursos opcional.

Próximas Etapas:

O uso do Terraform para provisionamento do OKE garante consistência, automação e escalabilidade. Projetos modulares, combinados com OCI Resource Manager e pipelines de CI/CD, tornam as implementações mais simples e fáceis de manter. No próximo tutorial, abordaremos as melhores práticas para monitoramento, segurança e prontidão para produção. Com base nesses fundamentos, estenderemos os módulos para o Oracle AIOps, criaremos um modelo de OKE de ponta a ponta para aplicações de IA e demonstraremos como a análise de log com observabilidade orientada por IA pode detectar anomalias e fortalecer a segurança da plataforma de contêiner.

Confirmações

Mais Recursos de Aprendizado

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.