4.4. 트래픽 분할
4.4.1. 트래픽 분할 개요 링크 복사링크가 클립보드에 복사되었습니다!
Knative 애플리케이션에서 트래픽 분할을 생성하여 트래픽을 관리할 수 있습니다. 트래픽 분할은 Knative 서비스에서 관리하는 경로의 일부로 구성됩니다.
경로를 구성하면 요청을 다른 버전의 서비스로 보낼 수 있습니다. 이 라우팅은 Service
오브젝트의 트래픽
사양에 따라 결정됩니다.
트래픽
사양 선언은 각각 전체 트래픽의 일부를 처리하는 하나 이상의 버전으로 구성됩니다. 각 버전으로 라우팅되는 트래픽의 백분율은 Knative 검증에서 보장되는 최대 100%를 추가해야 합니다.
트래픽
사양에 지정된 버전은 리버전이라는 수정된 버전이거나 서비스의 모든 버전 목록 헤드를 추적하는 "latest" 버전을 가리킬 수 있습니다. "latest" 버전은 새 버전이 생성되는 경우 업데이트하는 부동 참조 유형입니다. 각 버전에는 해당 버전에 대한 추가 액세스 URL을 생성하는 태그가 연결되어 있을 수 있습니다.
다음을 통해 트래픽 사양을
수정할 수 있습니다.
-
Service
오브젝트의 YAML을 직접 편집합니다. -
Knative(
kn
) CLI--traffic
플래그 사용 - AWS 웹 콘솔에서 Red Hat OpenShift Service 사용.
Knative 서비스를 생성할 때 기본 traffic
사양 설정이 없습니다.
4.4.2. 트래픽 사양 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예에서는 traffic
의 100%가 서비스의 최신 버전으로 라우팅되는 트래픽 사양을 보여줍니다. status
에서 latestRevision
의 최신 버전의 이름을 볼 수 있습니다.
다음 예에서는 traffic
의 100%가 current
로 태그가 지정된 버전으로 라우팅되고 해당 버전의 이름이 example-service
로 지정된 트래픽 사양을 보여줍니다. 트래픽이 라우팅되지 않더라도 latest
로 태그된 버전을 사용할 수 있습니다.
다음 예제에서는 traffic
사양의 버전 목록을 확장하여 여러 버전으로 트래픽을 분할하는 방법을 보여줍니다. 이 예에서는 트래픽의 50%를 current
태그로 태그된 버전에 전송하고 트래픽의 50%를 candidate
로 태그된 버전에 보냅니다. 트래픽이 라우팅되지 않더라도 latest
로 태그된 버전을 사용할 수 있습니다.
4.4.3. Knative CLI를 사용하여 트래픽 분할 링크 복사링크가 클립보드에 복사되었습니다!
Knative(kn
) CLI를 사용하여 트래픽 분할을 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스가 제공됩니다. kn service update
명령을 사용하여 서비스 버전 간에 트래픽을 분할할 수 있습니다.
4.4.3.1. Knative CLI를 사용하여 트래픽 분할 생성 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn
) CLI가 설치되어 있습니다. - Knative 서비스가 생성되어 있습니다.
절차
표준
kn service update
명령과 함께--traffic
태그를 사용하여 서비스 버전 및 라우팅하려는 트래픽의 백분율을 지정합니다.명령 예
kn service update <service_name> --traffic <revision>=<percentage>
$ kn service update <service_name> --traffic <revision>=<percentage>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
-
<service_name>
은 트래픽 라우팅을 구성하려는 Knative 서비스의 이름입니다. -
<revision>
은 일정 비율의 트래픽을 수신하도록 구성하려는 버전입니다. 버전 이름 또는--tag
플래그를 사용하여 버전에 할당한 태그를 지정할 수 있습니다. -
<percentage
>는 지정된 버전으로 보낼 트래픽의 백분율입니다.
-
선택 사항:
--traffic
플래그는 하나의 명령으로 여러 번 지정할 수 있습니다. 예를 들어 버전이@latest
로 태그되고stable
이라는 버전이 있는 경우 다음과 같이 각 버전으로 분할할 트래픽의 백분율을 지정할 수 있습니다.명령 예
kn service update example-service --traffic @latest=20,stable=80
$ kn service update example-service --traffic @latest=20,stable=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 리버전이 여러 개 있고 마지막 버전으로 분할해야 하는 트래픽의 백분율을 지정하지 않으면
--traffic
플래그가 이 값을 자동으로 계산할 수 있습니다. 예를 들어example
이라는 세 번째 버전이 있고 다음 명령을 사용합니다.명령 예
kn service update example-service --traffic @latest=10,stable=60
$ kn service update example-service --traffic @latest=10,stable=60
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 트래픽의 나머지 30%는 지정되지 않은 경우에도
예제
버전으로 나뉩니다.
4.4.4. 트래픽 분할을 위한 CLI 플래그 링크 복사링크가 클립보드에 복사되었습니다!
Knative(kn
) CLI는 kn service update
명령의 일부로 서비스의 트래픽 블록에서 트래픽 작업을 지원합니다.
4.4.4.1. Knative CLI 트래픽 분할 플래그 링크 복사링크가 클립보드에 복사되었습니다!
다음 테이블에는 트래픽 분할 플래그, 값 형식, 플래그에서 수행하는 작업이 요약되어 있습니다. 반복 열은 kn service update
명령에서 특정 플래그 값을 반복할 수 있는지를 나타냅니다.
플래그 | 값 | 작업 | 반복 |
---|---|---|---|
|
|
| 예 |
|
|
| 예 |
|
|
최신 준비 버전에 | 아니요 |
|
|
| 예 |
|
|
최근 준비된 버전에 | 아니요 |
|
|
버전에서 | 예 |
4.4.4.1.1. 여러 플래그 및 우선 순위 링크 복사링크가 클립보드에 복사되었습니다!
모든 트래픽 관련 플래그는 단일 kn service update
명령을 사용하여 지정할 수 있습니다. kn
은 이러한 플래그의 우선순위를 정의합니다. 명령을 사용할 때 지정된 플래그의 순서는 고려하지 않습니다.
kn
에 의해 평가되는 플래그의 우선순위는 다음과 같습니다.
-
--untag
: 이 플래그가 있는 참조된 버전은 모두 트래픽 블록에서 제거됩니다. -
--tag
: 버전에는 트래픽 블록에 지정된 대로 태그가 지정됩니다. -
--traffic
: 참조된 버전에는 트래픽 분할의 일부가 할당됩니다.
버전에 태그를 추가한 다음 설정한 태그에 따라 트래픽을 분할할 수 있습니다.
4.4.4.1.2. 개정버전 사용자 정의 URL 링크 복사링크가 클립보드에 복사되었습니다!
kn service update
명령을 사용하여 서비스에 --tag
플래그를 할당하면 서비스를 업데이트할 때 생성되는 버전에 대한 사용자 정의 URL이 생성됩니다. 사용자 정의 URL은 https://<tag>-<service_name>-<namespace>.<domain
> 또는 http://<tag>-<service_name>-<namespace>.<domain
> 패턴을 따릅니다.
--tag
및 --untag
플래그는 다음 구문을 사용합니다.
- 하나의 값이 필요합니다.
- 서비스의 트래픽 블록에 있는 고유한 태그를 나타냅니다.
- 하나의 명령에서 여러 번 지정할 수 있습니다.
4.4.4.1.2.1. 예: 태그를 버전에 할당 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 latest
태그를 example-revision
이라는 버전에 할당합니다.
kn service update <service_name> --tag @latest=example-tag
$ kn service update <service_name> --tag @latest=example-tag
4.4.4.1.2.2. 예: 버전에서 태그 제거 링크 복사링크가 클립보드에 복사되었습니다!
--untag
플래그를 사용하여 사용자 정의 URL을 제거하도록 태그를 제거할 수 있습니다.
개정 버전에 해당 태그가 제거되고 트래픽의 0%가 할당되면 개정 버전이 트래픽 블록에서 완전히 제거됩니다.
다음 명령은 example-revision
이라는 버전에서 모든 태그를 제거합니다.
kn service update <service_name> --untag example-tag
$ kn service update <service_name> --untag example-tag
4.4.5. 버전 간 트래픽 분할 링크 복사링크가 클립보드에 복사되었습니다!
서버리스 애플리케이션을 생성하면 애플리케이션이 AWS 웹 콘솔의 Red Hat OpenShift Service에 있는 개발자 화면의 토폴로지 보기에 표시됩니다. 애플리케이션 버전은 노드에서 나타내며 Knative 서비스는 노드 주변의 사각형으로 표시됩니다.
코드 또는 서비스 구성을 새로 변경하면 지정된 시간에 코드 스냅샷인 새 버전이 생성됩니다. 서비스의 경우 필요에 따라 서비스를 분할하고 다른 버전으로 라우팅하여 서비스 버전 간 트래픽을 관리할 수 있습니다.
4.4.5.1. AWS 웹 콘솔에서 Red Hat OpenShift Service를 사용하여 버전 간 트래픽 관리 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
- AWS 웹 콘솔의 Red Hat OpenShift Service에 로그인했습니다.
절차
토폴로지 보기에서 애플리케이션의 다양한 버전 간 트래픽을 분할하려면 다음을 수행합니다.
- Knative 서비스를 클릭하여 측면 패널에서 개요를 확인합니다.
리소스 탭을 클릭하여 서비스의 버전 및 경로로 구성된 목록을 확인합니다.
그림 4.1. 서버리스 애플리케이션
- 측면 패널 상단에 S 아이콘으로 표시된 서비스를 클릭하여 서비스 세부 정보 개요를 확인합니다.
-
YAML 탭을 클릭하고 YAML 편집기에서 서비스 구성을 수정한 다음 저장을 클릭합니다. 예를 들면
timeoutseconds
를 300에서 301로 변경합니다. 이러한 구성 변경으로 인해 새 버전이 트리거됩니다. 토폴로지 보기에 최신 버전이 표시되고 서비스의 리소스 탭에 두 가지 버전이 표시됩니다. 리소스 탭에서 트래픽 트래픽 배포 대화 상자를 확인합니다.
- 분할 필드에 두 버전의 분할 트래픽 백분율 부분을 추가합니다.
- 두 버전에 대한 사용자 정의 URL을 생성하도록 태그를 추가합니다.
저장을 클릭하여 토폴로지 보기에서 두 버전을 나타내는 두 노드를 확인합니다.
그림 4.2. 서버리스 애플리케이션의 버전
4.4.6. Blue-Green 전략을 사용하여 트래픽 회수 링크 복사링크가 클립보드에 복사되었습니다!
blue-green 배포 전략을 사용하여 프로덕션 버전에서 새 버전으로 트래픽을 안전하게 다시 라우팅할 수 있습니다.
4.4.6.1. blue-green 배포 전략을 사용하여 트래픽 라우팅 및 관리 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
OpenShift CLI(
oc
)를 설치합니다.
절차
- 애플리케이션을 Knative 서비스로 생성하고 배포합니다.
다음 명령의 출력을 확인하여 서비스를 배포할 때 생성된 첫 번째 버전의 이름을 찾습니다.
oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'
$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
oc get ksvc example-service -o=jsonpath='{.status.latestCreatedRevisionName}'
$ oc get ksvc example-service -o=jsonpath='{.status.latestCreatedRevisionName}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
example-service-00001
$ example-service-00001
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 YAML을 서비스
spec
에 추가하여 인바운드 트래픽을 버전으로 전송합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 얻은 URL 출력에서 앱을 볼 수 있는지 확인합니다.
oc get ksvc <service_name>
$ oc get ksvc <service_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
서비스의
template
사양에서 하나 이상의 필드를 수정하고 재배포하여 애플리케이션의 두 번째 버전을 배포합니다. 예를 들어 서비스의image
또는env
환경 변수를 수정할 수 있습니다. 서비스 YAML 파일을 적용하거나 Knative(kn
) CLI를 설치한 경우kn service update
명령을 사용하여 서비스를 재배포할 수 있습니다. 다음 명령을 실행하여 서비스를 재배포할 때 생성된 두 번째 최신 버전의 이름을 찾습니다.
oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'
$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이때 서비스의 첫 번째 버전과 두 번째 버전이 모두 배포되고 실행됩니다.
다른 모든 트래픽을 첫 번째 버전으로 전송하면서 두 번째 버전에 대한 새 테스트 끝점을 생성하도록 기존 서비스를 업데이트합니다.
테스트 끝점을 사용하여 업데이트된 서비스 사양의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow YAML 리소스를 다시 적용하여 이 서비스를 재배포하면 애플리케이션의 두 번째 버전이 준비됩니다. 기본 URL의 두 번째 버전으로 라우팅되는 트래픽이 없으며 Knative는 새로 배포된 버전을 테스트하기 위해
v2
라는 새 서비스를 생성합니다.다음 명령을 실행하여 두 번째 버전에 대한 새 서비스의 URL을 가져옵니다.
oc get ksvc <service_name> --output jsonpath="{.status.traffic[*].url}"
$ oc get ksvc <service_name> --output jsonpath="{.status.traffic[*].url}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 URL을 사용하여 트래픽을 라우팅하기 전에 애플리케이션의 새 버전이 예상대로 작동하는지 확인할 수 있습니다.
트래픽의 50%가 첫 번째 버전으로 전송되고 50%가 두 번째 버전으로 전송되도록 기존 서비스를 다시 업데이트합니다.
버전 간에 트래픽을 50/50으로 분할하는 업데이트된 서비스 사양 분할 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 트래픽을 새 버전의 앱으로 라우팅할 준비가 되면 두 번째 버전으로 트래픽의 100%를 보내도록 서비스를 다시 업데이트합니다.
두 번째 버전으로 모든 트래픽을 전송하는 업데이트된 서비스 사양의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 작은 정보버전을 롤백하지 않으려는 경우 첫 번째 버전을 트래픽의 0%로 설정하는 대신 제거할 수 있습니다. 라우팅할 수 없는 버전 오브젝트는 가비지 수집됩니다.
- 첫 번째 버전의 URL을 방문하여 이전 버전의 앱으로 더 이상 트래픽이 전송되지 않는지 확인합니다.