Pod와 PodTemplate

Pod와 PodTemplate (Pods and PodTemplates)

이 문서는 차트 매니페스트에서 Pod와 PodTemplate 부분을 포맷하는 방법을 논의해요. 이미지 태그, imagePullPolicy, 셀렉터 선언에 대한 규칙을 설명해요.

출처: 문서

본문

이 모범 사례 가이드의 이 부분은 차트 매니페스트에서 Pod와 PodTemplate 부분을 포맷하는 방법을 논의해요.

PodTemplate을 사용하는 리소스의 (완전하지 않은) 목록은 다음과 같아요:

  • Deployment

  • ReplicationController

  • ReplicaSet

  • DaemonSet

  • StatefulSet

이미지 (Images)

컨테이너 이미지는 고정된 태그나 이미지의 SHA를 사용해야 해요. latest, head, canary처럼 "부유(floating)"하도록 설계된 태그를 사용해서는 안 돼요.

이미지는 이미지를 교체하기 쉽도록 values.yaml 파일에 정의할 수 있어요.

image: {{ .Values.redisImage | quote }}

이미지와 태그는 두 개의 별도 필드로 values.yaml에 정의할 수 있어요:

image: "{{ .Values.redisImage }}:{{ .Values.redisTag }}"

ImagePullPolicy

helm createdeployment.yaml에서 다음과 같이 처리함으로써 imagePullPolicy를 기본적으로 IfNotPresent로 설정해요:

imagePullPolicy: {{ .Values.image.pullPolicy }}

그리고 values.yaml:

image:
  pullPolicy: IfNotPresent

마찬가지로 Kubernetes는 imagePullPolicy가 전혀 정의되지 않으면 기본값을 IfNotPresent로 설정해요. IfNotPresent가 아닌 다른 값을 원하면 values.yaml의 값을 원하는 값으로 업데이트하기만 하면 돼요.

PodTemplate은 셀렉터를 선언해야 해요 (PodTemplates Should Declare Selectors)

모든 PodTemplate 섹션은 셀렉터(selector)를 지정해야 해요. 예를 들어:

selector:
  matchLabels:
      app.kubernetes.io/name: MyName
template:
  metadata:
    labels:
      app.kubernetes.io/name: MyName

이것은 셋(set)과 pod 사이의 관계를 만들기 때문에 좋은 관행이에요.

하지만 Deployment 같은 셋에는 이것이 훨씬 더 중요해요. 이것이 없으면 label의 전체 집합이 일치하는 pod를 선택하는 데 사용되는데, 버전이나 릴리스 날짜처럼 변하는 라벨을 사용하면 깨질 수 있어요.

더 알아보기 (Learn more)