código

1 nov, 2022

Step by step to deploy an application on OKE

Publicidade

O Foco desta publicação é ser bem objetiva, abordando todos os passos para colocar uma aplicação em um ambiente de contêiner gerenciado Oracle Container Engine for Kubernetes.

Para realizar essa tarefa utilizaremos:

  • App React.js
  • Arquivo Dockerfile
  • Cluster Oracle Container Engine for Kubernetes (OKE)
  • Utilizando Cloud Shell
  • Auth Token
  • Container Registry
  • Arquivo de configuração Yaml
  • Deploy da aplicação

Utilizando uma Aplicação

Para o nosso exemplo criei uma aplicação React.js getting started que roda localmente na minha máquina. Caso queira utilizar a mesma aplicação para fins de teste, clique aqui e siga os passos da própria documentação do React.

Criando o Dockerfile

Utilizaremos esse arquivo como a receita para construir um contêiner dentro do OKE, permitindo definir um ambiente personalizado para o nosso projeto.

Utilizei o seguinte Dockerfile:

Fique atento em alterar o nome da pasta raiz do seu projeto e também com os comandos. Utilizei o Yarn neste exemplo, caso você esteja utilizando o NPM, atualize os comandos e arquivos correspondentes.

Acessando os códigos da aplicação na Oracle Cloud

Existem diversas formas de você conseguir acessar ou ter seus códigos dentro da Oracle Cloud:

  • Espelhando um repositório externo para um repositório da própria Oracle Cloud.
  • Utilizando diretamente o repositório de códigos da Oracle Cloud.
  • Arrastando arquivos para o Cloud Shell.
  • Clonando sua aplicação por comandos git pré-instalados no cloud shell ou na sua máquina.

Não importa qual seja o método, todos levam no mesmo resultado. Escolha qual a melhor forma para sua necessidade.

Criando o Cluster Container Engine for Kubernetes (OKE)

Além de benefícios de desempenho e custos, o OKE traz mais agilidade na criação e facilita o gerenciamento das nossas aplicações. Por utilizar o K8S sem nenhuma modificação, todos os comandos e processos abordados em suas documentações são 100% funcionais no OKE.

Para criar o cluster temos duas opções:

  • Quick Create: Cria um cluster, com a criação de novos recursos de rede. Os novos recursos de rede incluem uma sub-rede regional para o endpoint da API do Kubernetes, uma sub-rede regional para nós do trabalhador e outra sub-rede regional para balanceadores de carga.
  • Custom Create: Cria um cluster, onde você pode especificar quais recursos de rede existentes serão usados. Isso inclui escolher entre as sub-redes públicas ou privadas existentes nas quais hospedar o endpoint da API do Kubernetes, nós do trabalhador e balanceadores de carga.

Em nosso exemplo utilizaremos o Quick Create, pois queremos que o OKE provisione todos os recursos necessários para nós e também os configure. Se no seu caso a melhor escolha for o Custom Create, acompanhe todos os passos indicados na documentação do OKE clicando aqui.

Na tela de criação e configuração do Cluster, não fizemos nenhuma modificação. Mas caso queira testar alguma configuração avançada, alterar o shape ou a versão do k8s para testes, fique livre e vá em frente.

Ao fim, clique em next, revise tudo que foi escolhido e clique em create cluster.

Não foi fornecido texto alternativo para esta imagem

Como podemos obeservar o OKE já está provisionando e configurando todos os recursos que nossa aplicação precisará:

Não foi fornecido texto alternativo para esta imagem

Aguarde até que o status do seu cluster mude de Creating para Active:

Não foi fornecido texto alternativo para esta imagem
Não foi fornecido texto alternativo para esta imagem

Gerando uma imagem Docker

Após ter acesso aos códigos de sua aplicação, chegou a hora de gerar a imagem docker para enviarmos ao Registry do OKE. Para gerar a imagem se certifique que esta dentro da pasta do se projeto e que o arquivo Dockerfile que criamos também esteja lá

Não foi fornecido texto alternativo para esta imagem

Para gerar a imagem da nossa aplicação, execute o comando docker:

Por padrão, sempre que uma nova imagem é criada a tag utilizada sera a latest. Eu sempre costumo alterar a tag da minha imagem e colocar qual a versão dela. Para realizar essa tarefa execute o seguinte comando docker:

Comando que executei:

docker tag react-app:latest phx.ocir.io/oraclemetodista/reactshort-repo/react-app:version1.0

Tradução:

docker tag nome-da-imagem:tag-atual region-key/namespace/nome-da-imagem-app:version1.0

Podemos notar que utilizei a region key phx.ocir.io, pois meu cluster foi criado na região de US West(Phoenix). Para saber qual é a sua region key, clique aqui e compare nas tabelas com a região do seu cluster.

Para saber qual é seu namespace, execute o seguinte comando em um terminal com acesso configurado ou no próprio cloud shell:

oci os ns get

Gerando o Auth Token

Após a criação da nossa imagem e modificação da tag, chegou a hora de enviar para registry que temos no próprio OKE.

Para essa tarefa precisaremos nos autenticar, passando nosso username e password que será o auth token.

Para gerar o token, acesse a página de perfil do usuário clicando no ícone em seu canto superior direito da console:

Não foi fornecido texto alternativo para esta imagem

Clique em Auth token no canto inferior esquerdo na sessão de recursos:

Não foi fornecido texto alternativo para esta imagem

Clique em gerar token e de um nome ao seu novo token. Lembre-se de salva-lo em algum bloco de notas, pois uma vez que fechado o pop-up, não temos mais acesso ao token gerado.

Não foi fornecido texto alternativo para esta imagem

Autenticando

Para nos autenticar edite e execute o seguinte comando:

Docker login sua-region-key

Agora precisaremos passar nosso Username e password.

Username: namespace/email-da-conta-oracle-cloud

Password: Auth Token

O resultado dever ser o seguinte:

Não foi fornecido texto alternativo para esta imagem

Enviando a imagem para o Registry

Agora que estamos autenticados é simples enviar nossa imagem para o container registry, basta editar e executar o seguinte comando docker:

docker push nome-da-sua-imagem

Se nenhum erro for retornado, basta acessar o container registry e verificar as informações da imagem.

Não foi fornecido texto alternativo para esta imagem

Criando o Arquivo de configuração

Para dizer ao OKE como nossos Pods devem ser criados, precisamos criar arquivos de configurações com todas as informações necessárias.

Anteriormente escrevi um artigo sobre esses arquivos e coloquei exatamente tudo que utilizaremos no nosso exemplo. Para pegar esse arquivo e saber mais sobre cada um dos campos de um deployment.yaml ou service.yaml, clique aqui.

ATENÇÃO!

Em nosso arquivo de configuração temos uma etapa muito importante que é:

Não foi fornecido texto alternativo para esta imagem

Basicamente, uma Secret é um objeto que contém uma pequena quantidade de informação sensíveis, como senhas, tokens ou chaves. O uso de Secrets evita que você tenha de incluir dados confidenciais no seu código.

Para criar uma secret caso você não tenha, edite e execute o seguinte comando:

kubectl creat secret docker-registry nome-da-secret --docker-server=sua-region-key --docker-username='seu-namespace/seu-email-conta-oci' --docker-password=:'seu-auth-token' --docker-email='seu-email-conta-oci'

O resultado deve ser o seguinte:

secret/nome-da-sua-secret created

Lembre-se de colocar no seu arquivo de configuração o mesmo nome que deu na criação da sua secret.

Deploy da aplicação

Para realizar o deploy, executaremos o seguinte comando:

kubectl apply -f nome-do-seu-arquivo.yaml

Se você seguiu os passos corretamente o resultado deve ser o seguinte:

Não foi fornecido texto alternativo para esta imagem

Agora podemos verificar se os nossos pods estão funcionando e se nosso service com o Loadbalancer esta configurado com o IP externo:

kubectl get pod
Não foi fornecido texto alternativo para esta imagem
kubectl get service 
Não foi fornecido texto alternativo para esta imagem

Para acessar sua aplicação basta copiar o IP externo e a porta e colar no navegador

Não foi fornecido texto alternativo para esta imagem

Agradecimentos

Espero que eu tenha conseguido facilitar a utilização do OKE e qualquer dúvida que é só me enviar uma mensagem!

Até a próxima pessoal!