Esse repositório contém três Action do GitHub responsáveis pelo plan, apply e destroy de um cluster OKE na Oracle Cloud utilizando Terraform. O projeto de exemplo do Terraform foi criado no repositório OKE-FREE
-
Fork desse repositório e permissão para executar Actions. Na aba
Settings->Actions->General->Allow all actions and reusable workflows. -
Informações de login e API Key da Oracle Cloud, um par de chaves SSH e um bucket no OCI.
-
Terraform ou OpenTofu instalado.
-
OCI CLI instalado e configurado com as credenciais da sua conta Oracle Cloud.
-
Acesse o console da Oracle Cloud e vá para a página API Keys nos detalhes do usuário.
-
Clique em "Add API Key" e faça o download da
Private Key. -
Clique em
Adde copie as informações deTenancy OCID,User OCID,FingerprinteRegion.
- Execute o comando
ssh-keygen -t rsa -b 4096 -f {path/to/save/key}para criar um par de chaves SSH.
-
Em Compartments, clique em
Create Compartmente crie um compartimento, diferente do que vamos utilizar para o cluster OKE. -
em Object Storage & Archive Storage, selecione o compartimento criado e clique em
Create Buckete entãoCreatepara criar um bucket com as configurações padrão. -
Em Pre-authenticated Requests, clique em
Create Pre-authenticated Request. -
Selecione
ObjectcomoPre-authenticated Request Targete passe o nometerraform.tfstate. -
Marque a opção
Permit object read and writese clique emCreate. -
Copie o link gerado no campo
Pre-Authenticated Request URLe salve, ele será utilizado como variável de ambiente.
Agora que você tem todas as informações necessárias, será necessário configurar o repositório para utilizar as variáveis de ambiente.
-
Em
Settingsdo repositório, clique emSecrets and Variables, após isso clique emActions. -
Clique em
New repository secrete adicione as seguintes variáveis de ambiente:
-
OCI_REGION: Região da Oracle Cloud onde o cluster será criado. -
OCI_TENANCY_OCID: OCID do tenancy. -
OCI_USER_OCID: OCID do usuário. -
OCI_FINGERPRINT: Fingerprint da chave API. -
OCI_KEY_FILE: Conteúdo da chave.pemprivada obtida no download da API Key. -
SSH_PUBLIC_KEY: Conteúdo da chave ssh pública (.pub). -
TF_BUCKET: Link do bucket no OCI.
Toda vez que for feito um push no repositório, nas branches main e feature, a Action de plan será executada automaticamentem, sendo possível visualizar o plano de execução no console.
O Plan pode ser executado manualmente na aba Actions do repositório a qualquer momento. Isso é útil para validar as mudanças antes de aplicá-las, sem a necessidade de fazer um push.
- Atenção: Sempre aguarde o fim do
Plane valide o plano de execução antes de aplicar as mudanças.
A Action de apply é manual e pode ser executada na aba Actions do repositório. Ela irá criar automaticamente, após o início da execução, o cluster OKE na Oracle Cloud, conforme o Plan gerado no último push.
- Atenção: Antes de executar o
Apply, valide que nenhuma outra Action está em execução, pois isso pode "quebrar" o arquivo de estado do Terraform.
A Action de destroy é manual e pode ser executada na aba Actions do repositório. Ela irá destruir automaticamente, após o início da execução, o cluster OKE na Oracle Cloud.
- Atenção: Antes de executar o
Destroy, valide que nenhuma outra Action está em execução, pois isso pode "quebrar" o arquivo de estado do Terraform.
Para configurar o OCI CLI, execute o comando oci setup config e siga as instruções.
Após a execução do Apply, será necessário criar o arquivo kubeconfig para acessar o cluster OKE.
-
Acesse o console da Oracle Cloud e vá para a página Clusters.
-
Selecione o
Compartmentonde o cluster foi criado e clique no nome do cluster. -
Clique em
Access Cluster->Local Accesse siga as instruções para criar o arquivokubeconfigde um umpublic endpoint.
-
O projeto está configurado para ser executado na região
sa-saopaulo-1da Oracle Cloud. -
O cluster OKE será criado com 1 node pool e 2 nodes.
-
Cada node possui 2 CPU e 12GB de memória e utilizam a arquitetura
arch64 (ARM). -
A versão do Kubernetes é a
v1.29.1. -
Qualquer alteração nas configurações do cluster OKE pode ser feita no arquivo
variables.tf.