다음을 통해 공유


OpenShift Serverless를 사용하여 Azure Red Hat OpenShift에 애플리케이션 배포

이 문서에서는 OpenShift Serverless를 사용하여 Azure Red Hat OpenShift 클러스터에 애플리케이션을 배포합니다. OpenShift Serverless를 사용하면 개발자는 스케일 업 또는 0으로 스케일링할 애플리케이션을 배포하고 실행할 수 있습니다. 이렇게 하면 미사용 시 리소스가 소모되지 않습니다.

애플리케이션 코드는 적절한 런타임과 함께 컨테이너에 패키지할 수 있습니다. 서버리스 기능은 이벤트에 의해 트리거될 때 애플리케이션 컨테이너를 시작합니다. 사용자 고유의 애플리케이션, 여러 클라우드 서비스 공급자, SaaS(Software as a Service) 시스템 및 기타 서비스에서 다양한 이벤트를 통해 애플리케이션을 트리거할 수 있습니다.

기본 제공 OpenShift 인터페이스 기능을 사용하여 서버리스 컨테이너 배포의 모든 측면을 관리할 수 있습니다. 개발자는 컨테이너화된 애플리케이션의 시작을 구동하는 이벤트를 시각적으로 식별할 수 있습니다. 이벤트 매개 변수를 수정하는 방법도 여러 가지가 있습니다. OpenShift Serverless 애플리케이션은 OpenShift Pipelines, Service Mesh 및 Monitoring과 같은 다른 OpenShift 서비스와 통합하여 완벽한 서버리스 애플리케이션 개발 및 배포 환경을 제공할 수 있습니다.

시작하기 전에

클러스터 생성

자습서에 따라 Azure Red Hat OpenShift 클러스터를 만듭니다. CLI(명령줄 인터페이스)를 로컬로 설치하고 사용하기로 선택할 경우 이 자습서에서 Azure CLI 버전 2.6.0 이상을 사용해야 합니다. az --version을 실행하여 현재 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

클러스터에 연결

Azure Red Hat OpenShift 클러스터를 관리하려면 OpenShift 명령줄 클라이언트인 oc를 사용해야 합니다.

참고 항목

Azure Cloud Shell에서 OpenShift 명령줄을 설치하고 이 문서의 모든 명령줄 작업에 사용하는 것이 좋습니다. shell.azure.com에서 셸을 열거나 링크를 선택합니다.

Azure Cloud Shell을 시작하는 단추

클러스터 자격 증명을 검색하고, 웹 콘솔 및 OpenShift CLI를 사용하여 클러스터에 연결하려면 자습서에 따라 CLI를 설치합니다.

로그인하면 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".

Knative 명령줄 인터페이스(kn) 설치

https://github.com/knative/client/releases/에서 컴퓨터에 적합한 CLI(명령줄 인터페이스)의 최신 릴리스를 다운로드합니다.

Azure Cloud Shell에서 명령을 실행하는 경우 Linux용 최신 Knative CLI를 다운로드합니다.

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

OpenShift 웹 콘솔 열기

다음 스크립트를 실행하여 클러스터 웹 콘솔 URL을 찾습니다.

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

다음과 비슷한 URL이 표시됩니다.

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

웹 브라우저를 열고 콘솔 URL을 엽니다. 자격 증명을 사용하여 kubeadmin에 로그인합니다.

Azure Red Hat OpenShift 로그인 화면을 보여 주는 스크린샷

OpenShift Serverless 운영자 설치

OpenShift 웹 콘솔에 로그인하면 관리자 보기에 있는지 확인합니다. 연산자 허브를 열고 OpenShift Serverless 연산자를 선택합니다.

OpenShift Serverless 연산자의 위치를 보여주는 스크린샷.

그런 다음, 설치를 선택하여 연산자 설치 페이지를 엽니다.

설치를 선택하여 연산자를 설치하는 방법을 보여주는 스크린샷.

Azure Red Hat OpenShift의 클러스터 버전에 적절한 업데이트 채널을 선택하고 openshift-serverless 네임스페이스에 연산자를 설치합니다. 아래로 스크롤하여 설치를 선택합니다.

연산자 설치 페이지를 보여주는 스크린샷.

몇 분 후에 연산자가 설치되고 사용할 준비가 되었다는 것이 상태 페이지에 반영됩니다. 연산자 보기 단추를 선택하여 계속 진행합니다.

연산자가 설치되고 사용할 준비가 된 상태 페이지를 보여주는 스크린샷.

Knative 서비스 설치

OpenShift Serverless에서 서버리스 방식으로 컨테이너를 실행하는 옵션은 업스트림 Knative를 사용하여 구현할 수 있습니다. Knative는 Kubernetes를 확장하여 서버리스 방법론을 통해 최신 애플리케이션을 배포, 실행 및 관리하는 구성 요소 집합을 제공합니다.

Knative 서비스 인스턴스 만들기

창의 왼쪽 위 모서리에 있는 프로젝트 목록에서 knative-server를 선택합니다. 그런 다음 제공된 API 창에서 Knative 서비스 카드 내에서 인스턴스 만들기를 선택합니다.

Knative 서비스 인스턴스를 만들기 위해 선택할 위치를 보여주는 스크린샷.

Knative 서비스 만들기 페이지에서 모든 기본값을 유지합니다. 아래로 스크롤하여 만들기 단추를 선택합니다.

양식에 나열된 기본값을 여주는 스크린샷.

상태 열에 준비됨이 표시되면 OpenShift Serverless가 설치됩니다. 이제 OpenShift Serverless 프로젝트를 만들 준비가 되었습니다.

Knative 서비스 제공이 준비되었음을 보여주는 스크린샷.

서버리스 프로젝트 만들기

demoserverless라는 새 프로젝트를 만들려면 다음 명령을 실행합니다.

oc new-project demoserverless

출력은 다음과 같은 형태가 됩니다.

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

관리자 보기에서 개발자 보기로 전환해 보겠습니다. 왼쪽 메뉴의 프로젝트 목록으로 이동하여 demoserverless를 선택합니다. 이제 프로젝트의 토폴로지 페이지에 있습니다.

Azure Red Hat OpenShift 프로젝트 토폴로지를 보여주는 스크린샷.

웹 콘솔을 사용하여 배포

토폴로지 페이지에서 Git에서를 선택합니다. Git에서 가져오기 페이지에서 https://github.com/sclorg/django-ex.gitGit 리포지토리 URL로 사용합니다. 샘플 웹 애플리케이션은 Python 프로그래밍 언어로 구현됩니다.

Git 내에서 Azure Red Hat OpenShift 프로젝트를 보여주는 스크린샷.

참고 항목

OpenShift는 Python 프로젝트임을 검색하고 적절한 작성기 이미지를 선택합니다.

리소스까지 스크롤하고 Knative 서비스가 생성할 리소스 종류로 선택되어 있는지 확인합니다. 그러면 유휴 상태일 때 OpenShift Serverless를 0으로 스케일링할 수 있는 배포 유형인 Knative 서비스가 만들어집니다.

Knative 서비스를 선택하는 방법을 보여주는 스크린샷.

페이지의 맨 아래에서 만들기를 선택합니다. 그러면 애플리케이션의 빌드 및 배포를 관리하는 리소스가 만들어집니다. 그런 다음, 프로젝트의 토폴로지 개요로 리디렉션됩니다.

토폴로지 개요는 배포한 애플리케이션의 시각적 표시를 제공합니다. 전체 애플리케이션 구조를 볼 수 있습니다.

빌드가 완료될 때까지 기다립니다. 몇 분이 걸릴 수 있습니다. 빌드가 완료되면 서비스의 왼쪽 아래에 녹색 확인 표시가 나타납니다.

빌드가 완료되었음을 나타내는 확인 표시를 보여주는 스크린샷.

애플리케이션 스케일링 확인

토폴로지 보기의 맨 위에 있는 표시 옵션 목록에서 Pod 수를 선택합니다. Pod 개수가 0개 Pod로 스케일 다운될 때까지 기다립니다. 스케일 다운에는 몇 분이 걸릴 수 있습니다.

Pod 수가 0으로 스케일링된 경우의 Pod 수를 보여주는 스크린샷.

Knative Service 패널의 오른쪽 위 모서리에서 URL 열기 아이콘을 선택합니다. 애플리케이션이 새 탭에서 열립니다. 새 브라우저 탭을 닫고 토폴로지 보기로 돌아갑니다. 토폴로지 보기에서 애플리케이션이 요청을 수용하도록 1개 Pod로 스케일 업된 것을 확인할 수 있습니다. 몇 분 후에 애플리케이션은 다시 0개 Pod로 스케일 다운됩니다.

Pod로 확장된 애플리케이션을 보여주는 스크린샷.

새 수정 버전 적용 및 트래픽 배포 설정

Knative 서비스는 트래픽 매핑을 허용합니다. 즉, 서비스의 수정 버전을 트래픽의 할당된 부분에 매핑할 수 있습니다. 서비스 구성이 업데이트될 때마다 서비스의 수정 버전이 새로 생성됩니다. 그러면 서비스 경로에서 기본적으로 모든 트래픽이 최신 준비 버전을 가리킵니다. 트래픽 일부를 가져오는 수정 버전을 정의하여 이 동작을 변경할 수 있습니다. 트래픽 매핑은 특정 수정 버전의 개별 URL을 만드는 옵션도 제공합니다.

토폴로지에서 서비스 내에 표시되는 수정 버전을 선택하여 세부 정보를 확인합니다. Pod 링 아래 및 세부 정보 패널 위쪽에 있는 배지는 (REV)입니다. 사이드 패널의 리소스 탭에서 아래로 스크롤하여 서비스와 연결된 구성을 선택합니다.

Pod 링을 보여주는 스크린샷.

YAML 탭으로 전환하고 아래로 스크롤하여 timeoutSeconds 값을 편집하여 구성 업데이트를 적용합니다. 값을 301으로 변경합니다. 저장을 선택합니다. 실제 시나리오에서는 컨테이너 이미지 태그를 업데이트하여 해당 구성 업데이트를 트리거할 수도 있습니다.

구성을 업데이트하여 새 수정을 강제 적용하는 방법을 보여주는 스크린샷.

토폴로지 보기로 돌아가면 새 수정 버전이 배포된 것을 볼 수 있습니다. 배지 (KSVC)로 끝나는 서비스를 선택하고 트래픽 배포 설정 단추를 선택합니다. 이제 서비스의 수정 버전 간에 트래픽을 나눌 수 있습니다.

트래픽 분포를 설정하는 방법을 보여주는 스크린샷/

이제 토폴로지 보기는 수정 버전 간에 트래픽이 분산되는 방식을 보여줍니다.

트래픽 분포를 검토하는 방법을 보여주는 스크린샷.

Knative 명령줄 도구(kn) 사용

이전 단계에서는 OpenShift 웹 콘솔을 사용하여 애플리케이션을 만들고 OpenShift Serverless에 배포했습니다. OpenShift Serverless는 바로 아래에 Knative를 실행하고 있으므로 Knative 명령줄 인터페이스(kn)를 사용하여 Knative 서비스를 만들 수도 있습니다.

참고 항목

kn CLI를 아직 설치하지 않은 경우 이 문서의 필수 조건 섹션에 있는 단계를 수행해야 합니다. 또한 OpenShift 명령줄 인터페이스 oc를 사용하여 로그인했는지 확인합니다.

quay.io/rhdevelopers/knative-tutorial-greeter에서 이미 빌드된 컨테이너 이미지를 사용하려고 합니다.

서비스 배포

서비스를 배포하려면 다음 명령을 실행합니다.

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

다음과 비슷한 출력이 표시됩니다.

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

프로젝트에서 경로 목록을 검색하려면 다음을 실행합니다.

kn route list

네임스페이스의 경로 목록이 다시 표시됩니다. 웹 브라우저에서 URL을 열어 배포된 서비스를 확인합니다.

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

새 버전의 서비스 배포

다음 명령을 실행하고 :latest 이미지 태그 및 환경 변수 MESSAGE_PREFIX를 전달하여 새 버전의 애플리케이션을 배포합니다.

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

새 수정 버전 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

모든 수정 버전 및 해당 트래픽 분산 목록을 보려면 다음 명령을 실행합니다.

kn revision list

다음과 출력과 비슷한 목록이 표시됩니다. 이 경우 새 수정 버전은 트래픽의 100%를 받습니다.

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

파란색/녹색 및 카나리아 배포

새 수정 버전이 배포되면 기본적으로 트래픽의 100%가 할당됩니다. 이전 버전의 애플리케이션으로 빠르게 롤백할 수 있는 파란색/녹색 배포 전략을 구현하려는 경우를 살펴보겠습니다. Knative를 사용하면 쉽게 구현할 수 있습니다.

트래픽의 100%를 할당하면서 세 개의 트래픽 태그를 만들도록 서비스를 업데이트할 수 있습니다.

  • current: 현재 배포된 버전을 가리킵니다.
  • prev: 이전 버전을 가리킵니다.
  • lastest: 항상 최신 버전을 가리킵니다.
kn service update greeter \
   --tag greeter-v2=current \
   --tag greeter-v1=prev \
   --tag @latest=latest

다음과 비슷한 확인이 표시됩니다.

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

다음 명령을 사용하여 경로를 나열합니다.

kn route describe greeter

트래픽 분산과 함께 각 태그의 URL을 보여주는 출력이 표시됩니다.

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

[..]

이전 버전으로 빠르게 롤백하려는 경우 이전 태그로 트래픽 100%를 전송하도록 트래픽 분산을 업데이트할 수 있습니다.

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

다음 명령을 사용하여 경로를 나열하고 다시 확인합니다.

kn route describe greeter

트래픽 분산의 100%가 이전 버전으로 이동하는 것을 보여주는 출력이 표시됩니다.

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

[..]

브라우저에서 주 경로(이 경우 http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io)를 새로 고치는 동안 트래픽 분산을 조정해 봅니다.

리소스 정리

애플리케이션을 완료하고 나면 다음 명령을 실행하여 프로젝트를 삭제할 수 있습니다.

oc delete project demoserverless

자습서: Azure Red Hat OpenShift 4 클러스터 삭제의 지침에 따라 클러스터를 삭제할 수도 있습니다.

다음 단계

이 가이드에서 다음을 수행하는 방법을 배웠습니다.

  • OpenShift Serverless 운영자 및 Knative 서비스 설치
  • 웹 콘솔을 사용하여 서버리스 프로젝트 배포
  • Knative CLI(kn)를 사용하여 서버리스 프로젝트 배포
  • Knative CLI(kn)를 사용하여 파란색/녹색 배포 및 카나리아 배포 구성

OpenShift Serverless를 사용하여 Azure Red Hat OpenShift에서 서버리스, 이벤트 기반 애플리케이션을 빌드 및 배포하는 방법에 관해 자세히 알아보고, OpenShift Serverless 시작 설명서와 서버리스 애플리케이션 만들기 및 관리 설명서를 참조하세요.