Criando um Cluster Kubernetes na OCI usando Terraform #MêsDoKubernetes
EM ATUALIZAÇÃO - VERIFIQUE A ISSUE #8 PARA MAIORES INFORMAÇÕES
Crie uma conta gratuita na Oracle Cloud, e provisione um cluster Kubernetes usando o Terraform de forma simples e rápida.
Oferta Especial #MêsDoKubernetes
- Todos terão acesso a um tenant individual para execução do lab. Para ativar o ambiente, acesse este link e crie a sua conta.
IMPORTANTE:
- No cadastro o País/Território será Brazil mas a Home Region do seu cadastro será "US East-Ashburn”.
- Utilizem o mesmo e-mail que vocês usaram para se inscrever no evento, pois habilitamos uma oferta gratuita nesses e-mails. Caso já tenham uma conta OCI neste e-mail nos enviem um novo e-mail que habilitaremos outra oferta para vocês.
- No cadastro não coloque o nome da empresa, pois ao colocar será necessário o CNPJ.
- Se você já tiver um trial (acesso a nuvem da Oracle) ativo nesse email, você irá conseguir realizar o lab pois serão utilizados recursos always free, porém não terá os 500 dólares sem cartão pois um valor de testes já foi disponibilizado nos 30 dias da ativação.
Caso queira realizar o lab com as configurações utilizadas na live, basta substituir as variáveis do Terraform no arquivo variables.tf
pelas variáveis abaixo. Mas lemre-se, as instâncias criadas com essas configurações só serão gratuitas enquanto os seus créditos oferecidos pela Oracle durante o #MêsDoKubernetes estiverem ativos.
region = us-ashburn-1
shape = VM.Standard.E3.Flex
memory_in_gbs_per_node = 2
image_id = ocid1.image.oc1.iad.aaaaaaaanwsto6tqklfuawgqrve5ugjpbff3l5qtb7bs35dp72ewcnsuwoka
node_size = 1
kubernetes_version = v1.28.2
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
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
-
Baixe o Terraform e descompacte o arquivo em um diretório de sua preferência.
-
Adicione o diretório ao PATH do Windows.
- 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
yes
e ele atualizará automaticamente seu arquivo .bashrc ou .bash_profile para você. Se você usar 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
-
Faça download do instalador MSI da CLI do OCI para Windows no GitHub Releases
-
Execute o instalador e siga as instruções.
- Execute o comando de configuração.
oci session authenticate --region us-ashburn-1
- Exporte o token de autenticação.
- Linux
export OCI_CLI_AUTH=security_token
- Windows
set OCI_CLI_AUTH=security_token
- Verifique se a configuração foi realizada com sucesso.
oci session validate --config-file ~/.oci/config --profile DEFAULT --auth security_token
Kubectl é quem faz a comunicação com a API Kubernetes usando CLI. Devemos usar a mesma versão que está explicita na variáveis do terraform. 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.
- 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
- Clone o repositório.
git clone https://github.com/Rapha-Borges/oke-free.git
- Dentro do diretório do projeto, gere a chave SSH e adicione o valor da chave pública na TF_VAR.
ssh-keygen -t rsa -b 4096 -f id_rsa
- Linux
export TF_VAR_ssh_public_key=$(cat id_rsa.pub)
- Windows
set /p TF_VAR_ssh_public_key=<id_rsa.pub
- Valide o tempo de vida do token de autenticação, aconselho que o tempo de vida seja maior que 30 minutos.
oci session validate --config-file ~/.oci/config --profile DEFAULT --auth security_token
Caso o token esteja próximo de expirar, faça o refresh do token e exporte novamente.
oci session refresh --config-file ~/.oci/config --profile DEFAULT --auth security_token
export OCI_CLI_AUTH=security_token
- Inicialize o Terraform.
terraform init
- Crie o cluster.
terraform apply
- OBS: Opicionalmente, você pode utilizar o comando
terraform plan
para visualizar as alterações que serão realizadas antes de executar oterraform apply
. Com os seguintes comandos:
terraform plan -out=oci.tfplan
terraform apply "oci.tfplan" -auto-approve
- Acesse o cluster.
kubectl get nodes
Caso 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.
Atenção: O script está em fase de testes e funciona apenas no Linux.
./main.sh
O 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 saída do Terraform, no formato public_ip = "xxx.xxx.xxx.xxx"
e pode ser consultado a qualquer momento com o comando:
terraform output public_ip
- Para deletar o cluster bastar executar o comando:
terraform destroy
Error: "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_token
Para 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
.
Você pode utilizar a autenticação do tipo API KEY
para criar e gerenciar o seu cluster. A vantage desse tipo de autenticação é que você não precisa utilizar o session token
.
- 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
~/.oci/
e renomeie paraoci_api_key.pem
.
mv ~/Downloads/<nome_do_arquivo>.pem ~/.oci/oci_api_key.pem
- Corrija as permissões da chave privada:
oci setup repair-file-permissions --file ~/.oci/oci_api_key.pem
- Copie o texto que apareceu na página de criação da
API KEY
para o arquivo~/.oci/config
. Não se esqueça de substituir o valor do compokey_file
pelo caminho da chave privada~/.oci/oci_api_key.pem
, conforme exemplo abaixo.
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
- Adicione os valores ao arquivo
export_variables.sh
, para exportar todas as variáveis necessárias para a autenticação do terraform.
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 id_rsa.pub)
export TF_VAR_ssh_private_key=$(cat id_rsa)
Agora rode o script para exportar as variáveis:
source export_variables.sh
Siga o passo abaixo somente após a criação do cluster com sucesso.
- Edite o arquivo
~/.kube/config
seguindo o modelo 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