Helm 아키텍처 개요
오픈소스 패키지 매니저인 Helm 은 쿠버네티스 리소스를 정의하고 배포하는 데 사용됩니다. 이 도구는 크게 두 가지 핵심 요소로 구성됩니다. 하나는 로컬 머신에서 실행되는 Helm Client이며, 다른 하나는 클러스터 내부에서 리소스를 조정하는 Tiller 서버입니다. 본 가이드는 마스터 노드에서 이러한 환경을 구축하는 절차를 다룹니다.
참고 문서는 공식 Helm 다큐멘트를 참조하시기 바랍니다.
1. 헬름 바이너리 배포
먼저 시스템에 헬름 CLI 도구를 설치합니다. 공식 저장소에서 특정 버전의 압축 파일을 확보한 후 실행 권한을 부여하여 전역적으로 사용할 수 있도록 합니다.
# 타겟 버전으로 선택된 아카이브를 가져옵니다. 네트워크 상황에 따라 대안 경로가 필요할 수 있습니다.
[root@master ~]# curl -LO https://storage.googleapis.com/kubernetes-helm/helm-v2.14.3-linux-amd64.tar.gz
# 압축 해제 및 유틸리티 디렉터리 이동
[root@master ~]# tar -xzf helm-v2.14.3-linux-amd64.tar.gz
[root@master ~]# sudo cp linux-amd64/helm /usr/local/bin/helm
[root@master ~]# sudo chmod a+x /usr/local/bin/helm
# 쉘 자동 완성 기능 활성화 (프로필 설정)
[root@master ~]# echo 'source <(helm completion bash)' >> /etc/bashrc
[root@master ~]# source /etc/bashrc
2. Tiller 서비스 및 권한 설정
Tiller 는 쿠버네티스 클러스터 내에서 실행되므로 적절한 RBAC(역할 기반 접근 제어) 정책이 필요합니다. 다음 YAML 명세서를 통해 서비스 계정을 생성하고 클러스터 관리자 역할을 바인딩합니다.
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller-deploy
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller-admin-access
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller-deploy
namespace: kube-system
위 내용은 예를 들어 rbac-tiller.yaml 파일로 저장한 후 적용시킵니다.
[root@master ~]# kubectl apply -f rbac-tiller.yaml
serviceaccount/tiller-deploy created
clusterrolebinding.rbac.authorization.k8s.io/tiller-admin-access created
3. 클라이언트 초기화 및 서버 스탠드업
네트워크 지연 문제를 우회하기 위해 안정적인 공개 이미지를 지정하여 초기화를 수행합니다. 중국 지역 사용자나 국내 환경에서는 다음과 같은 커스텀 이미지 경로를 활용하면 효율적입니다.
helm init \
--upgrade \
--service-account tiller-deploy \
--tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 \
--stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
4. 호환성 이슈 대응 (Kubernetes v1.16 이상)
쿠버네티스 버전이 1.16.0 이상인 환경에서는 구형 API 버전 (extensions/v1beta1) 에 대한 지원 중단으로 인해 초기화 과정에서 오류가 발생할 수 있습니다. 이 경우 manifests 를 출력하여 API 버전을 수정한 뒤 직접 적용하는 방식을 사용합니다.
helm init \
-i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 \
--stable-repo-url http://mirror.azure.cn/kubernetes/charts/ \
--service-account tiller-deploy \
--override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' \
--output yaml | sed 's@apiVersion: extensions/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -
5. 설치 상태 검증 및 기본 사용법
Tiller 서버 포드가 정상 상태로 전환되었는지 확인합니다.
[root@master ~]# kubectl get pods -n kube-system -l app=helm
NAME READY STATUS RESTARTS AGE
tiller-deploy-xxxxx 1/1 Running 0 2m
설치가 완료되면 간단한 명령어를 통해 기능이是否正常인지 점검해 봅니다.
# 버전 정보 조회
helm version --short
# 저장소 메타데이터 갱신
helm repo update
# 차트 검색 예시 (Redis)
helm search redis
# 차트 파일 로컬 추출
helm fetch stable/redis