Conteúdo


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

Comments

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.

pic 1

pic 1

pic 2

pic 2

pic 3

pic 3

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#)

pic 4

pic 4

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.

pic 6

pic 6

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

pic 7

pic 7

pic 8

pic 8

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"]

picture 10

picture 10

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.

pic 11

pic 11

pic 12

pic 12

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

pic 13

pic 13

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

pic 14

pic 14

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.

pic 15

pic 15

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

pic 16

pic 16

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.

pic 17

pic 17

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


Recursos para download


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Cloud computing
ArticleID=1062043
ArticleTitle=Deploy de uma aplicação console com .NET Core em Kubernetes
publish-date=06222018