개념

Edit This Page

런타임 클래스

FEATURE STATE: Kubernetes v1.12 alpha
This feature is currently in a alpha state, meaning:

  • The version names contain alpha (e.g. v1alpha1).
  • Might be buggy. Enabling the feature may expose bugs. Disabled by default.
  • Support for feature may be dropped at any time without notice.
  • The API may change in incompatible ways in a later software release without notice.
  • Recommended for use only in short-lived testing clusters, due to increased risk of bugs and lack of long-term support.

이 페이지는 런타임 클래스 리소스와 런타임 선택 메커니즘에 대해서 설명한다.

런타임 클래스

런타임 클래스는 파드의 컨테이너를 실행하는데 사용할 컨테이너 런타임 설정을 선택하기 위한 알파 특징이다.

셋업

초기 알파 특징이므로, 런타임 클래스 특징을 사용하기 위해서는 몇 가지 추가 셋업 단계가 필요하다.

  1. 런타임 클래스 특징 게이트 활성화(apiservers 및 kubelets에 대해서, 버전 1.12+ 필요)
  2. 런타임 클래스 CRD 설치
  3. CRI 구현(implementation)을 노드에 설정(런타임에 따라서)
  4. 상응하는 런타임 클래스 리소스 생성

1. 런타임 클래스 특징 게이트 활성화

특징 게이트 활성화에 대한 설명은 특징 게이트를 참고한다. RuntimeClass 특징 게이트는 apiservers kubelets에서 활성화되어야 한다.

2. 런타임 클래스 CRD 설치

런타임 클래스 CustomResourceDefinition (CRD)는 쿠버네티스 git 저장소의 애드온 디렉터리에서 찾을 수 있다. kubernetes/cluster/addons/runtimeclass/runtimeclass_crd.yaml

kubectl apply -f runtimeclass_crd.yaml을 통해서 해당 CRD를 설치한다.

3. CRI 구현을 노드에 설정

런타임 클래스와 함께 선택할 설정은 CRI 구현에 의존적이다. 사용자의 CRI 구현에 따른 설정 방법은 연관된 문서를 통해서 확인한다. 이것은 알파 특징이므로, 아직 모든 CRI가 다중 런타임 클래스를 지원하지는 않는다.

참고: 런타임 클래스는 클러스터 전체에 걸쳐 동질의 노드 설정 (모든 노드가 컨테이너 런타임에 준하는 동일한 방식으로 설정되었음을 의미)을 가정한다. 어떠한 이질성(다양한 설정)이라도 스케줄링 특징을 통해서 런타임 클래스와는 독립적으로 관리되어야 한다(파드를 노드에 할당하기 참고).

해당 설정은 상응하는 RuntimeHandler 이름을 가지며, 이는 런타임 클래스에 의해서 참조된다. 런타임 핸들러는 유효한 DNS 1123 서브도메인(알파-숫자 + -.문자)을 가져야 한다.

4. 상응하는 런타임 클래스 리소스 생성

3단계에서 셋업 한 설정은 연관된 RuntimeHandler 이름을 가져야 하며, 이를 통해서 설정을 식별할 수 있다. 각 런타임 핸들러(그리고 선택적으로 비어있는 "" 핸들러)에 대해서, 상응하는 런타임 클래스 오브젝트를 생성한다.

현재 런타임 클래스 리소스는 런타임 클래스 이름(metadata.name)과 런타임 핸들러 (spec.runtimeHandler)로 단 2개의 중요 필드만 가지고 있다. 오브젝트 정의는 다음과 같은 형태이다.

apiVersion: node.k8s.io/v1alpha1  # 런타임 클래스는 node.k8s.io API 그룹에 정의되어 있음
kind: RuntimeClass
metadata:
  name: myclass  # 런타임 클래스는 해당 이름을 통해서 참조됨
  # 런타임 클래스는 네임스페이스가 없는 리소스임
spec:
  runtimeHandler: myconfiguration  # 상응하는 CRI 설정의 이름임
참고: 런타임 클래스 쓰기 작업(create/update/patch/delete)은 클러스터 관리자로 제한할 것을 권장한다. 이것은 일반적으로 기본 설정이다. 더 자세한 정보는 권한 개요를 참고한다.

사용

클러스터를 위해서 런타임 클래스를 설정하고 나면, 그것을 사용하는 것은 매우 간단하다. 파드 스펙에 runtimeClassName를 명시한다. 예를 들면 다음과 같다.

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  runtimeClassName: myclass
  # ...

이것은 Kubelet이 지명된 런타임 클래스를 사용하여 해당 파드를 실행하도록 지시할 것이다. 만약 지명된 런타임 클래스가 없거나, CRI가 상응하는 핸들러를 실행할 수 없는 경우, 파드는 Failed 터미널 단계로 들어간다. 에러 메시지를 위해서는 상응하는 이벤트를 확인한다.

만약 명시된 runtimeClassName가 없다면, 기본 런타임 핸들러가 사용될 것이다. 기본 런타임 핸들러는 런타임 클래스 특징이 비활성화되었을 때와 동일하게 동작한다.

피드백