Criando um Cluster Kubernetes na OCI utilizando OpenTofu #MêsDoKubernetes
Crie uma conta gratuita na Oracle Cloud, e provisione um cluster Kubernetes utilizando o Terraform de forma simples e rápida.
Acesse este link e crie a sua conta
-
Devido limitações da conta gratuita, você provavelmente precisará realizar o upgrade para uma conta
Pay As You Gopara conseguir criar o cluster utilizando as instâncias gratuitasVM.Standard.A1.Flex. Você não será cobrado pelo uso de recursos gratuitos mesmo após o upgrade. -
Crie um alerta na sua conta para não ser cobrado por acidente Budget.
-
Não altere o shape da instância utilizada no cluster, pois a única instância gratuita compatível com o OKE é a
VM.Standard.A1.Flex.
- GNU/Linux
curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh
chmod +x install-opentofu.sh
./install-opentofu.sh --install-method deb
rm install-opentofu.sh- Windows
Invoke-WebRequest -outfile "install-opentofu.ps1" -uri "https://get.opentofu.org/install-opentofu.ps1"
& .\install-opentofu.ps1 -installMethod standalone
Remove-Item install-opentofu.ps1- GNU/Linux
- Execute o comando de instalação:
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"-
Quando solicitado para atualizar a variável PATH, digite
yese ele atualizará automaticamente o arquivo .bashrc ou .bash_profile. Se você utiliza um shell diferente, precisará informar o caminho para o OCI CLI (por exemplo, ~/zshrc). -
Reinicie sua sessão no terminal.
-
Verifique a instalação.
oci -v- Windows
-
Faça download do instalador MSI da CLI do OCI para Windows no GitHub Releases
-
Execute o instalador e siga as instruções.
- GNU/Linux
Kubectl é quem faz a comunicação com a API Kubernetes usando CLI. Devemos usar a mesma versão que está explicita no arquivo de variáveis. Veja variables.tf
- Baixando o binário kubectl
curl -LO https://dl.k8s.io/release/v1.28.2/bin/linux/amd64/kubectl
- Instalando o binário
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
- Adicione kubectl completion bash
echo '
source <(kubectl completion bash)' >> ~/.bashrc
- Valide a versão
kubectl version --client
- Note: O comando acima irá gerar um aviso: "WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short."
Você pode ignorar este aviso. Você está apenas verificando a versão do kubectl que instalou.
- Windows
- Baixe o binário kubectl
curl.exe -LO "https://dl.k8s.io/release/v1.28.2/bin/windows/amd64/kubectl.exe"
-
Anexe a pasta binária kubectl à sua variável de ambiente PATH.
-
Valide a versão
kubectl version --client --output=yaml
🔗 Guia de instalação para todos os ambientes
- Antes de começar, clone o repositório.
git clone https://github.com/Rapha-Borges/oke-free.git- Crie uma
API key
- Entre no seu perfil, acesse a aba API Keys e clique em
Add API Key.
-
Selecione
Generate API key pair, faça o download da chave privada. Em seguida, clique emAdd. -
Após o download, mova a chave para o diretório do
OCI CLIe renomeie paraoci_api_key.pem.
- GNU/Linux
mkdir -p ~/.oci && mv ~/Downloads/<nome_do_arquivo>.pem ~/.oci/oci_api_key.pem
- Windows
move C:\Users\<user>\Downloads\<nome_do_arquivo>.pem C:\Users\<user>\.oci\oci_api_key.pem
- Corrija as permissões da chave privada:
oci setup repair-file-permissions --file <caminho_da_chave_privada>
- Copie o texto que apareceu na página de criação da
API KEYpara o arquivo de configuração doOCI CLI. Não se esqueça de substituir o valor do compokey_filepelo caminho da chave privada.
- GNU/Linux
vim ~/.oci/config
[DEFAULT]
user=ocid1.user.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
fingerprint=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
tenancy=ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
region=xxxxxxxx
key_file=~/.oci/oci_api_key.pem
- Windows
notepad C:\Users\<user>\.oci\config
[DEFAULT]
user=ocid1.user.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
fingerprint=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
tenancy=ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
region=xxxxxxxx
key_file=C:\Users\<user>\.oci\oci_api_key.pem
- Crie a pasta
./sshe gere a chavessh(No Windows, utilize o Git Bash para executar o comando abaixo).
ssh-keygen -t rsa -b 4096 -f ./ssh/id_rsa- Crie o arquivo com as variáveis de ambiente, substituindo os valores das variáveis pelos valores da sua conta (o conteúdo usado no arquivo ~/.oci/config acima).
- GNU/Linux
vim ./env.sh
export TF_VAR_tenancy_ocid=<your tenancy ocid>
export TF_VAR_user_ocid=<your user ocid>
export TF_VAR_fingerprint=<your fingerprint>
export TF_VAR_private_key_path=~/.oci/oci_api_key.pem
export TF_VAR_ssh_public_key=$(cat ssh/id_rsa.pub)
# Optional if you want to use a different profile name change the value below
export TF_VAR_oci_profile="DEFAULT"
Agora rode o script para exportar as variáveis:
source ./env.sh
- Windows
No Windows, você pode criar um arquivo env.bat com o conteúdo abaixo e executar o arquivo para exportar as variáveis.
set TF_VAR_tenancy_ocid=<your tenancy ocid>
set TF_VAR_user_ocid=<your user ocid>
set TF_VAR_fingerprint=<your fingerprint>
set TF_VAR_private_key_path=C:\Users\<user>\.oci\oci_api_key.pem
set TF_VAR_ssh_public_key=C:\Users\<user>\.oci\ssh\id_rsa.pub
# Optional if you want to use a different profile name change the value below
set TF_VAR_oci_profile="DEFAULT"
Agora execute o arquivo para exportar as variáveis:
env.bat
- Instale os módulos
tofu init- Crie o cluster.
tofu apply- OBS: Opicionalmente, você pode utilizar o comando
tofu planpara visualizar as alterações que serão realizadas antes de executar otofu apply. Com os seguintes comandos:
tofu plan -out=oci.tfplan
tofu apply -auto-approve "oci.tfplan"
- Edite o arquivo
~/.kube/configpara adicionar a autenticação com aAPI KEYconforme exemplo abaixo.
- name: user-xxxxxxxxxx
user:
exec:
apiVersion: client.authentication.k8s.io/v1beta1
command: oci
args:
- ce
- cluster
- generate-token
- --cluster-id
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- --region
- xxxxxxxxxxx
- --auth # ADICIONE ESSA LINHA
- api_key # ADICIONE ESSA LINHA
- --profile # ADICIONE ESSA LINHA
- DEFAULT # ADICIONE ESSA LINHA- Acesse o cluster.
kubectl get nodesCaso queira automatizar o processo de criação do cluster, basta executar o script main.sh que está na raiz do projeto. O script irá gerar a chave SSH, adicionar a chave pública na TF_VAR, inicializar o Terraform e criar o cluster.
./main.shO cluster que criamos já conta com um Network Load Balancer configurado para expor uma aplicação na porta 80. Basta configurar um serviço do tipo NodePort com a porta 80 e a nodePort 30080. Exemplos de como configurar o serviço podem ser encontrados no diretório manifests.
O endereço do Load Balancer é informado na final da execução, no formato public_ip = "xxx.xxx.xxx.xxx" e pode ser consultado a qualquer momento com o comando:
tofu output public_ip- Para deletar o cluster bastar executar o comando:
tofu destroyError: "Out of capacity" ou "Out of host capacity"
As contas gratuitas tem um número limitado de instâncias disponíveis, possivelmente a região que você está tentando criar o cluster não tem mais instâncias disponíveis. Você pode esperar até que novas instâncias fiquem disponíveis ou tentar criar o cluster em outra região. Além disso, o upgrade para uma conta Pay As You Go pode resolver o problema, pois as contas Pay As You Go tem um número maior de instâncias disponíveis. Você não será cobrado pelo uso de recursos gratuitos mesmo após o upgrade.
Gere um novo token de autenticação e exporte para a variável de ambiente OCI_CLI_AUTH.
oci session authenticate --region us-ashburn-1- Linux
export OCI_CLI_AUTH=security_token- Windows
set OCI_CLI_AUTH=security_tokenPara resolver esse problema, basta deletar os recursos manualmente no console da OCI. Seguindo a ordem abaixo:
Obs: Caso não apareça o Cluster ou a VPN para deletar, certifique que selecionou o Compartment certo k8s.