이 페이지에서는 Knative serving에 새 서비스 및 새 버전을 배포하는 방법을 설명합니다.
시작하기 전에
Google Cloud CLI를 사용하려면 먼저 명령줄 도구를 설정하고 구성해야 합니다.
GKE 클러스터에 연결
Knative serving에 서비스를 배포하려면 먼저 로그인하여 GKE 클러스터에 연결해야 합니다.
GKE 클러스터에 연결하는 방법 및 추가 옵션에 대한 자세한 내용은 다음을 참조하세요.
배포 시 필요한 권한
serving.knative.dev
apiGroup 및 Service
kind에 대한 만들기, 업데이트, 삭제 권한이 필요하고 다음 Identity and Access Management 역할 중 하나가 있어야 합니다.
배포할 수 있는 이미지
배포할 수 있는 컨테이너 이미지에는 크기 제한이 적용되지 않습니다.
Docker Hub와 같이 모든 Container Registry의 컨테이너를 사용할 수 있습니다. Container Registry 또는 Artifact Registry와 다른 레지스트리에서 가져온 비공개 이미지를 배포하기 위해서는 다른 Container Registry에서 가져온 비공개 컨테이너 이미지 배포를 참조하세요.
새 서비스 배포
태그(예: gcr.io/my-project/my-image:latest
) 또는 정확한 다이제스트(예: gcr.io/my-project/my-image@sha256:41f34ab970ee...
)로 컨테이너 이미지를 지정할 수 있습니다.
서비스에 처음 배포하면 첫 번째 버전이 생성됩니다. 버전은 변경할 수 없습니다. 컨테이너 이미지 태그로 배포를 수행할 때는 이것이 다이제스트로 확인되고, 버전에는 항상 이 특정 다이제스트가 제공됩니다.
Google Cloud Console, Google Cloud CLI 또는 YAML 구성 파일을 사용하여 컨테이너를 배포할 수 있습니다.
선택한 도구 사용에 관한 안내를 보려면 해당 탭을 클릭하세요.
기본 gcloud
위치 구성
이전에 Google Cloud CLI의 default
구성에서 위치를 구성한 경우 gcloud
명령어는 기본적으로 다음 값을 사용합니다.
compute/region
compute/zone
run/cluster
run/cluster_location
run/platform
run/region
다음 gcloud
config 명령어를 실행하여 default
구성 설정을 확인합니다.
gcloud config configurations describe default
콘솔
컨테이너 이미지를 배포하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 Knative serving으로 이동합니다.
서비스 만들기를 클릭하여 서비스 만들기 페이지를 표시합니다.
다음 안내를 따라 양식을 작성하세요.
드롭다운 메뉴에서 서비스에 사용 가능한 GKE 클러스터 중 하나를 선택합니다.
원하는 서비스 이름을 입력합니다. 서비스 이름은 리전 및 프로젝트 또는 클러스터별로 고유해야 합니다. 서비스 이름을 나중에 변경할 수 없습니다.
연결에서 다음 안내를 따르세요.
- 다른 Knative serving 서비스 또는 클러스터에서 Istio를 사용하는 서비스로만 액세스를 제한하려면 내부를 선택합니다.
- 서비스에 대한 외부 액세스를 허용하려면 외부를 선택합니다.
서비스 연결 설정 변경에 설명된 것처럼 언제든지 연결 옵션을 변경할 수 있습니다.
서비스 만들기 양식의 두 번째 페이지로 이동하려면 다음을 클릭합니다.
다음 안내를 따라 양식을 작성하세요.
Knative serving이 사용 설정된 클러스터에 서비스를 배포했습니다.
명령줄
컨테이너 이미지를 배포하려면 다음 안내를 따르세요.
gcloud run deploy
명령어를 실행합니다.gcloud run deploy SERVICE --image IMAGE_URL
SERVICE를 배포하려는 서비스 이름으로 바꿉니다. 지정된 서비스가 없으면 새 서비스가 생성됩니다.
IMAGE_URL을 컨테이너 이미지에 대한 참조(예:
gcr.io/cloudrun/hello
)로 바꿉니다.추가 배포 옵션은 다음과 같습니다.
기본값 이외의 네임스페이스에 배포하려면
--namespace
매개변수를 사용하여 네임스페이스를 지정해야 합니다.기본 구성이 아닌 다른 위치에 배포하려면
--cluster
및--cluster-location
매개변수를 사용하여 클러스터의name
및location
을 지정해야 합니다.gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
서비스 연결 설정 변경에 설명된 대로
--connectivity
플래그로 연결 옵션을 설정하여 내부 또는 외부 액세스를 지정할 수 있습니다.VMware용 Knative serving의 경우
--kubeconfig
매개변수를 포함하고 구성 파일을 지정해야 합니다.gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE
배포가 완료될 때까지 기다립니다. 성공적으로 완료되면 배포된 서비스의 URL이 포함된 성공 메시지가 표시됩니다.
YAML
YAML
파일에 서비스 사양을 저장한 후 Google Cloud CLI를 사용하여 배포할 수 있습니다.
다음 내용으로 새
service.yaml
파일을 만듭니다.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
바꾸기
- SERVICE를 Knative serving 서비스의 이름으로 바꿉니다.
- IMAGE를 컨테이너 이미지의 URL로 바꿉니다.
또한 환경 변수 또는 메모리 제한과 같은 추가 구성을 지정할 수 있습니다.
다음 명령어를 사용하여 새 서비스를 배포합니다.
gcloud run services replace service.yaml
기존 서비스의 새 버전 배포
Google Cloud 콘솔, gcloud
명령줄 또는 YAML 구성 파일을 사용하여 새 버전을 배포할 수 있습니다.
구성 설정을 변경하면 컨테이너 이미지가 변경되지 않아도 새 버전이 생성됩니다. 생성된 각 버전은 변경할 수 없습니다.
선택한 도구 사용에 관한 안내를 보려면 해당 탭을 클릭하세요.
콘솔
기존 서비스의 새 버전을 배포하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 Knative serving으로 이동합니다.
서비스 목록에서 업데이트할 서비스를 찾고 이를 클릭하여 해당 서비스의 세부정보를 엽니다.
새 버전 수정 및 배포를 클릭합니다. 그러면 버전 배포 양식이 표시됩니다.
필요한 경우 배포하려는 새 컨테이너 이미지 URL을 제공합니다.
필요할 경우 다음을 설정합니다.
모든 트래픽을 새 버전으로 전송하려면 라벨이 이 버전을 즉시 제공으로 표시된 체크박스를 선택합니다. 새 버전을 점진적으로 출시하려면 이 체크박스를 선택 해제합니다. 그러면 트래픽이 새 버전으로 전송되지 않도록 배포가 구성됩니다. 배포 후 점진적 출시 안내를 따릅니다.
배포를 클릭하고 배포가 완료될 때까지 기다립니다.
명령줄
컨테이너 이미지를 배포하려면 다음 안내를 따르세요.
gcloud run services update
명령어를 실행합니다.gcloud run services update SERVICE --image IMAGE_URL
- 각 버전에 버전 서픽스가 자동으로 할당됩니다. 자체 버전 서픽스를 지정하려면 --revision-suffix 매개변수를 추가합니다.
SERVICE를 배포하려는 서비스 이름으로 바꿉니다. 지정된 서비스가 없으면 새 서비스가 생성됩니다.
IMAGE_URL을 컨테이너 이미지에 대한 참조(예:
gcr.io/cloudrun/hello
)로 바꿉니다.추가 배포 옵션은 다음과 같습니다.
기본값 이외의 네임스페이스에 배포하려면
--namespace
매개변수를 사용하여 네임스페이스를 지정해야 합니다.기본 구성이 아닌 다른 위치에 배포하려면
--cluster
및--cluster-location
매개변수를 사용하여 클러스터의name
및location
을 지정해야 합니다.gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
서비스 연결 설정 변경에 설명된 대로
--connectivity
플래그로 연결 옵션을 설정하여 내부 또는 외부 액세스를 지정할 수 있습니다.VMware용 Knative serving의 경우
--kubeconfig
매개변수를 포함하고 구성 파일을 지정해야 합니다.gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE
배포가 완료될 때까지 기다립니다. 성공적으로 완료되면 배포된 서비스의 URL이 포함된 성공 메시지가 표시됩니다.
YAML
--format=export
플래그를 사용하여 gcloud run services describe
명령어로 YAML 파일에 기존 서비스 구성을 다운로드할 수 있습니다.
그런 다음 gcloud run services replace
명령어로 YAML 파일을 수정하고 변경사항을 배포할 수 있습니다.
지정된 속성만 수정해야 합니다.
서비스 구성을 로컬 작업공간의
service.yaml
파일에 다운로드합니다.gcloud run services describe SERVICE --format export > service.yaml
SERVICE를 Knative serving 서비스의 이름으로 바꿉니다.
로컬 파일에서
spec.template
의 모든 하위 속성에 있는 버전 설정을 업데이트합니다.새 버전을 배포합니다.
gcloud run services replace service.yaml
다른 Google Cloud 프로젝트의 이미지 배포
올바른 IAM 권한을 설정한 경우 다른 Google Cloud 프로젝트에서 가져온 컨테이너 이미지를 배포할 수 있습니다.
Google Cloud 콘솔에서 Knative serving 서비스에 대한 프로젝트를 엽니다.
서비스 계정 정보를 가져옵니다.
Google Cloud의 클러스터에 대해 Compute Engine 기본 서비스 계정의 이메일을 복사합니다. 여기에는 @developer.gserviceaccount.com 서픽스가 포함됩니다.
다른 클러스터의 경우 Google Cloud 서비스 계정을 만들고 사용자 인증 정보를 다운로드합니다. 이 사용자 인증 정보를 Kubernetes 서비스 계정의 기본값
imagePullSecrets
로 추가합니다.
사용하려는 Container Registry를 소유하는 프로젝트를 엽니다.
추가를 클릭하여 새로운 주 구성원을 추가합니다.
새로운 주 구성원 텍스트 상자에 이전에 복사한 서비스 계정의 이메일을 붙여넣습니다.
역할 선택 드롭다운 목록에서 레지스트리에서 읽을 역할을 선택합니다.
- Artifact Registry(Artifact Registry의 gcr.io 저장소 포함): Artifact Registry -> Artifact Registry 리더
- Container Registry: 스토리지 -> 스토리지 객체 뷰어
Knative serving 서비스가 포함된 프로젝트에 컨테이너 이미지를 배포합니다.
보안 강화를 위해 액세스 권한 부여를 제한할 수 있습니다.
- Artifact Registry: 컨테이너 이미지를 저장하는 저장소에 대한 역할을 부여합니다.
- Container Registry: 컨테이너 이미지를 저장하는 Cloud Storage 버킷에 대한 역할을 부여합니다.
다른 Container Registry에서 가져온 비공개 컨테이너 이미지 배포
이 섹션에서는 임의의 비공개 레지스트리에서 가져온 컨테이너 이미지를 Knative serving에 배포하기 위해 올바른 권한을 설정하는 방법을 설명합니다. 컨테이너 이미지에 액세스하기 위해서는 비공개 Container Registry에 사용자 인증 정보가 필요합니다. 클러스터와 동일한 프로젝트에서 Container Registry(지원 중단됨) 또는 Artifact Registry로부터 비공개 컨테이너 이미지를 배포하기 위해서는 이 단계를 수행할 필요가 없습니다.
비공개 컨테이너 이미지를 배포하기 위해서는 imagePullSecret
유형의 Kubernetes 보안 비밀을 만들고 이를 서비스 계정과 연결해야 합니다.
container-registry
라는imagePullSecret
보안 비밀을 만듭니다.kubectl create secret docker-registry container-registry \ --docker-server=DOCKER_REGISTRY_SERVER \ --docker-email=REGISTRY_EMAIL \ --docker-username=REGISTRY_USER \ --docker-password=REGISTRY_PASSWORD
- DOCKER_REGISTRY_SERVER를 비공개 레지스트리 FQDN(예: Container Registry의 경우 https://gcr.io/ 또는 DockerHub의 경우 https://hub.docker.com)으로 바꿉니다.
- REGISTRY_EMAIL을 이메일로 바꿉니다.
REGISTRY_USER를 Container Registry 사용자 이름으로 바꿉니다.
Container Registry 또는 Artifact Registry를 사용 중이고 단기 액세스 토큰을 전달하는 대신 장기 사용자 인증 정보를 저장하고 가져오려면 인증 방법: JSON 키 파일을 참조하세요.
REGISTRY_PASSWORD를 Container Registry 비밀번호로 바꿉니다.
기본 서비스 계정을 엽니다.
kubectl edit serviceaccount default --namespace default
Kubernetes 클러스터의 모든 네임스페이스에는
default
라고 부르는 기본 서비스 계정이 있습니다. Knative serving 서비스를 배포할 때 별도 지정하지 않는 한 이 기본 서비스 계정을 사용하여 컨테이너 이미지를 가져옵니다.새로 생성된
imagePullSecret
보안 비밀을 기본 서비스 계정에 추가합니다.imagePullSecrets: - name: container-registry
서비스 계정은 다음과 같이 표시됩니다.
apiVersion: v1 kind: ServiceAccount metadata: name: default namespace: default ... secrets: - name: default-token-zd84v # The secret we just created: imagePullSecrets: - name: container-registry
이제 현재 default
네임스페이스에 생성되는 모든 새 Pod에 imagePullSecret
보안 비밀이 정의됩니다.
자동 사이드카 삽입을 사용 설정하여 배포
Istio 사이드카 삽입을 사용 설정하여 서비스를 배포하려면 Cloud Service Mesh 문서에서 자동 사이드카 삽입 사용 설정을 참조하세요.
내부 네트워크에서 서비스 배포
내부 네트워크에 서비스를 배포하려면 비공개 내부 네트워크를 설정해야 합니다.
다음 단계
새 서비스를 배포한 후에는 다음을 수행할 수 있습니다.
- 점진적 출시, 버전 롤백, 트래픽 마이그레이션
- 서비스 로그 보기
- 서비스 성능 모니터링
- 서비스 구성. 예를 들어 메모리 한도를 설정하거나, 환경 변수를 설정하거나, 동시성을 변경합니다.
- 관리:
Cloud Build 트리거를 사용하여 Knative serving 서비스의 빌드 및 배포를 자동화할 수 있습니다.