Compartilhar via


Implante aplicativos no Red Hat OpenShift no Azure pelo OpenShift Serverless

Neste artigo, você vai implantar um aplicativo em um cluster do Red Hat OpenShift no Azure pelo OpenShift Servless. O OpenShift Servless ajuda os desenvolvedores a implantar e executar aplicativos que serão escalados verticalmente ou escalados para zero sob demanda. Isso elimina o consumo de recursos quando eles não estão em uso.

O código do aplicativo pode ser empacotado em um contêiner junto com os runtimes apropriados. A funcionalidade sem servidor iniciará os contêineres de aplicativo quando eles forem disparados por um evento. Você pode disparar aplicativos por meio de vários eventos: de seus próprios aplicativos, de vários provedores de serviços de nuvem, software como serviço (SaaS) e outros serviços.

Você pode usar recursos internos de interface do OpenShift para gerenciar todos os aspectos da implantação de contêiner sem servidor. Os desenvolvedores podem identificar visualmente quais eventos estão orientando o lançamento de seus aplicativos conteinerizados. Também há várias maneiras de modificar parâmetros de evento. Os aplicativos do OpenShift Servless podem ser integrados a outros serviços do OpenShift, como o OpenShift Pipelines, Service Mesh e Monitoring. Isso fornece uma experiência completa de desenvolvimento e implantação de aplicativos sem servidor.

Antes de começar

Criar um cluster

Siga o tutorial para criar um cluster do Red Hat OpenShift no Azure. Caso opte por instalar e usar a interface de linha de comando (CLI) local, este tutorial exigirá que você execute a CLI do Azure versão 2.6.0 ou posterior. Execute az --version para localizar a versão atual. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Conectar-se ao cluster

Para gerenciar um cluster do Red Hat OpenShift no Azure, use o oc, o cliente de linha de comando do OpenShift.

Observação

É recomendável instalar a linha de comando do OpenShift no Azure Cloud Shell e usá-la para todas as operações de linha de comando neste artigo. Inicie o shell de shell.azure.com ou selecione o link:

Botão para iniciar o Azure Cloud Shell

Siga o tutorial para instalar a CLI, recuperar as credenciais do cluster e conectar-se ao cluster pelo console Web e a CLI do OpenShift.

Quando estiver conectado, você deverá ver uma mensagem dizendo que está usando o projeto default.

Login successful.

You have access to 61 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".

Instalar a ferramenta de linha de comando Knative (kn)

Baixe a versão mais recente da interface de linha de comando (CLI) apropriada para seu computador, de https://github.com/knative/client/releases/

Se você estiver executando os comandos no Azure Cloud Shell, baixe a CLI do Knative mais recente para Linux.

cd ~
wget https://github.com/knative/client/releases/download/v0.22.0/kn-linux-amd64

mkdir knative
chmod +x kn-linux-amd64
mv kn-linux-amd64 knative/kn
echo 'export PATH=$PATH:~/knative' >> ~/.bashrc && source ~/.bashrc

Abra o console web do OpenShift

Localize a URL do console Web do cluster executando o seguinte script:

 az aro show \
    --name <cluster name> \
    --resource-group <resource group> \
    --query "consoleProfile.url" -o tsv

Você deve ver uma URL semelhante à seguinte.

https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/

Abra um navegador da Web e abra a URL do console. Faça logon com as credenciais kubeadmin.

Uma captura de tela que mostra a tela de logon do Red Hat OpenShift no Azure

Instalar o operador do OpenShift Serverless

Ao fazer logon no console Web do OpenShift, confirme se você está no modo Administrador. Abra o Hub do operador e selecione o operador do OpenShift Serverless.

Uma captura de tela que mostra a posição do operador OpenShift sem servidor.

Em seguida, abra a página de instalação do operador clicando em Instalar.

Uma captura de tela que mostra como selecionar Instalar para instalar o operador.

Escolha o Canal de atualização apropriado para a versão de cluster do Red Hat OpenShift no Azure e instale o operador no namespace openshift-serverless. Role para baixo e selecione Instalar.

Uma captura de tela que mostra a página de instalação do operador.

Em alguns minutos, a página de status deve refletir que o operador está instalado e pronto para uso. Clique no botão Exibir operador para continuar.

Uma captura de tela que mostra a página de status com o operador instalado e pronto para uso.

Instalar o Knative Serving

A capacidade de executar qualquer contêiner em um modo sem servidor no OpenShift Serverless é possível pelo upstream do Knative. O Knative estende o Kubernetes para fornecer um conjunto de componentes que implantam, executam e gerenciam aplicativos modernos por meio de sua metodologia sem servidor.

Crie uma instância no Knative Serving

No canto superior esquerdo da janela, na lista Projeto, selecione knative-server. Em seguida, no painel APIs fornecidas, selecione Criar instância no cartão Serviço Knative.

Uma captura de tela que mostra onde selecionar para criar uma instância do Serviço Knative.

Na página Criar Serviço Knative, mantenha todos os valores padrão. Role a página para baixo e selecione Criar.

Uma captura de tela que mostra os valores padrão listados no formulário.

O OpenShift Serverless é instalado quando a coluna Status mostra Pronto. Agora você está pronto para criar um projeto sem servidor do OpenShift.

Uma captura de tela que mostra que o Serviço Knative está pronto.

Criar um projeto sem servidor

Para criar um novo projeto chamado demoserverless, execute o comando:

oc new-project demoserverless

A saída deve ser semelhante ao seguinte:

Now using project "demoserverless" on server "https://api.wzy5hg7x.eastus.aroapp.io:6443".

You can add applications to this project with the 'new-app' command. For example, build a new example application in Python with the following:

    oc new-app django-psql-example

Or use kubectl to deploy a simple Kubernetes application:

    kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node

Vamos alternar do modo de exibição Administrador para o modo de exibição Desenvolvedor. Vá para sua lista de projetos no menu à esquerda e selecione demoserverless. Em seguida, você deve estar na página Topologia do projeto.

Uma captura de tela que mostra a topologia de projeto do Red Hat OpenShift no Azure.

Como implantar pelo console Web

Na página Topologia, selecione Do Git. Na página Importar do Git, use https://github.com/sclorg/django-ex.git como a URL do Repositório Git. Um aplicativo web do exemplo é implementado pela linguagem de programação Python.

Uma captura de tela que mostra o projeto do Red Hat OpenShift no Azure de dentro do Git.

Observação

O OpenShift detecta que se trata de um projeto Python e seleciona a imagem do construtor apropriada.

Role para baixo até Recursos e verifique se o Serviço Knative está selecionado como o tipo de recurso a ser gerado. Essa ação criará um serviço Knative, um tipo de implantação que habilita o dimensionamento do OpenShift Serverless para zero quando estiver ocioso.

Uma captura de tela que mostra como selecionar o Serviço Knative.

Selecione Criar na parte inferior da página. Isso criará os recursos para gerenciar a compilação e a implantação do aplicativo. Em seguida, você será redirecionado para a visão geral da topologia do projeto.

A visão geral da topologia fornece uma representação visual do aplicativo que você implantou. Você pode ver a estrutura geral do aplicativo.

Aguarde a conclusão do build. Isso pode levar alguns minutos. Depois que a compilação for concluída, uma marca de seleção verde será exibida no canto inferior esquerdo do serviço.

Uma captura de tela que mostra uma marca de seleção que indica que a compilação foi concluída.

Veja a escala do aplicativo

Na lista Opções de exibição, na parte superior da exibição da topologia, selecione Contagem de Pod. Aguarde até que a contagem de Pod reduza verticalmente para zero pods. Essa ação pode levar alguns minutos.

Uma captura de tela que mostra a contagem de pods quando foi dimensionada para zero.

Clique no ícone Abrir URL no canto superior direito do painel de serviço do Knative. O aplicativo é aberto em uma nova guia. Feche a guia e retorne ao modo de exibição da topologia. Lá você pode ver que seu aplicativo foi escalado verticalmente para um pod para atender a sua solicitação. Depois de alguns minutos, seu aplicativo é dimensionado de volta para zero pods.

Uma captura de tela que mostra o aplicativo escalado verticalmente para Pod.

Forçando uma nova revisão e definindo a distribuição de tráfego

Os serviços Knative permitem o mapeamento de tráfego, o que significa que as revisões de um serviço podem ser mapeadas para uma parte alocada do tráfego. Uma nova revisão é criada a cada atualização de configuração do serviço. A rota de serviço aponta todo o tráfego para a última revisão pronta por padrão. Você pode alterar esse comportamento definindo qual revisão obtém uma parte do tráfego. O mapeamento de tráfego também fornece uma opção de criação de URLs exclusivas para revisões específicas.

Na topologia criada, clique na revisão exibida no seu serviço para ver seus detalhes. As notificações sob o anel de pod e na parte superior do painel de detalhes devem ser (REV). No painel lateral, na guia Recursos, role para baixo e selecione a configuração associada ao seu serviço.

Uma captura de tela que mostra o anel do Pod.

Force uma atualização de configuração alternando para a guia YAML e rolando para baixo para editar o valor de timeoutSeconds. Altere o valor para 301. Selecione Salvar. Em um cenário do mundo real, atualizações de configuração também podem ser disparadas ao atualizar a marca de imagem de contêiner.

Uma captura de tela que mostra como forçar uma nova revisão atualizando a configuração.

Volte para a exibição Topologia, você verá que uma nova revisão foi implantada. Selecione o serviço que termina com o selo (KSVC) e selecione o botão Definir Distribuição de Tráfego. Agora você deve ser capaz de dividir o tráfego entre as revisões no serviço.

Uma captura de tela que mostra como definir a distribuição de tráfego.

Agora, a exibição Topologia mostrará como o tráfego é distribuído entre as duas revisões.

Uma captura de tela que mostra como revisar a distribuição de tráfego.

Uso da ferramenta de linha de comando do Knative (kn)

Nas etapas anteriores, você usou o console Web do OpenShift para criar e implantar um aplicativo no OpenShift Serverless. Como o OpenShift Serverless está executando o Knative por baixo, você também pode usar a ferramenta de linha de comando do Knative (kn) para criar serviços de Knative.

Observação

Se você ainda não instalou a kn CLI, certifique-se de seguir as etapas na seção pré-requisitos deste artigo. Verifique também se você fez logon pela ferramenta de linha de comando do OpenShift oc.

Vamos usar uma imagem de contêiner que já esteja criada em quay.io/rhdevelopers/knative-tutorial-greeter.

Implantar um serviço

Implante o serviço usando o seguinte comando:

kn service create greeter \
--image quay.io/rhdevelopers/knative-tutorial-greeter:quarkus \
--namespace demoserverless \
--revision-name greeter-v1

Você verá uma saída semelhante à seguinte.

Creating service 'greeter' in namespace 'demoserverless':

  0.044s The Route is still working to reflect the latest desired specification.
  0.083s ...
  0.114s Configuration "greeter" is waiting for a Revision to become ready.
 10.420s ...
 10.489s Ingress has not yet been reconciled.
 10.582s Waiting for load balancer to be ready
 10.763s Ready to serve.

Service 'greeter' created to latest revision 'greeter-v1' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

Você pode recuperar uma lista de rotas no projeto executando:

kn route list

Você obterá uma lista de rotas no namespace. Abra a URL em um navegador para ver o serviço implantado.

NAME      URL                                                            READY
greeter   http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io   True

Implantar uma nova versão do serviço

Implante uma nova versão do aplicativo executando o comando a seguir, passando a :latest marcação de imagem e uma variável de ambiente MESSAGE_PREFIX:

kn service update greeter \
 --image quay.io/rhdevelopers/knative-tutorial-greeter:latest \
 --namespace demoserverless \
 --env MESSAGE_PREFIX=GreeterV2 \
 --revision-name greeter-v2

Você receberá uma confirmação de que uma nova revisão foi greeter-v2 implantada.

Updating Service 'greeter' in namespace 'demoserverless':

  5.029s Traffic is not yet migrated to the latest revision.
  5.086s Ingress has not yet been reconciled.
  5.190s Waiting for load balancer to be ready
  5.332s Ready to serve.

Service 'greeter' updated to latest revision 'greeter-v2' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

Para exibir uma lista de todas as revisões e sua distribuição de tráfego, execute o seguinte comando:

kn revision list

Você obterá uma saída semelhante ao seguinte. Observe que, nesta instância, a nova revisão recebe 100% do tráfego.

NAME            SERVICE   TRAFFIC   TAGS   GENERATION   AGE     CONDITIONS   READY   REASON
greeter-v2      greeter   100%             2            90s     3 OK / 4     True
greeter-v1      greeter                    1            5m32s   3 OK / 4     True

Implantações azul/verde e canário

Quando uma nova revisão é implantada, por padrão, ela recebe 100% do tráfego. Digamos que você queira implementar uma estratégia de implantação azul/verde, em que você pode reverter rapidamente para a versão mais antiga do aplicativo. O Knative facilita esse processo.

Você pode atualizar o serviço para criar três marcas de tráfego ao enviar 100% do tráfego para elas.

  • atual: aponta para a versão implantada no momento
  • anterior: aponta para a versão anterior
  • mais recente: sempre aponta para a versão mais recente
kn service update greeter \
   --tag greeter-v2=current \
   --tag greeter-v1=prev \
   --tag @latest=latest

Você receberá uma confirmação semelhante à mostrada abaixo.

Updating Service 'greeter' in namespace 'demoserverless':

  0.037s Ingress has not yet been reconciled.
  0.121s Waiting for load balancer to be ready
  0.287s Ready to serve.

Service 'greeter' with latest revision 'greeter-v2' (unchanged) is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

Liste as rotas pelo comando a seguir:

kn route describe greeter

Você obterá uma saída mostrando as URLs para cada uma das marcas junto com a distribuição de tráfego.

Name:       greeter
Namespace:  demoserverless
Age:        10m
URL:        http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service:    greeter

Traffic Targets:
  100%  @latest (greeter-v2) #latest
        URL:  http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
    0%  greeter-v1 #prev
        URL:  http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
    0%  greeter-v2 #current
        URL:  http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

[..]

Digamos que você deseja reverter rapidamente para a versão anterior, você pode atualizar a distribuição de tráfego para enviar 100% de tráfego para a marcação anterior:

kn service update greeter --traffic current=0 --traffic prev=100

Liste as rotas e verifique novamente usando o seguinte comando:

kn route describe greeter

Você verá uma saída mostrando 100% da distribuição de tráfego que vai para a versão anterior.

Name:       greeter
Namespace:  demoserverless
Age:        19m
URL:        http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service:    greeter

Traffic Targets:
    0%  @latest (greeter-v2) #latest
        URL:  http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
  100%  greeter-v1 #prev
        URL:  http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
    0%  greeter-v2 #current
        URL:  http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

[..]

Experimente com a distribuição de tráfego ao atualizar a rota principal no seu navegador (http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io nesse caso).

Limpar os recursos

Quando terminar o aplicativo, você poderá executar o seguinte comando para excluir o projeto:

oc delete project demoserverless

Você também pode excluir o cluster seguindo as etapas em Tutorial: excluir um cluster do Red Hat OpenShift 4 no Azure.

Próximas etapas

Neste guia, você aprendeu a:

  • Instalar o operador OpenShift Serverless e o Knative Serving
  • Implantar um projeto sem servidor usando o console Web
  • Implantar um projeto sem servidor usando a CLI do Knative (kn)
  • Configurar implantações azuis/verdes e implantações canário usando a CLI do Knative (kn)

Saiba mais sobre como criar e implantar aplicativos orientados a eventos e sem servidor no Red Hat OpenShift no Azure usando o OpenShift Serverless, siga a documentação de introdução ao OpenShift Serverless e a documentação criando e gerenciando aplicativos sem servidor.