# helm chart 렌더링, 업그레이드 및 삭제와 관련하여 알아보자.
1. helm chart 렌더링
- 렌더링 명령어는 아래와 같다.
- 실제 설치를 수행하는 것이 아니라 values.yaml 파일과 templates 폴더의 파일들의 적용된 YAML 정의서 결과를 확인하고 싶다면 templates 명령을 사용하여 적용될 내용들을 미리 확인 할 수 있다. (kubectl 명령툴의 --dry-run 옵션과 유사하다고 볼 수 있다.)
$ helm template <CAHRT_PATH>
- 아래의 명령어를 통해 미리 실행될 정보를 확인 할 수 있다.
helm template seung ./mychart > seung-output.yaml
- 위의 명령어를 실행하면 아래와 같이 seung-output.yaml 파일이 생성된다. 내용을 보면 아래와 같다.
- 아래의 리소스를 보면 알겠지만, k8s의 서비스를 생성하는 기본 리소스들을 values.yaml에서 가져와 실행을 한다고 볼 수 있다.
---
# Source: mychart/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: seung-mychart
labels:
helm.sh/chart: mychart-0.1.0
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: seung
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
---
# Source: mychart/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: seung-mychart
labels:
helm.sh/chart: mychart-0.1.0
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: seung
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
spec:
type: LoadBalancer
ports:
- port: 8080
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: seung
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: seung-mychart
labels:
helm.sh/chart: mychart-0.1.0
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: seung
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: seung
template:
metadata:
labels:
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: seung
spec:
serviceAccountName: seung-mychart
securityContext:
{}
containers:
- name: mychart
securityContext:
{}
image: "nginx:1.16.0"
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
protocol: TCP
livenessProbe:
httpGet:
path: /
port: http
readinessProbe:
httpGet:
path: /
port: http
resources:
{}
---
# Source: mychart/templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
name: "seung-mychart-test-connection"
labels:
helm.sh/chart: mychart-0.1.0
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: seung
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['seung-mychart:8080']
restartPolicy: Never
- 이를 통해 YAML 파일이 어떤 형태로 만들어져 설치가 진행 되는지 디버깅하는 용도로도 사욜 할 수 있다.
2. chart 업그레이드
- chart 업그레이드 명령어는 아래와 같다. 이미 설치한 chart에 대해 values.yaml 값을 수정하고 업데이트 할 수 있다. Service 타입을 기존의 LoadBalancer에서 NodePort로 변경 후 업그레이드를 통해 배포해보자.
$ helm upgrade <CHART_NAME> <CHART_PATH>
- 아래의 정보를 수정하여 values.yaml 파일의 내용을 수정 후 배포해보자.
...
service:
type: NodePort # 기존에는 LoadBalancer로 되어 있었음.
port: 8080
...
- 수정한 chart를 upgrade 명령어를 통해 재 배포 해보자.
$ helm upgrade seung ./mychart
- upgrade 명령어를 수행하면 아래와 같이 변경된 정보로 반영이 된다.
$ helm upgrade seung ./mychart
Release "seung" has been upgraded. Happy Helming!
NAME: seung
LAST DEPLOYED: Tue Feb 21 01:55:14 2023
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
1. Get the application URL by running these commands:
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services seung-mychart)
export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
- 그리고 svc 정보를 확인하면 service 타입이 LoadBalacner에서 NodPort로 변경된 것을 확인 할 수 있다.
/helm-test-seung $ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 74d
seung-mychart NodePort 172.20.6.61 <none> 8080:30769/TCP 55m
- 그리고 helm list를 통해 리스트를 조회하면 REVISION 숫자가 2로 올라간 것을 확인 할 수 있는데 이것은 업그레이드 된 버전이라고 생각하면 쉽다. 그리고 chart를 업데이트 할때마다 해당 REVISION 숫자가 올라간다.
/helm-test-seung $ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
efs-provisioner default 1 2023-01-09 00:58:00.174011084 +0000 UTC deployed efs-provisioner-0.13.2 v2.4.0
seung default 2 2023-02-21 01:55:14.034241111 +0000 UTC deployed mychart-0.1.0 1.16.0
3. chart 배포상태 확인
$ helm status <CHART_NAME>
- helm list를 통해서 조회한 chart 이름이 seung 이므로 helm status seung 라는 명령어를 통해 chart status의 정보를 확인 할 수 있다.
$ helm status seung
NAME: seung
LAST DEPLOYED: Tue Feb 21 01:55:14 2023
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
1. Get the application URL by running these commands:
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services seung-mychart)
export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
4. chart 삭제
- chart 삭제는 간단하다 아래의 명령어를 통해 chart를 삭제 할 수 있다.
helm delete <CHART_NAME>
- 위의 명령어를 통해 삭제를 해보자.
$ helm delete seung
release "seung" uninstalled
- helm list를 통해 조회를 해보면 삭제가 된것을 확인 할수 있다.
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
efs-provisioner default 1 2023-01-09 00:58:00.174011084 +0000 UTC deployed efs-provisioner-0.13.2 v2.4.0
'Helm (헬름) > Helm chart' 카테고리의 다른 글
Helm Chart Customizing - nginx (0) | 2023.03.09 |
---|---|
Terraform으로 EKS 클러스터 생성 및 HELM Chart로 리소스 구현 (0) | 2023.03.08 |
helm chart 설치 오류 해결하기 (0) | 2023.03.08 |
helm 원격 리포지토리 (Repository) (0) | 2023.02.21 |
helm을 활용한 k8s 리소스 매니징 및 nginx 배포 (0) | 2023.02.21 |