파드와 파드템플릿

이 부분은 모범사례 가이드의 일부로서 차트 매니페스트에 있는 파드와 파드템플릿 부분의 형식을 논한다.

파드템플릿을 사용하는 리소스들(일부)은 다음과 같다.

  • 디플로이먼트(Deployment)
  • 레플리케이션컨트롤러(ReplicationController)
  • 레플리카셋(ReplicaSet)
  • 데몬셋(DaemonSet)
  • 스테이트풀셋(StatefulSet)

이미지

컨테이너 이미지는 고정된 태그나 이미지의 SHA를 사용해야 한다. latest, head, canary 등 "유동적인" 목적으로 고안된 태그를 사용해서는 안된다.

이미지를 쉽게 교체하기 위해 values.yaml 파일 내에 이미지를 정의할 수 있다.

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

values.yaml 내에서 이미지와 태그를 각각의 필드로 정의할 수도 있다.

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

ImagePullPolicy

deployment.yaml

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

values.yaml

image:
  pullPolicy: IfNotPresent

라고 하면 그에 따라 helm createimagePullPolicy 기본값으로 IfNotPresent을 설정하게 된다.

비슷하게, 쿠버네티스에서도 따로 정의하지 않더라도 imagePullPolicy의 기본값은 IfNotPresent이 된다. IfNotPresent 외에 다른 값을 사용하려면, values.yaml에 있는 값을 원하는 값으로 바꾸면 된다.

파드템플릿에는 셀렉터가 선언되어야 한다

모든 파드템플릿 섹션에는 셀렉터를 지정해야 한다. 예를 들면,

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

위의 것은 잘된 사례인데, 셋(set)과 파드 사이에 관계가 맺어졌기 때문이다.

이것은 디플로이먼트와 같은 셋(set)의 경우에 더욱 중요하다. 관계가 맺어져 있지 않다면, 모든 레이블들이 매칭되는 파드 선택에 사용되며, 버전이나 릴리스 날짜와 같이 변경되는 레이블을 사용하는 경우 깨질 수 있다.