쿠버네티스 일반

쿠버네티스 베스트 프랙티스 레이블 및 헬름 레이블 적용

Jerry_이정훈 2024. 6. 17. 10:36
728x90

기존 쿠버네티스 스터디에서 새로운 멤버가 추가되어 이번에는 쿠버네티스 공식 문서로 스터디를 하고 있습니다. 관련 내용 중 k8s 공식 문서에 Recommended 레이블이 있어 해당 내용을 기반으로 현재 사용하고 있는 현황을 공유합니다.

 

쿠버네티스 공식 문서 - Recommended 레이블

https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/

 

Recommended Labels

You can visualize and manage Kubernetes objects with more tools than kubectl and the dashboard. A common set of labels allows tools to work interoperably, describing objects in a common manner that all tools can understand. In addition to supporting toolin

kubernetes.io

 

레이블 사용 목적

쿠버네티스에서 레이블은 여러 오브젝트를 효과적으로 찾고 관리하기 위한 중요한 도구입니다. 특정 이름을 미리 지정하여 원하는 객체를 빠르게 찾을 수 있습니다. 예를 들어, Loki 로그 검색 시 job 이름으로 검색하면 필요한 오브젝트의 로그를 신속하게 찾을 수 있습니다.

 

레이블 관리의 어려움

 

레이블을 모든 쿠버네티스 오브젝트에 일일이 입력하는 것은 매우 번거로운 작업입니다. 또한, 어떤 레이블을 선정할지 결정하는 것도 모호합니다. 

 

다행히도, 쿠버네티스 공식 문서에서 제공하는 베스트 프랙티스를 따르면 이러한 어려움을 완화할 수 있습니다. 더불어, Helm 차트를 사용하면 템플릿 기반으로 레이블을 더 쉽게 일괄 적용할 수 있습니다.

(헬름 차트 사용 방법 참조)

 

Helm 차트에서 레이블 사용 사례

 

Helm 차트에서 레이블을 설정하는 방법을 공유합니다. Helm 차트는 templates 디렉토리에 있는 _helpers.tpl 파일을 참조하여 전체 템플릿 오브젝트에 레이블을 적용합니다. (참고로 tpl 확장자는 “template”의 약자입니다.)

 

helpers.tpl 파일 위치

 

_helpers.tpl 파일의 내용

{{/*
Common labels
*/}}
{{- define "<CHARTNAME>.labels" -}}
helm.sh/chart: {{ include "<CHARTNAME>.chart" . }}
{{ include "<CHARTNAME>.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}

{{/*
Selector labels
*/}}
{{- define "<CHARTNAME>.selectorLabels" -}}
app.kubernetes.io/name: {{ include "<CHARTNAME>.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

 

위 레이블 관련 설정이 deployment.yaml 템플릿 파일에서 아래와 같이 적용됩니다.

labels:
  {{- include "<CHARTNAME>.labels" . | nindent 4 }}

selector:
  matchLabels:
    {{- include "<CHARTNAME>.selectorLabels" . | nindent 6 }}
template:
  metadata:
    {{- with .Values.podAnnotations }}
    annotations:
      {{- toYaml . | nindent 8 }}
    {{- end }}
    labels:
      {{- include "<CHARTNAME>.selectorLabels" . | nindent 8 }}

 

이렇게 쿠버네티스 공식 문서의 가이드에 따라 필요한 레이블을 _helpers.tpl 파일에 추가하여 전체 차트에 일관되게 적용할 수 있습니다.

 

아래는 Kubernetes 공식 문서의 레이블 설정입니다.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app.kubernetes.io/name: mysql
    app.kubernetes.io/instance: mysql-abcxyz
    app.kubernetes.io/version: "5.7.21"
    app.kubernetes.io/component: database
    app.kubernetes.io/part-of: wordpress
    app.kubernetes.io/managed-by: Helm

 

기본으로 제공하는 헬름 공식 차트에서 이미 instance 등이 적용되어 있어 추가 변경없이도 잘 사용하고 있습니다. 저는 app.kubernetes.io/componentapp.kubernetes.io/part-of 레이블을 사용하지 않고, name, instance, version, managed-by 레이블만 사용합니다. 각 회사의 필요에 따라 추가 레이블을 지정할 수 있습니다.

 

그럼 제가 실제 적용한 예시입니다.

  labels:
    app.kubernetes.io/instance: starc-admin-api-dev
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: admin-api
    app.kubernetes.io/version: 0.1.0
    argocd.argoproj.io/instance: starc-admin-api-dev
    helm.sh/chart: admin-api-0.1.0

 

정리

 

1. 베스트 프랙티스 레이블: 쿠버네티스 공식 문서를 참조하여 설정합니다.

2. 레이블 적용 방법: Helm 차트의 _helpers.tpl 파일을 활용하여 일괄 적용할 수 있어 편리합니다.

 

Helm 차트를 사용하여 레이블을 효과적으로 관리하면 쿠버네티스 오브젝트의 가독성과 유지보수성이 크게 향상됩니다. 공식 문서의 베스트 프랙티스를 따라 레이블을 적절히 설정하고, Helm의 템플릿 기능을 활용하면 레이블 관리가 훨씬 더 수월해집니다.

반응형