And Brain said,
Helm, 컨테이너 오케스트레이션을 위한 타륜 본문
Kubernetes는 yaml 파일들을 사용하여 간단하고 편리하게 컨테이너 오케스트레이션을 가능하게 합니다. 하지만 이를 위해 우리는 복잡한 yaml 파일들을 관리해야 합니다. 우리는 이마저도 불편합니다.(불편하시길 바랍니다. -개발자들은 불편해야 더 간편한 도구를 만들기에-)
Helm은 Kubernetes의 패키지 관리자로 간주됩니다. 여기서 '패키지'는 Helm에서 '차트'라고 부릅니다. Helm을 사용하면 Kubernetes 애플리케이션을 정의, 설치 및 업그레이드하는 것이 더 쉬워집니다.
Helm의 설치는 매우 간단합니다.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
Helm의 설치가 끝났다면,
helm create msa-chart
helm create 명령어로 여러분의 chart 를 만들어 줍니다. 저는 MSA 를 쿠버네티스로 배포할 것이기 때문에, msa-chart 로 만들겠습니다.
Helm chart의 디렉토리는 대략적으로 이렇게 될 것입니다.
msa-chart/
│
├── charts/
│
├── templates/
│ ├── discovery-deployment.yaml
│ ├── discovery-service.yaml
│ ├── apigateway-deployment.yaml
│ └── ... (다른 서비스들)
│
├── values.yaml
└── Chart.yaml
간단하게 디렉토리 내 파일들을 요약하자면,
Chart.yaml # 차트에 대한 정보를 가진 YAML 파일
values.yaml # 차트에 대한 기본 환경설정 값들
charts/ # 이 차트에 종속된 차트들을 포함하는 디렉터리
templates/ # values와 결합될 때, 유효한 쿠버네티스 manifest 파일들이 생성될 템플릿들의 디렉터리
이와 같습니다.
이제 각각의 YAML 파일들에 대해 알아보겠습니다. Helm 차트 공식 문서에 더 상세한 설명들이 있으니, 참고바랍니다. 여기서는 처음 Helm 차트를 만들었을 때 기본적으로 제공되는 YAML 파일에 대한 설명만 하겠습니다.
먼저, Chart.yaml 파일.
apiVersion: v2
name: msa-chart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
apiVersion 은 Helm 차트 API 버전입니다. 현재 v2는 Helm 3에 해당하며, v1은 Helm2에 해당합니다. name은 차트의 이름입니다. type은 차트의 유형으로, application은 배포 가능한 일반적인 차트를 의미하며, library는 다른 차트에서 재사용할 수 있는 템플릿 또는 함수를 제공하는 차트를 의미합니다.
다음은, values.yaml 파일.
replicaCount: 1
image:
repository: nginx
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: ""
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
serviceAccount:
# Specifies whether a service account should be created
create: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name: ""
podAnnotations: {}
podSecurityContext: {}
# fsGroup: 2000
securityContext: {}
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
service:
type: ClusterIP
port: 80
ingress:
enabled: false
className: ""
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: chart-example.local
paths:
- path: /
pathType: ImplementationSpecific
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80
nodeSelector: {}
tolerations: []
affinity: {}
replicaCount: 배포할 파드의 리플리카 수를 정의합니다.
image: 사용할 도커 이미지의 정보를 정의합니다.
imagePullSecrets: private 도커 레지스트리에서 이미지를 pull 할 때 필요한 시크릿을 명시합니다.
serviceAccount: 서비스 어카운트 관련 설정을 정의합니다.
podAnnotations: 파드에 추가할 주석을 정의합니다.
podSecurityContext 및 securityContext: 파드 및 컨테이너의 보안 설정을 정의합니다.
service: 서비스의 유형 및 포트를 정의합니다.
ingress: 인그레스 리소스 관련 설정을 정의합니다.
resources: 파드에 할당될 리소스의 제한 및 요청을 정의합니다.
autoscaling: 자동 스케일링 관련 설정을 정의합니다.
nodeSelector, tolerations, affinity: 파드의 스케줄링과 관련된 설정을 정의합니다.
이 values,yaml 파일에 서비스별로 다른 값들만 설정하고 그 값을 파라미터로 사용한다면, 하나의 템플릿만으로 여러 서비스의 배포를 관리할 수 있습니다.
Helm 차트 내 MSA 쿠버네티스 리소스 관련 yaml 파일 작성은 제 블로그 CI/CD Argonautica 시리즈에서 다시 찾아뵙도록 하겠습니다.
마지막으로, 기본적인 helm 명령어들을 알아보고 마치겠습니다.
helm install [RELEASE_NAME] [CHART_PATH]
이 명령어를 사용하여 쿠버네티스 클러스터에 애플리케이션을 배포할 수 있습니다.
helm upgrade [RELEASE_NAME] [CHART_PATH]
이미 설치된 helm 릴리스를 업데이트하려면 helm upgrade 명령어를 사용하시면 됩니다.
Thanks for watching, Have a nice day.
'IT > DevOps \ Architecture' 카테고리의 다른 글
[DevOps] 컨테이너에 관한 고찰 (0) | 2023.10.04 |
---|---|
Istio, 광활한 Service Mesh에 띄워진 돛단배 (0) | 2023.09.14 |
Prometheus, 어두웠던 인프라에 내려온 불 (2) | 2023.09.05 |
CatLight, 어둠 속을 응시하는 고양이의 눈 (2) | 2023.09.05 |
Harbor, 컨테이너 이미지를 위한 거대한 선착장 (0) | 2023.08.28 |