Wdrażanie aplikacji w usłudze Azure Red Hat OpenShift przy użyciu rozwiązania OpenShift Serverless

W tym artykule wdrożysz aplikację w klastrze usługi Azure Red Hat OpenShift z rozwiązaniem OpenShift Serverless. Rozwiązanie OpenShift Serverless ułatwia deweloperom wdrażanie i uruchamianie aplikacji, które będą skalowane w górę lub skalowane do zera na żądanie. Eliminuje to zużycie zasobów, gdy nie są używane.

Kod aplikacji można spakować w kontenerze wraz z odpowiednimi środowiskami uruchomieniowymi. Funkcje bezserwerowe uruchamiają kontenery aplikacji po wyzwoleniu ich przez zdarzenie. Aplikacje można wyzwalać za pomocą różnych zdarzeń: od własnych aplikacji, od wielu dostawców usług w chmurze, systemów oprogramowania jako usługi (SaaS) i innych usług.

Wbudowane funkcje interfejsu OpenShift umożliwiają zarządzanie wszystkimi aspektami wdrożenia kontenera bezserwerowego. Deweloperzy mogą wizualnie określić, które zdarzenia napędzają uruchamianie konteneryzowanych aplikacji. Istnieje również wiele sposobów modyfikowania parametrów zdarzenia. Aplikacje bezserwerowe OpenShift można zintegrować z innymi usługami OpenShift, takimi jak OpenShift Pipelines, Service Mesh i Monitoring. Zapewnia to kompletne środowisko tworzenia i wdrażania aplikacji bezserwerowych.

Przed rozpoczęciem

Tworzenie klastra

Wykonaj czynności opisane w samouczku, aby utworzyć klaster usługi Azure Red Hat OpenShift. Jeśli zdecydujesz się zainstalować interfejs wiersza polecenia i korzystać z niego lokalnie, ten samouczek wymaga użycia interfejsu wiersza polecenia platformy Azure w wersji 2.6.0 lub nowszej. Uruchom polecenie az --version, aby określić bieżącą wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Łączenie z klastrem

Aby zarządzać klastrem usługi Azure Red Hat OpenShift, musisz użyć pakietu oc, klienta wiersza polecenia OpenShift.

Uwaga

Zalecamy zainstalowanie wiersza polecenia openShift w usłudze Azure Cloud Shell i użycie go do wszystkich operacji wiersza polecenia w tym artykule. Otwórz powłokę z shell.azure.com lub wybierz link:

Button to launch Azure Cloud Shell

Postępuj zgodnie z samouczkiem, aby zainstalować interfejs wiersza polecenia, pobrać poświadczenia klastra i nawiązać połączenie z klastrem za pomocą konsoli internetowej i interfejsu wiersza polecenia openShift.

Po zalogowaniu default powinien zostać wyświetlony komunikat z informacją, że używasz projektu.

Login successful.

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

Using project "default".

Instalowanie interfejsu wiersza polecenia knative (kn)

Pobierz najnowszą wersję interfejsu wiersza polecenia (CLI) odpowiedniego dla twojej maszynyhttps://github.com/knative/client/releases/

Jeśli uruchomisz polecenia w usłudze Azure Cloud Shell, pobierz najnowszy interfejs wiersza polecenia knative dla systemu 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

Otwieranie konsoli internetowej OpenShift

Znajdź adres URL konsoli sieci Web klastra, uruchamiając następujący skrypt:

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

Powinien zostać wyświetlony adres URL podobny do poniższego.

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

Otwórz przeglądarkę internetową i otwórz adres URL konsoli. Zaloguj się przy użyciu kubeadmin poświadczeń.

A screenshot that shows the Azure Red Hat OpenShift log-in screen

Instalowanie operatora OpenShift Serverless

Po zalogowaniu się do konsoli internetowej platformy OpenShift upewnij się, że jesteś w widoku Administracja istratora. Otwórz centrum operatorów i wybierz operator OpenShift Serverless.

A screenshot that shows the position of the OpenShift Serverless operator.

Następnie otwórz stronę instalacji operatora, wybierając pozycję Zainstaluj.

A screenshot that shows how to select Install to install the operator.

Wybierz odpowiedni kanał aktualizacji dla wersji klastra usługi Azure Red Hat OpenShift i zainstaluj operator w openshift-serverless przestrzeni nazw. Przewiń w dół i wybierz pozycję Zainstaluj.

A screenshot that shows the Operator installation page.

W ciągu kilku minut strona stanu odzwierciedla, że operator jest zainstalowany i jest gotowy do użycia. Wybierz przycisk Operator widoku, aby kontynuować.

A screenshot that shows the status page with the operator installed and ready for use.

Instalowanie usługi knative

Opcja uruchamiania kontenera w sposób bezserwerowy na serwerze OpenShift Serverless jest możliwa przy użyciu nadrzędnego knative. Rozwiązanie Knative rozszerza platformę Kubernetes, aby zapewnić zestaw składników, które wdrażają, uruchamiają i zarządzają nowoczesnymi aplikacjami za pomocą metodologii bezserwerowej.

Tworzenie wystąpienia funkcji Knative Serving

W lewym górnym rogu okna na liście Project (Projekt) wybierz pozycję knative-server. Następnie w okienku Podane interfejsy API wybierz pozycję Utwórz wystąpienie na karcie Knative Serving .

A screenshot that shows where to select to create a Knative Service instance.

Na stronie Tworzenie funkcji knative Serving zachowaj wszystkie wartości domyślne. Przewiń w dół i wybierz przycisk Utwórz .

A screenshot that shows the default values listed in the form.

Program OpenShift Serverless jest instalowany, gdy w kolumnie Stan jest wyświetlana wartość Gotowe. Teraz możesz utworzyć projekt OpenShift Serverless.

A screenshot that shows that the Knative Serving is ready.

Tworzenie projektu bezserwerowego

Aby utworzyć nowy projekt o nazwie demoserverless, uruchom następujące polecenie:

oc new-project demoserverless

Dane wyjściowe będą podobne do następujących:

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

Przejdźmy z widoku Administracja istratora do widoku Deweloper. Przejdź do listy projektów w menu po lewej stronie i wybierz pozycję demoserverless. Teraz znajdujesz się na stronie Topologia projektu.

A screenshot that shows Azure Red Hat OpenShift project topology.

Wdrażanie przy użyciu konsoli sieci Web

Na stronie Topologia wybierz pozycję Z usługi Git. Na stronie Importowanie z usługi Git użyj https://github.com/sclorg/django-ex.git adresu URL repozytorium Git. Przykładowa aplikacja internetowa jest implementowana przy użyciu języka programowania Python.

A screenshot that shows Azure Red Hat OpenShift project from within Git.

Uwaga

Usługa OpenShift wykrywa, że jest to projekt w języku Python i wybiera odpowiedni obraz konstruktora.

Przewiń do pozycji Zasoby i upewnij się, że usługa knative jest wybrana jako typ zasobu do wygenerowania. Spowoduje to utworzenie usługi Knative Service , typu wdrożenia, które umożliwia skalowanie bezserwerowe OpenShift do zera w przypadku bezczynności.

A screenshot that shows how to select the Knative Service.

W dolnej części strony wybierz pozycję Utwórz. Spowoduje to utworzenie zasobów w celu zarządzania kompilacją i wdrożeniem aplikacji. Następnie nastąpi przekierowanie do przeglądu topologii projektu.

Omówienie topologii zawiera wizualną reprezentację wdrożonej aplikacji. Zobaczysz ogólną strukturę aplikacji.

Poczekaj na zakończenie kompilacji. Może to potrwać kilka minut. Po zakończeniu kompilacji w lewym dolnym rogu usługi pojawi się zielony znacznik wyboru.

A screenshot that shows a checkmark that indicates that the build is complete.

Wyświetlanie skali aplikacji

W górnej części widoku Topologia na liście Opcje wyświetlania wybierz pozycję Liczba zasobników. Poczekaj, aż liczba zasobników zostanie przeskalowania w dół do zera zasobników. Skalowanie w dół może potrwać kilka minut.

A screenshot that shows the Pod count when it has scaled to zero.

W prawym górnym rogu panelu Knative Service wybierz ikonę Otwórz adres URL . Aplikacja zostanie otwarta na nowej karcie przeglądarki. Zamknij kartę i wróć do widoku Topologia. Zobaczysz, że aplikacja została przeskalowana w górę do jednego zasobnika, aby uwzględnić twoje żądanie. Po kilku minutach aplikacja jest skalowana z powrotem w dół do zera zasobników.

A screenshot that shows the application scaled up to Pod.

Wymuszanie nowej poprawki i ustawianie dystrybucji ruchu

Usługi knative umożliwiają mapowanie ruchu, co oznacza, że poprawki usługi można mapować na przydzieloną część ruchu. Po każdej aktualizacji konfiguracji usługi zostanie utworzona nowa poprawka. Następnie trasa usługi domyślnie wskazuje cały ruch do najnowszej gotowej wersji. To zachowanie można zmienić, definiując, która poprawka pobiera fragmenty ruchu. Mapowanie ruchu zapewnia również opcję tworzenia unikatowych adresów URL dla poszczególnych poprawek.

W utworzonej topologii wybierz poprawkę wyświetlaną w usłudze, aby wyświetlić jej szczegóły. Znaczki pod pierścieniem zasobnika i w górnej części panelu szczegółów powinny mieć wartość (REV). Na panelu bocznym na karcie Zasoby przewiń w dół i wybierz konfigurację skojarzona z usługą.

A screenshot that shows the Pod ring.

Wymuś aktualizację konfiguracji, przełączając się na kartę YAML i przewijając w dół, aby edytować wartość .timeoutSeconds Zmień wartość na 301. Wybierz pozycję Zapisz. W rzeczywistym scenariuszu aktualizacje konfiguracji można również wyzwolić, aktualizując tag obrazu kontenera.

A screenshot that shows how to force a new revision by updating the configuration.

Wróć do widoku Topologia , zobaczysz, że została wdrożona nowa poprawka. Wybierz usługę kończącą się znaczkiem (KSVC) i wybierz przycisk Ustaw dystrybucję ruchu. Teraz powinno być możliwe podzielenie ruchu między poprawkami w usłudze.

A screenshot that shows how to set traffic distribution.

Widok topologii pokazuje teraz, jak ruch jest dystrybuowany między poprawkami.

A screenshot that shows how to review traffic distribution.

Korzystanie z interfejsu wiersza polecenia knative (kn)

W poprzednich krokach użyto konsoli internetowej OpenShift do utworzenia i wdrożenia aplikacji w rozwiązaniu OpenShift Serverless. Ponieważ rozwiązanie OpenShift Serverless działa pod spodem, możesz również użyć interfejsu wiersza polecenia knative (kn) do tworzenia usług knative.

Uwaga

Jeśli interfejs wiersza polecenia nie został jeszcze zainstalowany kn , pamiętaj, aby wykonać kroki opisane w sekcji wymagań wstępnych tego artykułu. Upewnij się również, że zalogowano się przy użyciu interfejsu ocwiersza polecenia OpenShift.

Użyjemy obrazu kontenera, który został już skompilowany w usłudze quay.io/rhdevelopers/knative-tutorial-greeter.

Wdrażanie usługi

Aby wdrożyć usługę, uruchom następujące polecenie:

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

Zobaczysz dane wyjściowe podobne do poniższych.

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

Listę tras w projekcie można pobrać, uruchamiając polecenie:

kn route list

Wrócisz do listy tras w przestrzeni nazw. Otwórz adres URL w przeglądarce internetowej, aby wyświetlić wdrożona usługa.

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

Wdrażanie nowej wersji usługi

Wdróż nową wersję aplikacji, uruchamiając następujące polecenie, przekazując :latest tag obrazu i zmienną środowiskową MESSAGE_PREFIX:

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

Otrzymasz potwierdzenie wdrożenia nowej poprawki greeter-v2 .

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

Aby wyświetlić listę wszystkich poprawek i ich dystrybucji ruchu, uruchom następujące polecenie:

kn revision list

Uzyskasz listę podobną do poniższych danych wyjściowych. Należy pamiętać, że w tym przypadku nowa poprawka otrzymuje 100% ruchu.

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

Wdrożenia niebieskie/zielone i kanary

Po wdrożeniu nowej poprawki domyślnie jest przypisywana 100% ruchu. Załóżmy, że chcesz zaimplementować strategię wdrażania niebieskiego/zielonego, w której można szybko wycofać się ze starszej wersji aplikacji. Knative sprawia, że to łatwe.

Możesz zaktualizować usługę, aby utworzyć trzy tagi ruchu, przypisując do nich 100% ruchu.

  • current: wskazuje aktualnie wdrożoną wersję
  • prev: wskazuje poprzednią wersję
  • latest: zawsze wskazuje najnowszą wersję
kn service update greeter \
   --tag greeter-v2=current \
   --tag greeter-v1=prev \
   --tag @latest=latest

Otrzymasz potwierdzenie podobne do poniższego.

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

Wyświetl listę tras przy użyciu poniższego polecenia:

kn route describe greeter

Otrzymasz dane wyjściowe z adresami URL dla każdego z tagów wraz z ich rozkładem ruchu.

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

[..]

Załóżmy, że chcesz szybko wycofać się z poprzedniej wersji. Możesz zaktualizować dystrybucję ruchu, aby wysłać 100% ruchu do poprzedniego tagu:

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

Wyświetl listę tras i sprawdź ponownie, używając następującego polecenia:

kn route describe greeter

Zobaczysz dane wyjściowe pokazujące, że 100% dystrybucji ruchu przechodzi do poprzedniej wersji.

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

[..]

Przetwórz dystrybucję ruchu podczas odświeżania trasy głównej w przeglądarce (http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io w tym przypadku).

Czyszczenie zasobów

Po zakończeniu pracy z aplikacją możesz uruchomić następujące polecenie, aby usunąć projekt:

oc delete project demoserverless

Klaster można również usunąć, postępując zgodnie z instrukcjami w temacie Samouczek: usuwanie klastra usługi Azure Red Hat OpenShift 4.

Następne kroki

W tym przewodniku przedstawiono sposób wykonywania następujących instrukcji:

  • Instalowanie operatora Bezserwerowego openShift i usługi knative
  • Wdrażanie projektu bezserwerowego przy użyciu konsoli sieci Web
  • Wdrażanie projektu bezserwerowego przy użyciu interfejsu wiersza polecenia knative (kn)
  • Konfigurowanie wdrożeń niebieski/zielonych i wdrożeń kanarowych przy użyciu interfejsu wiersza polecenia knative (kn)

Dowiedz się więcej o tworzeniu i wdrażaniu bezserwerowych aplikacji opartych na zdarzeniach w usłudze Azure Red Hat OpenShift przy użyciu rozwiązania OpenShift Serverless, postępuj zgodnie z dokumentacją Wprowadzenie do rozwiązania OpenShift Serverless oraz dokumentacją Tworzenie aplikacji bezserwerowych i zarządzanie nimi.