웹사이트 검색

Kubernetes에서 Knative로 서버리스 워크로드를 실행하는 방법


저자는 Write for DOnations 프로그램을 선택했습니다.

소개

서버리스 패러다임은 사용자가 기본 인프라에 대해 걱정할 필요 없이 애플리케이션을 배포할 수 있도록 도와줍니다. Serverless 2.0의 등장으로 이제 많은 플랫폼과 도구를 통해 Kubernetes에 서버리스 애플리케이션을 배포할 수 있습니다.

또한 Openshift는 Knative를 사용하여 사용자가 Kubernetes 위에 서버리스 워크로드를 배포합니다.

Knative는 다음과 같은 두 가지 주요 구성요소를 제공합니다. Eventing은 서버리스 워크로드를 트리거하는 이벤트를 관리합니다. 서빙은 서버리스 워크로드를 배포하고 관리하기 위한 구성 요소 집합입니다. Knative Serving을 사용하면 개발자가 Kubernetes 위에 서버리스 애플리케이션을 배포하고 관리할 수 있습니다. 개발자는 Knative Serving을 사용하여 빠르고 쉽게 새 서비스를 배포하고 확장 및 축소하며 다른 서비스 및 이벤트 소스에 연결할 수 있습니다. 이 기능을 통해 개발자는 유연하고 확장 가능하며 유지 관리가 쉬운 최신 클라우드 네이티브 애플리케이션을 구축하고 배포할 수 있습니다.

이 튜토리얼에서는 Knative Serving을 사용하여 Node.js 애플리케이션을 DigitalOcean Kubernetes 클러스터에 서버리스 워크로드로 배치합니다. doctl(DigitalOcean CLI) 및 kn(Knative CLI)을 사용하여 Kubernetes 클러스터를 생성하고 애플리케이션을 배포합니다.

전제 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • 최소 4GB RAM 및 2개 CPU 코어로 Kubernetes 클러스터를 시작하는 데 사용할 DigitalOcean 계정. 없는 경우 Kubernetes 빠른 시작을 참조하세요.
  • 원격 서버에서 이 튜토리얼을 따르려면 Droplet Quickstart를 따라 루트가 아닌 사용자와 방화벽으로 Ubuntu 22.04 서버를 설정할 수 있습니다.
  • doctl 사용에 대한 자세한 내용은 DigitalOcean 명령줄 클라이언트, doctl 사용 방법.
  • Kubernetes 설치 문서.
  • 도커 설치 및 사용 방법에 대한 자습서의 1단계와 2단계에 따라 설정할 수 있는 컴퓨터에 Docker가 설치되었습니다.
  • 애플리케이션을 생성하고 해당 컨테이너 이미지를 Docker 허브로 푸시하기 위한 Docker 튜토리얼을 사용하여 Node.js 애플리케이션을 빌드하는 방법에 따라 설정된 샘플 Node.js 애플리케이션.
  • 이 자습서에서 만들 Docker 이미지를 저장하기 위한 Docker 허브의 계정

1단계 - DigitalOcean Kubernetes 클러스터 실행

Knative는 Kubernetes 기반 플랫폼이므로 DigitalOcean의 Kubernetes 클러스터와 함께 사용합니다. DigitalOcean에서 Kubernetes 클러스터를 시작하는 방법에는 여러 가지가 있습니다. DigitalOcean Cloud 인터페이스, DigitalOcean CLI 또는 Terraform 공급자를 사용할 수 있습니다.

이 자습서에서는 DigitalOcean 명령줄 클라이언트인 doctl을 사용하여 Kubernetes 클러스터를 시작합니다. 아직 doctl을 설치하지 않은 경우 공식 설치 가이드의 단계를 따르세요.

이 튜토리얼에서 Knative를 효과적으로 사용하려면 최소 4GB RAM과 2개의 CPU 코어를 사용할 수 있는 Kubernetes 클러스터가 필요합니다. 다음 플래그와 함께 doctl 명령을 실행하여 이러한 사양으로 이름이 knative-tutorial인 클러스터를 시작할 수 있습니다.

  • --size는 원격 서버의 크기를 지정합니다.
  • --count는 클러스터의 일부로 생성될 노드 수를 지정합니다.

DigitalOcean Kubernetes 클러스터를 생성하려면 다음 명령을 실행합니다.

  1. doctl kubernetes cluster create knative-tutorial --size s-2vcpu-4gb --count 3

이 명령에서 크기가 4GB RAM 및 2개의 CPU 코어로 설정되고 count 3 노드.

참고: 이 자습서에서는 해당 옵션을 사용하지 않지만 --region 플래그를 사용하여 서버가 위치할 지역을 지정할 수도 있습니다. Droplet과 같은 원격 서버를 사용하는 경우 서버와 동일한 지역에 클러스터를 두기를 원할 수 있습니다. DigitalOcean 제어판을 사용하여 지역별 가용성 매트릭스를 사용하는 경우.

이 명령을 완료하는 데 몇 분 정도 걸립니다. 완료되면 다음과 유사한 메시지가 표시됩니다.

Output
Notice: Cluster is provisioning, waiting for cluster to be running ........................................................... Notice: Cluster created, fetching credentials Notice: Adding cluster credentials to kubeconfig file found in "/home/sammy/.kube/config" Notice: Setting current-context to do-nyc1-knative-tutorial ID Name Region Version Auto Upgrade Status Node Pools d2d1f9bc-114b-45e7-b109-104137f9ab62 knative-tutorial nyc1 1.24.4-do.0 false running knative-tutorial-default-pool

이제 클러스터를 사용할 준비가 되었습니다.

이제 kubectl이 시스템에 설정되었는지 확인할 수 있으며 다음 명령을 사용하여 DigitalOcean Kubernetes 클러스터에 연결할 수 있습니다.

  1. kubectl cluster-info

다음과 유사한 출력이 표시됩니다.

Output
Kubernetes control plane is running at https://69de217e-0284-4e18-a6d7-5606915a4e88.k8s.onlinux-console.net CoreDNS is running at https://69de217e-0284-4e18-a6d7-5606915a4e88.k8s.onlinux-console.net/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

출력에는 컨트롤 플레인CoreDNS 서비스(출력 블록에서 강조 표시됨)의 URL이 나열되므로 kubectl이 올바르게 구성되었음을 알 수 있습니다. 시스템에서 클러스터에 도달할 수 있습니다.

클러스터 생성 프로세스의 일부로 doctl은 새 클러스터를 사용하도록 kubectl 컨텍스트를 자동으로 구성합니다. 다음 명령을 실행하여 이를 확인할 수 있습니다.

  1. kubectl config current-context

이 명령은 현재 컨텍스트의 이름을 반환합니다.

다음 출력을 받아야 합니다.

Output
do-nyc1-knative-tutorial

출력은 현재 컨텍스트가 do-nyc1-knative-tutorial임을 나타냅니다. 이는 클러스터가 위치한 지역으로 생성한 클러스터의 이름입니다(nyc1).

다음 명령을 사용하여 클러스터가 실행 중이고 노드가 워크로드를 수락할 준비가 되었는지 확인할 수도 있습니다.

  1. kubectl get nodes

kubectl get nodes 명령은 상태 및 기타 정보와 함께 클러스터의 모든 노드를 나열합니다.

다음 출력을 받아야 합니다.

Output
NAME STATUS ROLES AGE VERSION do-nyc1-knative-tutorial-159783000-0v9k5 Ready <none> 2m52s v1.24.4 do-nyc1-knative-tutorial-159783000-1h4qj Ready <none> 2m52s v1.24.4 do-nyc1-knative-tutorial-159783000-1q9qf Ready <none> 2m52s v1.24.4

출력에는 클러스터에 워크로드를 수락할 준비가 된 3개의 노드가 있다고 나와 있습니다.

이 단계에서는 DigitalOcean에서 Kubernetes 클러스터를 시작했습니다. 이제 Knative를 설치하여 Kubernetes에 서버리스 워크로드를 배치할 수 있습니다.

2단계 - Knative Serving 설치

이 단계에서는 Kubernetes 클러스터에 Knative Serving을 설치합니다. Knative Serving은 서버리스 워크로드의 배포 및 관리를 담당합니다.

Knative Serving을 설치하려면 Knative 핵심 컴포넌트와 사용자 정의 리소스가 필요합니다. 다음 명령을 실행하여 핵심 구성 요소를 설치합니다.

  1. kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-crds.yaml
  2. kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-core.yaml

kubectl apply 명령은 클러스터에 Knative 핵심 구성요소 및 사용자 정의 리소스를 설치합니다. -f 플래그는 구성 변경 사항을 포함하는 파일을 지정합니다. 이 경우 구성 변경 사항은 Knative 저장소에서 다운로드한 YAML 파일에 있습니다.

이러한 명령을 완료하는 데 몇 분 정도 걸립니다. 다음 출력을 받게 됩니다(간결성을 위해 아래 출력이 잘림).

Output
customresourcedefinition.apiextensions.k8s.io/certificates.networking.internal.knative.dev created customresourcedefinition.apiextensions.k8s.io/clusteringresses.networking.internal.knative.dev created customresourcedefinition.apiextensions.k8s.io/configurations.serving.knative.dev created customresourcedefinition.apiextensions.k8s.io/images.caching.internal.knative.dev created customresourcedefinition.apiextensions.k8s.io/ingresses.networking.internal.knative.dev created ...

이 출력은 Knative 핵심 구성요소 및 사용자 정의 리소스가 클러스터에 있음을 나타냅니다. 모든 구성 요소는 knative-serving 네임스페이스에 있습니다.

다운로드가 완료되면 Knative Serving이 설치되었는지 확인할 수 있습니다.

  1. kubectl get pods --namespace knative-serving

kubectl get pods 명령은 네임스페이스 knative-serving의 클러스터에서 시작된 모든 포드 목록을 검색합니다. 이 명령은 클러스터의 포드, 현재 상태, 포드의 컨테이너 수, 특정 네임스페이스의 컨테이너 이름을 식별합니다.

다음과 유사한 출력이 표시됩니다.

Output
NAME READY STATUS RESTARTS AGE activator-5f6b4bf5c8-kfxrv 1/1 Running 0 4m37s autoscaler-bc7d6c9c9-v5jqt 1/1 Running 0 4m34s controller-687d88ff56-9g4gz 1/1 Running 0 4m32s domain-mapping-69cc86d8d5-kr57g 1/1 Running 0 4m29s domainmapping-webhook-65dfdd9b96-nzs9c 1/1 Running 0 4m27s net-kourier-controller-55c99987b4-hkfpl 1/1 Running 0 3m49s webhook-587cdd8dd7-qbb9b 1/1 Running 0 4m22s

출력에는 knative-serving 네임스페이스에서 실행 중인 모든 팟(Pod)이 표시됩니다. 팟(Pod)은 Knative Serving의 다양한 컴포넌트를 담당합니다.

Knative에는 수신 트래픽을 서비스로 라우팅하기 위한 네트워킹 계층이 필요합니다. Knative의 네트워킹 계층은 분산 환경에서 마이크로서비스의 배치 및 통신을 가능하게 합니다. Knative Serving은 Kourier를 네트워킹 계층으로 지원합니다.

이 튜토리얼에서는 Knative와 원활하게 통합되는 Kourier를 네트워킹 계층으로 사용합니다. Kourier는 Knative 에코시스템의 나머지 부분과 동일한 API 및 표준을 사용하므로 강력한 네트워킹 기능의 이점을 얻고자 하는 Knative를 이미 사용하고 있는 개발자 및 조직에 적합한 옵션입니다.

다음 명령으로 Kourier를 설치합니다.

  1. kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.8.0/kourier.yaml

다음 출력을 받아야 합니다.

Output
namespace/kourier-system configured configmap/kourier-bootstrap configured configmap/config-kourier configured serviceaccount/net-kourier configured clusterrole.rbac.authorization.k8s.io/net-kourier configured clusterrolebinding.rbac.authorization.k8s.io/net-kourier configured deployment.apps/net-kourier-controller configured service/net-kourier-controller configured deployment.apps/3scale-kourier-gateway configured service/kourier configured service/kourier-internal configured

출력에는 Kubernetes 클러스터에서 Kourier 설치 프로세스의 일부로 생성된 NamespacesConfigMaps와 같은 모든 리소스가 나열됩니다.

Kourier를 네트워킹 계층으로 사용하도록 Knative를 구성하려면 config-network ConfigMap을 편집합니다.

이를 위해 kubectl patch 명령을 사용하여 Kubernetes 클러스터에서 객체의 필드를 업데이트해야 합니다. 이 명령에는 몇 가지 플래그도 포함해야 합니다.

  • --namespace는 패치하려는 개체를 찾을 수 있는 위치를 지정합니다.
  • --typepatch 명령으로 구성을 적용할 때 수행할 패치를 지정합니다. 사용 가능한 유형은 json, mergestrategic입니다.
  • --patch는 파일이 아닌 명령줄에서 직접 패치 데이터를 지정합니다.

관련 플래그와 함께 이 명령을 실행합니다.

  1. kubectl patch configmap/config-network \
  2. --namespace knative-serving \
  3. --type merge \
  4. --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'

kubectl patch 명령은 네임스페이스knative-serving으로 설정된 configmap/config-networkconfigmap/config-network를 패치합니다. >type을 병합으로 설정합니다.

merge 패치 유형은 더 많은 대상 업데이트를 허용하는 반면, json 또는 전략적 패치 유형은 더 포괄적인 업데이트를 허용합니다. merge 패치 유형은 패치 명령에 전체 리소스 구성을 포함하지 않고 업데이트할 개별 필드를 지정합니다. 이는 다른 유형의 경우입니다. 패치되는 데이터는 patch 플래그로 식별됩니다.

다음 출력을 받아야 합니다.

Output
configmap/config-network patched

이 명령의 출력은 Kourier가 클러스터에 올바르게 설정되었는지 확인합니다.

마지막으로 다음 명령을 사용하여 Kourier 로드 밸런서의 외부 IP 주소를 가져옵니다.

  1. kubectl get svc kourier --namespace kourier-system

kubectl get svc 명령은 언급된 네임스페이스(이 경우 kourier-system)의 Kubernetes 클러스터에서 실행 중인 서비스에 대한 정보를 검색합니다. 이 명령은 연결된 IP 주소 및 포트 번호와 함께 클러스터의 모든 서비스를 나열합니다.

다음 출력을 받아야 합니다.

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 10.245.186.153 138.197.231.61 80:31245/TCP,443:30762/TCP 2m33s

명령의 출력에는 서비스 이름, 서비스 유형(예: ClusterIP, NodePort 등), 클러스터 IP 주소 및 포트 번호가 포함됩니다. 외부 IP 주소 및 포트 번호. 여기에 나열된 숫자는 예시이므로 출력에 다른 숫자가 표시됩니다.

로드 밸런서가 프로비저닝되는 데 몇 분 정도 걸릴 수 있습니다. EXTERNAL-IP 필드에 빈 값이나 <pending>이 표시될 수 있습니다. 이 경우 몇 분 정도 기다렸다가 명령을 다시 실행하십시오.

참고: 이 자습서를 계속하기 전에 로드 밸런서를 프로비저닝해야 합니다. LoadBalancer에 대한 EXTERNAL-IP 필드가 채워지면 계속할 수 있습니다. 그렇지 않으면 DNS 서비스를 설정하는 동안 문제가 발생할 수 있습니다.

로드 밸런서의 외부 IP 주소를 가리키도록 도메인 이름에 대한 DNS를 구성할 수도 있습니다. Knative는 sslip.io를 기본 DNS 서픽스로 사용하도록 Knative Serving을 자동으로 구성하는 default-domain이라는 Kubernetes 작업을 제공합니다.

sslip.io는 사용자가 IP 주소 대신 사용자 지정 도메인 이름을 사용하여 장치에 액세스할 수 있도록 하는 동적 DNS(도메인 이름 시스템) 서비스입니다. sslip.io를 사용하면 복잡한 IP 주소를 기억할 필요 없이 원격으로 장치에 대한 사용자 액세스가 향상됩니다.

기본 DNS 접미사를 구성하려면 다음 명령을 실행해야 합니다.

  1. kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-default-domain.yaml

다음 출력을 받게 됩니다.

Output
job.batch/default-domain configured service/default-domain-service configured

Magic DNS 서비스를 실행하는 데 필요한 리소스가 성공적으로 구성되었습니다.

참고: 원하는 경우 도메인을 추가할 수도 있지만 이 문서의 범위를 벗어납니다. DNS 제공자(예: Cloud DNS 또는 Route53)를 설정하고 Knative 클러스터의 IP 주소에 맵핑되는 Knative 인그레스 게이트웨이에 대한 A 레코드를 작성해야 합니다. 그런 다음 생성한 DNS 영역 및 A 레코드를 사용하도록 Knative 수신 게이트웨이 구성을 업데이트합니다. Knative 제공 도메인에 액세스하고 인그레스 게이트웨이로 확인되는지 확인하여 DNS 구성을 테스트할 수 있습니다.

이제 Kubernetes 클러스터에 Knative Serving을 성공적으로 설치했습니다. 이제 Kubernetes 클러스터에서 Knative Serving을 사용하여 서버리스 워크로드를 배포할 수 있습니다.

3단계 - 서버리스 워크로드 배포

이 단계에서는 현재 Kubernetes 클러스터에서 실행 중인 Knative 위에 서버리스 워크로드를 배포합니다. 전제 조건의 일부로 생성한 Node.js 애플리케이션을 사용합니다.

계속하기 전에 새 네임스페이스를 생성하여 서버리스 워크로드를 배포합니다. 다음 명령을 실행하여 이를 수행할 수 있습니다.

  1. kubectl create namespace serverless-workload

이 명령은 serverless-workload라는 새 네임스페이스를 생성합니다.

다음 출력을 받아야 합니다.

Output
namespace/serverless-workload configured

출력은 네임스페이스가 성공적으로 생성되었음을 확인합니다.

Knative Serving은 Service라는 사용자 지정 리소스를 사용하여 서버리스 워크로드를 배포하고 관리합니다. Service 리소스는 Knative Serving API에 의해 정의됩니다.

Service 리소스를 생성하거나 수정하면 Knative Serving이 자동으로 새로운 Revision을 생성합니다. 개정은 워크로드의 특정 시점 스냅샷입니다.

개정이 생성될 때마다 트래픽은 경로에 의해 새 개정으로 라우팅됩니다. Knative Serving은 각 서비스에 대한 Route를 자동으로 생성합니다. 경로의 도메인 이름을 사용하여 워크로드에 액세스할 수 있습니다.

Knative에서 서버리스 워크로드를 배포하려면 Service 리소스를 생성해야 합니다. 다음 두 가지 방법으로 이를 달성할 수 있습니다.

  • 공식 Knative CLI 도구인 kn 사용
  • kubectl 명령줄 도구를 사용하여 Kubernetes 클러스터에 YAML 파일을 적용합니다.

다음 하위 섹션에서는 이러한 각 방법을 사용합니다.

옵션 1 — Knative CLI 사용

Knative CLI인 kn은 Knative와 상호작용할 수 있는 명령행 인터페이스입니다.

먼저 최신 버전의 Knative CLI 바이너리를 다운로드하여 kn을 설치합니다.

  1. wget https://github.com/knative/client/releases/download/knative-v1.8.1/kn-linux-amd64

wget 명령은 도구를 검색합니다.

그런 다음 바이너리를 kn이라는 폴더로 이동합니다.

  1. mv kn-linux-amd64 kn

그런 다음 다음 명령을 사용하여 실행 가능하게 만드십시오.

  1. chmod +x kn

마지막으로 실행 가능한 바이너리 파일을 PATH의 디렉터리로 이동합니다.

  1. cp kn /usr/local/bin/

kn이 설치되었는지 확인합니다.

  1. kn version

다음과 유사한 출력이 표시됩니다.

Output
Version: v1.8.1 Build Date: 2022-10-20 16:09:37 Git Revision: 1db36698 Supported APIs: * Serving - serving.knative.dev/v1 (knative-serving v1.8.0) * Eventing - sources.knative.dev/v1 (knative-eventing v1.8.0) - eventing.knative.dev/v1 (knative-eventing v1.8.0)

이 명령의 출력은 kn이 설치되었음을 나타냅니다.

kn을 사용하여 Node.js 애플리케이션을 배포하려면 kn service create 명령을 사용합니다. 이 명령에는 몇 가지 플래그가 포함됩니다.

  • --image는 배포하려는 컨테이너의 이미지를 지정합니다.
  • --port는 애플리케이션이 청취하는 포트를 지정합니다.
  • --name은 만들려는 서비스의 이름을 지정합니다.
  • --namespace는 워크로드를 배포하려는 네임스페이스를 지정합니다.

Node.js 애플리케이션을 배포하려면 다음 명령을 실행하고 강조 표시된 부분을 DockerHub 사용자 이름으로 업데이트합니다.

  1. kn service create node-service \
  2. --image your_dockerhub_username/nodejs-image-demo \
  3. --port 8080 \
  4. --namespace serverless-workload

kn service 명령은 port8080으로 설정되고 node-service라는 Knative 서비스를 생성합니다. >namespace 플래그가 serverless-workload로 설정되었습니다. image 플래그는 Dockerhub에 업로드된 애플리케이션 컨테이너의 위치를 나타냅니다.

다음 출력을 받아야 합니다.

Output
Creating service 'node-service' in namespace 'serverless-workload': 0.236s Configuration "node-service" is waiting for a Revision to become ready. 2.230s ... 2.311s Ingress has not yet been reconciled. 2.456s Waiting for load balancer to be ready 2.575s Ready to serve. Service 'node-service' created to latest revision 'node-service-00001' is available at URL: http://node-service.serverless-workload.138.197.231.61.sslip.io

이 출력은 Knative Service 생성 상태를 제공합니다. Service가 생성되면 Service에 연결된 Route의 URL을 찾을 수 있습니다.

다음 명령을 실행하여 Service 리소스가 생성되었는지 확인합니다.

  1. kn service list --namespace serverless-workload

kn service list 명령은 Kubernetes 클러스터의 특정 네임스페이스에 현재 Knative Serving으로 배포된 모든 서비스를 나열합니다. 이 명령을 사용하면 이름, 상태 및 URL을 포함하여 각 서비스에 대한 세부 정보에 액세스할 수 있습니다.

다음과 유사한 출력이 표시됩니다.

Output
NAME URL LATEST AGE CONDITIONS READY REASON node-service http://node-service.serverless-workload.138.197.231.61.sslip.io node-service-00001 88s 3 OK / 3 True

이 출력에서 이전에 실행한 kn service 명령으로 새 Knative Service가 생성되었는지 확인할 수 있습니다. 또한 서비스의 경로, 연령상태에 대한 URL도 찾을 수 있습니다.

이 섹션에서는 Knative CLI를 설치하고 이를 사용하여 Node.js 앱에 대한 서버리스 워크로드를 배포했습니다.

옵션 2 - YAML 파일을 사용하여 서비스 리소스 생성

리소스를 정의하는 YAML 파일을 생성하여 Service 리소스를 배포할 수도 있습니다. 이 방법은 워크로드의 버전 제어를 보장하는 데 유용합니다.

먼저 Dockerfile이 포함된 디렉터리에 하위 디렉터리를 만듭니다. 이 자습서에서는 하위 디렉터리에 knative라는 이름을 사용합니다. 폴더 만들기:

  1. mkdir knative

다음으로 knative 디렉토리에 service.yaml이라는 YAML 파일을 생성합니다.

  1. nano knative/service.yaml

새로 생성된 service.yaml 파일에서 다음 줄을 추가하여 Node.js 앱을 배포할 Service를 정의합니다.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: node-yaml-service
  namespace: serverless-workload
spec:
  template:
    metadata:
      name: node-yaml-service-v1
    spec:
      containers:
        - image: docker.io/your_dockerhub_username/nodejs-image-demo
          ports:
            - containerPort: 8080

Knative Service YAML 파일은 다음 정보를 지정합니다.

    첫 번째 metadata 섹션의
  • nameService 리소스의 name을 지정합니다.
  • namespace는 워크로드를 배포할 namespace를 지정합니다.
  • 첫 번째 spec 섹션의
  • nameRevisionname을 지정합니다.
  • 두 번째 spec 섹션의
  • image는 배포할 컨테이너의 image를 지정합니다.
  • containerPort는 애플리케이션이 수신하는 포트를 지정합니다.

강조 표시된 텍스트를 앱 및 시스템에 대해 선택한 정보와 DockerHub 사용자 이름으로 업데이트해야 합니다.

파일을 저장하고 닫습니다.

이제 다음 명령을 실행하여 Service 리소스를 배포할 수 있습니다.

  1. kubectl apply -f knative/service.yaml

다음 출력을 받아야 합니다.

Output
service.serving.knative.dev/node-yaml-service created

출력은 Service 리소스가 성공적으로 생성되었음을 나타냅니다.

다음 명령을 실행하여 Service 리소스가 생성되었는지 확인합니다.

  1. kn service list --namespace serverless-workload

kn service list 명령은 현재 Knative Serving과 함께 특정 네임스페이스에 배포된 모든 서비스를 나열합니다. 이 명령을 사용하면 각 서비스에 대한 세부 정보에 액세스할 수 있습니다.

다음 출력을 받아야 합니다.

Output
NAME URL LATEST AGE CONDITIONS READY REASON node-service http://node-service.serverless-workload.174.138.127.211.sslip.io node-service-00001 9d 3 OK / 3 True node-yaml-service http://node-yaml-service.serverless-workload.174.138.127.211.sslip.io node-yaml-service-v1 9d 3 OK / 3 True

이전에 실행한 Knative Service YAML 파일을 기반으로 새로운 Knative Service가 생성되었음을 확인할 수 있습니다. 이 섹션에서 node-yaml-service를 생성했습니다. Knative Route의 URL도 찾을 수 있습니다.

이 섹션에서는 YAML 파일을 사용하여 Node.js 앱에 대한 서버리스 워크로드를 생성했습니다.

이 단계에서는 kn CLI 도구와 YAML 파일을 모두 사용하여 Knative Service 리소스를 만들었습니다. 다음으로 Knative로 배포한 애플리케이션 워크로드에 액세스합니다.

4단계 - 애플리케이션 워크로드 액세스

이제 서버리스 워크로드를 배포했으므로 서버리스 워크로드의 일부로 생성된 Knative Route의 URL을 사용하여 액세스할 수 있습니다. Knative 경로는 수신 HTTP 트래픽이 특정 서비스 또는 애플리케이션으로 라우팅되는 방법을 정의합니다.

모든 Knative 경로 목록을 가져오려면 다음 명령을 실행하십시오.

  1. kn route list --namespace serverless-workload

kn route list 명령은 Kubernetes 클러스터의 특정 네임스페이스에 있는 모든 Knative 경로를 나열합니다.

다음과 유사한 출력이 표시됩니다.

Output
NAME URL READY node-service http://node-service.serverless-workload.138.197.231.61.sslip.io True node-yaml-service http://node-yaml-service.serverless-workload.138.197.231.61.sslip.io True

Knative Routes에 대해 생성된 URL을 사용하여 모든 것이 예상대로 작동하는지 확인합니다.

브라우저에서 URL 중 하나를 엽니다. 브라우저에서 사이트에 액세스하면 Node 앱의 랜딩 페이지가 로드됩니다.

Kubernetes 클러스터에서 Knative를 사용하여 서버리스 워크로드를 성공적으로 배포했습니다.

결론

이 튜토리얼에서는 Knative를 사용하여 서버리스 워크로드를 배치했습니다. kn CLI 도구를 사용하고 YAML 파일을 통해 Knative Service 리소스를 만들었습니다. 이 리소스는 Route URL을 사용하여 액세스한 Kubernetes 클러스터에 Node.js 애플리케이션을 배포했습니다.

Knative 설명서와 같이 Knative가 제공하는 기능에 대한 자세한 내용입니다.

DOKS(DigitalOcean Kubernetes)로 계속 구축하려면 Kubernetes 지원 가이드를 참조하세요.