Participe da Maratona Behind the Code! A competição de programação que mais te desafia! Inscreva-se aqui

Deploy de uma aplicação console com .NET Core em Kubernetes

Introdução

No tutorial anterior (parte 1), vocêentendeu como construir uma aplicação Web .NET Core e fazer o deploy em um cluster Kubernetes funcionando em IBM Cloud.Agora na parte 2, iremos percorrer um caminho parecido, porém o objetivo dessa vez é fazer com que uma aplicação console desenvolvida com .NET Core funcione também dentro do Kubernetes.Iremos mais umavez criar a aplicação, empacotá-la em uma imagem docker, subir para um registro de imagens (docker hub) e fazer o deploy no Kubernetes.

Pré-Requisitos

Para conseguir executar esse tutorial você deverá ter um conjunto de ferramentas instalado nasua estação de trabalho.São elas:

Obs.: Alguns screenshots foram feitos com a CLI de IBM Cloud chamado bx, entretanto o funcionamento com a nova versão da CLI com o CLI ibmcloud tem o mesmo funcionamento e sintaxe.

Criando uma aplicação console de exemplo e testando localmente

Para construir essa aplicação eu utilizei o Visual Studio Community Edition, porém o mesmo resultado pode ser alcançado usando o a linha de comando do .NET Core, conforme esse exemplo HelloWorld.

Prompt de comando criando template

Prompt de comando com códigos

Prompt de comando executando código

Na sequencia vou elaborar um pouco mais esse tutorial construindo uma outra aplicação console chamada BelezaAppusando o Visual Studio Community. Caso prefira,adapte os passos seguintes desse tutorial para usar a aplicação HelloWorld.

No Visual Studio, escolha uma nova App dentro da seção .NET Core, e escolha a opção Console Application (C#)

Criação de template no visual studio

Edite o arquivo Program.cs conforme o código abaixo.


using System;
using System.Threading;
using System.Threading.Tasks;

namespace BelezaApp {
    class Program {
        private static readonly AutoResetEvent waitHandle = new AutoResetEvent(false);

        static void Main(string[] args) {
            Task.Run(() => {
                
                while (true) {
                    var date = DateTime.Now;
                    Console.WriteLine("\nBeleza, qual o seu nome? ");
                    var name = Console.ReadLine();
                    Console.WriteLine($"\nE ai, {name}, hoje é {date:F}! ‑ Aperte Control+C para sair");

                    Thread.Sleep(1000);
                }
            });

            // Handle Control+C or Control+Break
            Console.CancelKeyPress += (o, e) => {
                Console.WriteLine("Exit");
                waitHandle.Set();
            };
            waitHandle.WaitOne();
        }
    }
} 


                

Esse é um programa simples, que fica em Loop, pergunta pelo seu nome via entrada padrão (teclado) e coloca na saída o seu nome com o timestamp atual.

Códigos no visual studio

Salve suas alterações, e teste sua aplicação dentro do Visual Studio.

Códigos no visual studio

Execução de códigos no visual studio

Empacotando sua aplicação.NET Core Console em um docker container

Como na parte 1, vamos empacotar a aplicação em uma imagem docker, para isso crie um arquivo Dockerfile dentro do diretório do seu projeto, conforme o quadro abaixo.


FROM microsoft/dotnet:2.0‑sdk
WORKDIR /app

#copy csproj and restore as distinct layers
COPY ∗.csproj ./
RUN dotnet restore

#copy and build everything else
COPY . ./
RUN dotnet publish ‑c Release ‑o out
ENTRYPOINT ["dotnet", "out/BelezaApp.dll"] 

                

Códigos no visual studio

Conforme indicado na parte 1 desse tutorial, existem formas diferentes de construir o Dockerfile para usar uma imagem base mais enxuta para os seus objetivos.

Da mesma forma, vamos agora construir a imagem usando o comando docker build.

Prompt de comando executando docker

Prompt de comando executando docker

Ao termino da execução desse comando, verifique que a imagem foi criada com o comando docker images

Prompt de comando executando docker

Agora vamos testar a aplicação console dentro de um container com o docker run docker run

Prompt de comando executando docker

Enviando a imagem para o Registry

Com a imagem criada e a aplicação dentro de um container já testada e funcionando, nosso próximo passo será enviar essa imagem para um registro, dessa vez usaremos um registro diferente do que fizemos na parte 1, iremos enviar essa imagem para o dockerhub.

Caso não tenha, crie uma conta em hub.docker.com, e crie um repositório publico.

Repositório do docker

Antes de podermos enviar a imagem para o docker hub, faça o login com o comando docker login –username=SEUNOME

Prompt de comando executando docker

Testando no Kubernetes em IBM Cloud

O próximo e ultimo passo é fazer o deploy dessa aplicação no mesmo cluster Kubernetes que voce criou na parte 1desse tutorial. Como mesmo objetivo de manter esse tutorial simples, faremos um deployment no Kubernetes por linha de comando.

kubectl run -i –tty myapp3 –image=giulianodm/dotnetapps:1.0

O Kubernetes cuidará do deployment da nossa aplicação, e conforme o screenshot podemos vê-la em execução.

Prompt de comando executando docker

Comoindicado, aperte Ctrl+C para sair. Se precisar voltar para essa aplicação vocêpode usar o comando attach do kubectl.

Conclusão

É isso ai, vocêchegou ao final da parte 2 desse tutorial. Embora simples, vocêviu como criar uma aplicação console em .NET Core, empacota-ladentro de uma imagem docker, e executar em um cluster Kubernetes dentro de IBM Cloud.

Referências