이 페이지에는 Knative serving 컨테이너의 주요 요구사항과 동작이 나와 있습니다.
지원 언어 및 이미지
컨테이너 이미지는 선택한 프로그래밍 언어로 작성된 코드를 실행하고 이 페이지에 나열된 제약조건을 준수하는 기본 이미지를 사용할 수 있습니다.
컨테이너 이미지의 실행 파일은 Linux 64비트용으로 컴파일되어야 합니다. Knative serving에서는 특히 Linux x86_64 ABI 형식을 지원합니다.
올바른 포트에서 요청 리슨
컨테이너는 요청이 전송되는 포트에서 0.0.0.0
에 대한 요청을 리슨해야 합니다. 기본적으로 요청은 8080
으로 전송되지만 원하는 포트로 요청을 전송하도록 Knative serving을 구성할 수 있습니다.
Knative serving 컨테이너 인스턴스 내에서 PORT
환경 변수 값은 항상 요청이 전송되는 포트를 반영합니다.
기본값은 8080
입니다.
전송 계층 암호화(TLS)
컨테이너가 전송 계층 보안을 직접 구현해서는 안 됩니다. TLS는 HTTPS 및 gRPC용 Knative serving에 의해 종료된 후 TLS 없이 컨테이너에 HTTP 또는 gRPC로 프록시됩니다.
응답
컨테이너 인스턴스는 컨테이너 인스턴스 시작 시간을 포함하여 요청을 받은 후 요청 제한 시간 설정에 지정된 시간 내에 응답을 보내야 합니다. 그러지 않으면 요청이 종료되고 504 오류가 반환됩니다.
환경 변수
다음 환경 변수는 실행 중인 컨테이너에 자동으로 추가됩니다.
이름 | 설명 | 예 |
---|---|---|
PORT |
HTTP 서버가 리슨하는 포트입니다. | 8080 |
K_SERVICE |
실행 중인 Knative serving 서비스의 이름입니다. | hello-world |
K_REVISION |
실행 중인 Knative serving 버전의 이름입니다. | hello-world.1 |
K_CONFIGURATION |
버전을 만든 Knative serving 구성의 이름입니다. | hello-world |
파일 시스템 액세스
컨테이너의 파일 시스템은 쓰기가 가능하고 다음과 같은 동작이 적용됩니다.
- 메모리 내 파일 시스템이므로 컨테이너 인스턴스의 메모리를 사용합니다.
- 파일 시스템에 쓴 데이터는 컨테이너 인스턴스가 중지되면 유지되지 않습니다.
컨테이너 인스턴스 수명 주기
수신 요청에 따라 서비스가 특정 수의 컨테이너 인스턴스로 자동 확장되며 각 인스턴스는 배포된 컨테이너 이미지를 실행합니다.
버전이 트래픽을 수신하지 않을 경우 구성된 최소 컨테이너 인스턴스 수로 축소됩니다(기본적으로 0개).
시작
컨테이너 인스턴스는 시작 후 4분 이내에 요청을 리슨해야 합니다. 이 시작 시간 동안 컨테이너 인스턴스에는 CPU가 할당됩니다.
계산 범위는 요청 범위로 지정됨
시작 후에는 요청 범위 내에서만 계산을 수행할 수 있어야 합니다. 컨테이너 인스턴스는 요청을 처리하지 않는 경우 할당된 CPU가 없기 때문입니다.
종료
컨테이너 인스턴스는 언제든지 종료할 수 있습니다.
컨테이너 인스턴스를 종료해야 하는 경우, 새로 추가되는 요청은 다른 인스턴스로 라우팅되고 현재 처리 중인 요청을 완료할 수 있는 시간이 제공됩니다.
그런 다음 컨테이너 인스턴스는 종료되기 전 10초 기간의 시작을 나타내는 SIGTERM
신호(SIGKILL
신호 포함)를 수신합니다.
이 기간에는 컨테이너 인스턴스에 CPU가 할당되고 요금이 청구됩니다.
컨테이너 인스턴스가 SIGTERM
신호를 포착하지 않으면 즉시 종료됩니다.
최소 컨테이너 인스턴스 수 구성 설정으로 인해 컨테이너 인스턴스를 유휴 상태로 유지해야 하는 경우가 아니라면 15분 이상 유휴 상태로 유지되지 않습니다.
컨테이너 인스턴스 리소스
컨테이너 인스턴스의 리소스 요청은 GKE 클러스터의 노드에 예약됩니다. 각 노드는 GKE 클러스터에서 사용할 수 있는 총 컴퓨팅 리소스 양을 공유합니다.
따라서 Knative serving 서비스에서 사용할 수 있는 컴퓨팅 리소스 양은 해당 노드에서 사용 가능한 리소스 양으로만 제한됩니다. 요청용 컴퓨팅 리소스 자세히 알아보기
예를 들어 컨테이너에 512MiB의 메모리를 할당하고 이 컨테이너가 8GiB의 메모리가 있는 노드 내의 유일한 pod에서 실행 중인 경우 이 컨테이너는 더 많은 RAM을 사용해 볼 수 있습니다.
CPU
기본적으로 큐 프록시 사이드카는 25milliCPU를 예약하며 Knative serving 서비스에서 사용할 수 있는 vCPU 양에 제한이 없습니다. 큐 프록시의 리소스 소비는 큐에 추가되는 요청 수와 요청 크기에 따라 다릅니다.
vCPU는 기본 하드웨어를 추상화한 형태로 구현되어 가변 CPU 플랫폼의 단일 하드웨어 하이퍼 스레드에 그에 상응하는 대략적인 CPU 시간을 제공합니다. 컨테이너 인스턴스는 여러 코어에서 동시에 실행될 수 있습니다. vCPU는 컨테이너 인스턴스 시작 및 요청 처리 중에만 할당되고 그러지 않으면 제한됩니다.
다른 vCPU 값을 할당하려면 CPU 할당 문서를 참조하세요.
메모리
기본적으로 큐 프록시 사이드카는 메모리를 예약하지 않으며 Knative serving 서비스에서 사용할 수 있는 메모리 양에 제한이 없습니다. 원하는 경우 Knative serving 서비스의 메모리 한도를 구성할 수 있습니다. GKE가 메모리를 처리하는 방식에 대한 자세한 내용은 할당 가능한 메모리 및 CPU 리소스를 참조하세요.
메모리의 일반적인 용도는 다음과 같습니다.
- 서비스 실행을 위해 메모리에 로드되는 코드
- 파일 시스템에 쓰기
- nginx 서버와 같이 컨테이너에서 실행되는 추가 프로세스
- PHP OpCache와 같은 인메모리 캐싱 시스템
- 요청당 메모리 사용량
동시 실행
각 Knative serving 컨테이너 인스턴스는 기본적으로 여러 번 동시 실행되도록 설정되며 각 컨테이너 인스턴스에서 동시에 요청을 두 개 이상 수신할 수 있습니다. 동시 실행을 설정하여 이를 변경할 수 있습니다.
컨테이너 인스턴스 샌드박스
Knative serving은 컨테이너 샌드박스를 사용하지 않습니다.
컨테이너 인스턴스 메타데이터 서버
Knative serving 컨테이너 인스턴스는 프로젝트 ID, 리전, 인스턴스 ID 또는 서비스 계정과 같은 컨테이너 인스턴스에 대한 세부정보를 검색하는 데 사용할 수 있는 메타데이터 서버를 노출합니다.
Metadata-Flavor: Google
헤더로 http://metadata.google.internal/
엔드포인트에 대한 간단한 HTTP 요청을 사용하여 메타데이터 서버에서 이 데이터에 액세스할 수 있습니다. 이때 클라이언트 라이브러리는 필요하지 않습니다. 자세한 내용은 메타데이터 가져오기를 참조하세요.
다음 표에는 사용 가능한 메타데이터 서버 정보 중 일부가 나와 있습니다.
경로 | 설명 |
---|---|
/computeMetadata/v1/project/project-id |
이 Knative serving 서비스의 프로젝트 ID입니다. |
/computeMetadata/v1/instance/region |
이 Knative serving 서비스의 리전입니다. |
/computeMetadata/v1/instance/id |
컨테이너 인스턴스의 고유 식별자입니다(로그에서도 확인 가능). |
/computeMetadata/v1/instance/service-accounts/default/token |
이 Knative serving 서비스의 런타임 서비스 계정 토큰을 생성합니다 |