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.
Como podemos obeservar o OKE já está provisionando e configurando todos os recursos que nossa aplicação precisará:
Aguarde até que o status do seu cluster mude de Creating para Active:
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á
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:
Clique em Auth token no canto inferior esquerdo na sessão de recursos:
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.
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:
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.
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 é:
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:
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
kubectl get service
Para acessar sua aplicação basta copiar o IP externo e a porta e colar no navegador
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!