Dela via


Distribuera program till Azure Red Hat OpenShift med OpenShift Serverless

I den här artikeln distribuerar du ett program till ett Azure Red Hat OpenShift-kluster med OpenShift Serverless. OpenShift Serverless hjälper utvecklare att distribuera och köra program som ska skalas upp eller skalas till noll på begäran. Detta eliminerar förbrukningen av resurser när de inte används.

Programkoden kan paketeras i en container tillsammans med lämpliga körningar. Serverlösa funktioner startar programcontainrarna när de utlöses av en händelse. Du kan utlösa program via olika händelser: från dina egna program, från flera molntjänstleverantörer, SaaS-system (programvara som en tjänst) och andra tjänster.

Du kan använda inbyggda OpenShift-gränssnittsfunktioner för att hantera alla aspekter av serverlös containerdistribution. Utvecklare kan visuellt identifiera vilka händelser som driver lanseringen av containerbaserade program. Det finns också flera sätt att ändra händelseparametrar. OpenShift Serverless-program kan integreras med andra OpenShift-tjänster, till exempel OpenShift Pipelines, Service Mesh och Monitoring. Detta ger en fullständig serverlös programutveckling och distributionsupplevelse.

Innan du börjar

Skapa ett kluster

Följ självstudien för att skapa ett Azure Red Hat OpenShift-kluster. Om du väljer att installera och använda kommandoradsgränssnittet (CLI) lokalt kräver den här självstudien att du använder Azure CLI version 2.6.0 eller senare. Kör az --version för att hitta din nuvarande version. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Anslut till klustret

För att hantera ett Azure Red Hat OpenShift-kluster måste du använda oc, OpenShift-kommandoradsklienten.

Kommentar

Vi rekommenderar att du installerar OpenShift-kommandoraden i Azure Cloud Shell och att du använder den för alla kommandoradsåtgärder i den här artikeln. Öppna gränssnittet från shell.azure.com eller välj länken:

Knapp för att starta Azure Cloud Shell

Följ självstudien för att installera CLI, hämta dina klusterautentiseringsuppgifter och ansluta till klustret med webbkonsolen och OpenShift CLI.

När du har loggat in bör du se ett meddelande om att du använder default projektet.

Login successful.

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

Using project "default".

Installera knative-kommandoradsgränssnittet (kn)

Ladda ned den senaste versionen av kommandoradsgränssnittet (CLI) som är lämpligt för din dator, från https://github.com/knative/client/releases/

Om du kör kommandon i Azure Cloud Shell laddar du ned det senaste Knative CLI för 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

Öppna OpenShift-webbkonsolen

Hitta url:en för klusterwebbkonsolen genom att köra följande skript:

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

Du bör få en URL som liknar följande.

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

Öppna en webbläsare och öppna konsolens URL. Logga in med kubeadmin autentiseringsuppgifter.

En skärmbild som visar inloggningsskärmen för Azure Red Hat OpenShift

Installera OpenShift Serverless-operatorn

När du är inloggad i OpenShift-webbkonsolen bekräftar du att du är i administratörsvyn . Öppna operatorhubben och välj operatorn OpenShift Serverless.

En skärmbild som visar positionen för operatorn OpenShift Serverless.

Öppna sedan installationssidan för operatorn genom att välja Installera.

En skärmbild som visar hur du väljer Installera för att installera operatorn.

Välj lämplig uppdateringskanal för Azure Red Hat OpenShifts klusterversion och installera operatorn i openshift-serverless namnområdet. Rulla nedåt och välj Installera.

En skärmbild som visar sidan Operatorinstallation.

Inom några minuter visar statussidan att operatorn är installerad och redo att användas. Välj knappen Visa operator för att fortsätta.

En skärmbild som visar statussidan med operatorn installerad och redo att användas.

Installera Knative Serving

Alternativet att köra en container på ett serverlöst sätt på OpenShift Serverless är möjligt med uppströms Knative. Knative utökar Kubernetes för att tillhandahålla en uppsättning komponenter som distribuerar, kör och hanterar moderna program via sin serverlösa metodik.

Skapa en instans av Knative Serving

I det övre vänstra hörnet i fönstret går du till listan Projekt och väljer knative-server. I fönstret Tillhandahållna API:er väljer du Skapa instans i kortet Knative Serving .

En skärmbild som visar var du väljer för att skapa en Knative Service-instans.

På sidan Skapa knative-servering behåller du alla standardvärden. Rulla nedåt och välj knappen Skapa .

En skärmbild som visar standardvärdena i formuläret.

OpenShift Serverless installeras när kolumnen Status visar Klar. Nu är du redo att skapa ett OpenShift Serverless-projekt.

En skärmbild som visar att Knative Serving är klar.

Skapa ett serverlöst projekt

Om du vill skapa ett nytt projekt med namnet demoserverlesskör du följande kommando:

oc new-project demoserverless

Resultatet bör likna följande:

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

Nu ska vi växla från administratörsvyn till utvecklarvyn. Gå till listan över projekt på den vänstra menyn och välj demoserverless. Nu är du på sidan Topologi för projektet.

En skärmbild som visar Azure Red Hat OpenShift-projekttopologi.

Distribuera med webbkonsolen

På sidan Topologi väljer du Från Git. På sidan Importera från Git använder du https://github.com/sclorg/django-ex.git som Git-lagringsplats-URL. Ett exempelwebbprogram implementeras med programmeringsspråket Python.

En skärmbild som visar Azure Red Hat OpenShift-projektet inifrån Git.

Kommentar

OpenShift identifierar att det här är ett Python-projekt och väljer lämplig builder-avbildning.

Bläddra till Resurser och bekräfta att Knative Service har valts som den resurstyp som ska genereras. Detta skapar en Knative-tjänst, en typ av distribution som möjliggör OpenShift Serverless-skalning till noll när den är inaktiv.

En skärmbild som visar hur du väljer Knative Service.

Längst ned på sidan väljer du Skapa. Detta skapar resurser för att hantera bygget och distributionen av programmet. Sedan omdirigeras du till topologiöversikten för projektet.

Topologiöversikten ger en visuell representation av det program som du har distribuerat. Du kan se den övergripande programstrukturen.

Vänta tills bygget har slutförts. Det kan ta några minuter. När bygget är klart visas en grön bockmarkering i det nedre vänstra hörnet av tjänsten.

En skärmbild som visar en bockmarkering som anger att bygget är klart.

Se programskalan

Längst upp i topologivyn går du till listan Visningsalternativ och väljer Antal poddar. Vänta tills poddantalet skalas ned till noll poddar. Det kan ta några minuter att skala ned.

En skärmbild som visar antalet poddar när det har skalats till noll.

I det övre högra hörnet på panelen Knative Service väljer du ikonen Öppna URL . Programmet öppnas på en ny webbläsarflik. Stäng fliken och återgå till topologivyn. Där kan du se att ditt program har skalats upp till en podd för att hantera din begäran. Efter några minuter skalar programmet ned till noll poddar.

En skärmbild som visar programmet som skalats upp till Podd.

Tvinga fram en ny revision och ställa in trafikdistribution

Knative-tjänster tillåter trafikmappning, vilket innebär att revisioner av en tjänst kan mappas till en allokerad del av trafiken. Med varje tjänstkonfigurationsuppdatering skapas en ny revision. Tjänstvägen pekar sedan all trafik till den senaste klara revisionen som standard. Du kan ändra det här beteendet genom att definiera vilken revision som hämtar delar av trafiken. Trafikmappning ger också möjlighet att skapa unika URL:er för enskilda revisioner.

I topologin som skapats väljer du den revision som visas i tjänsten för att visa dess information. Märkena under poddringen och högst upp på detaljpanelen ska vara (REV). I sidopanelen går du till fliken Resurser och rullar ned och väljer den konfiguration som är associerad med din tjänst.

En skärmbild som visar poddringen.

Tvinga fram en konfigurationsuppdatering genom att växla till fliken YAML och rulla ned för att redigera värdet timeoutSecondsför . Ändra värdet till 301. Välj Spara. I ett verkligt scenario kan konfigurationsuppdateringar också utlösas genom att uppdatera taggen containeravbildning.

En skärmbild som visar hur du framtvingar en ny revision genom att uppdatera konfigurationen.

Gå tillbaka till topologivyn . Du ser att en ny revision har distribuerats. Välj den tjänst som slutar med märket (KSVC) och välj knappen Ange trafikdistribution . Du bör nu kunna dela upp trafiken mellan revisionerna i tjänsten.

En skärmbild som visar hur du ställer in trafikdistribution.

Topologivyn visar nu hur trafiken fördelas mellan revisionerna.

En skärmbild som visar hur du granskar trafikdistributionen.

Använda knative-kommandoradsgränssnittet (kn)

I tidigare steg har du använt OpenShift-webbkonsolen för att skapa och distribuera ett program till OpenShift Serverless. Eftersom OpenShift Serverless kör Knative under kan du också använda knative-kommandoradsgränssnittet (kn) för att skapa Knative-tjänster.

Kommentar

Om du inte redan har installerat kn CLI ska du följa stegen i avsnittet förutsättningar i den här artikeln. Kontrollera också att du har loggat in med kommandoradsgränssnittet ocOpenShift .

Vi ska använda en containeravbildning som redan är byggd på quay.io/rhdevelopers/knative-tutorial-greeter.

Distribuera en tjänst

Kör följande kommando för att distribuera tjänsten:

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

Du ser utdata som liknar följande.

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

Du kan hämta en lista över vägar i projektet genom att köra:

kn route list

Du får tillbaka en lista över vägar i namnområdet. Öppna URL:en i en webbläsare för att visa den distribuerade tjänsten.

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

Distribuera en ny version av tjänsten

Distribuera en ny version av programmet genom att köra följande kommando och genom att skicka avbildningstaggen :latest och en miljövariabel MESSAGE_PREFIX:

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

Du får en bekräftelse på att en ny revision greeter-v2 har distribuerats.

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

Om du vill visa en lista över alla revisioner och deras trafikdistributioner kör du följande kommando:

kn revision list

Du får en lista som liknar följande utdata. Observera att den nya revisionen i det här fallet tar emot 100 % av trafiken.

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

Distribution av blå/grön och kanariefågel

När en ny revision distribueras tilldelas den som standard 100 % av trafiken. Anta att du vill implementera en blå/grön distributionsstrategi där du snabbt kan återställa till den äldre versionen av programmet. Knative gör detta enkelt.

Du kan uppdatera tjänsten för att skapa tre trafiktaggar, samtidigt som du tilldelar 100 % av trafiken till dem.

  • current: pekar på den distribuerade versionen
  • prev: pekar på den tidigare versionen
  • senaste: pekar alltid på den senaste versionen
kn service update greeter \
   --tag greeter-v2=current \
   --tag greeter-v1=prev \
   --tag @latest=latest

Du får en bekräftelse som liknar följande.

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

Visa en lista över vägar med hjälp av kommandot nedan:

kn route describe greeter

Du får utdata som visar URL:erna för var och en av taggarna, tillsammans med deras trafikdistribution.

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

[..]

Anta att du snabbt vill återställa till den tidigare versionen. Du kan uppdatera trafikdistributionen så att 100 % av trafiken skickas till föregående tagg:

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

Visa en lista över vägarna och kontrollera igen med hjälp av följande kommando:

kn route describe greeter

Du ser utdata som visar att 100 % av trafikfördelningen går till den tidigare versionen.

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

[..]

Leka med trafikdistributionen medan du uppdaterar huvudvägen i webbläsaren (http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io i det här fallet).

Rensa resurser

När du är klar med programmet kan du köra följande kommando för att ta bort projektet:

oc delete project demoserverless

Du kan också ta bort klustret genom att följa anvisningarna i Självstudie: Ta bort ett Azure Red Hat OpenShift 4-kluster.

Nästa steg

I den här guiden har du lärt dig att:

  • Installera OpenShift Serverless-operatorn och Knative Serving
  • Distribuera ett serverlöst projekt med hjälp av webbkonsolen
  • Distribuera ett serverlöst projekt med knative CLI (kn)
  • Konfigurera blå/gröna distributioner och kanariedistributioner med knative CLI (kn)

Läs mer om hur du skapar och distribuerar serverlösa, händelsedrivna program i Azure Red Hat OpenShift med OpenShift Serverless, följ dokumentationen Komma igång med OpenShift Serverless och dokumentationen Skapa och hantera serverlösa program .