일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- helm
- EC2
- OS
- log
- Kafka
- Python
- AWS
- airflow
- Network
- Packet
- kubernetes
- Vision
- jvm
- MAC address
- java
- zookeeper
- grafana
- kubectl
- Trino
- JavaScript
- CVAT
- Spring
- aws s3
- Operating System
- ip
- kubeadm
- tcp
- CSV
- docker
- PostgreSQL
- Today
- Total
JUST WRITE
Helm도 git처럼 diff가 가능하다고?! - Helm Plugin 설치 본문
Helm도 git처럼 diff가 가능하다고?!
요즘 Kubernetes Cluster를 통해 시스템 구성을 많이 하고 있습니다.
Kubernetes 개념과 사용법이 복잡하지만 명령어를 통해 쉽게 관리할 수 있게 하는 Tool이 있습니다.
바로 Helm입니다.
Helm을 통해 Kubernets에 Package를 쉽게 배포/관리할 수 있습니다.
Helm으로 Package를 배포하면 values.yaml에 있는 값들을 수정하고 배포합니다.
upgrade command로 수정한 것을 재배포 가능합니다.
$ helm upgrade ...
다만 여러 번 수정을 하다 보면 설정값들이 관리가 안될 수 있습니다.
저도 이런 문제를 겪어서 반영한 히스토리를 알 수 없을까? 차이를 알 수 없을까? 고민하였습니다.
그러다가 발견한 것이 Diff Plugin입니다.
이번 포스팅에서는 Helm Diff Plugin의 설치와 간단한 사용법을 정리하였습니다.
Diff 플러그인 설치
Helm diff Plugin Github에서 최신 Release를 다운로드합니다.
$ wget https://github.com/databus23/helm-diff/releases/download/v3.8.1/helm-diff-linux-amd64.tgz
다운로드한 plugin은 Helm plugin path에 놓습니다.
Helm 환경변수
Helm plugin path는 어디일까요?
Helm help command에서 힌트를 얻을 수 있습니다.
Helm과 관련된 환경변수들을 알 수 있습니다.
cache, 설정, registry 관련 파일들의 path를 설정할 수 있습니다.
$ helm help
...
| Name | Description |
|------------------------------------|-----------------------------------------------------------------------------------|
| $HELM_CACHE_HOME | set an alternative location for storing cached files. |
| $HELM_CONFIG_HOME | set an alternative location for storing Helm configuration. |
| $HELM_DATA_HOME | set an alternative location for storing Helm data. |
| $HELM_DEBUG | indicate whether or not Helm is running in Debug mode |
| $HELM_DRIVER | set the backend storage driver. Values are: configmap, secret, memory, sql. |
| $HELM_DRIVER_SQL_CONNECTION_STRING | set the connection string the SQL storage driver should use. |
| $HELM_MAX_HISTORY | set the maximum number of helm release history. |
| $HELM_NAMESPACE | set the namespace used for the helm operations. |
| $HELM_NO_PLUGINS | disable plugins. Set HELM_NO_PLUGINS=1 to disable plugins. |
| $HELM_PLUGINS | set the path to the plugins directory |
| $HELM_REGISTRY_CONFIG | set the path to the registry config file. |
| $HELM_REPOSITORY_CACHE | set the path to the repository cache directory |
| $HELM_REPOSITORY_CONFIG | set the path to the repositories file. |
| $KUBECONFIG | set an alternative Kubernetes configuration file (default "~/.kube/config") |
| $HELM_KUBEAPISERVER | set the Kubernetes API Server Endpoint for authentication |
| $HELM_KUBECAFILE | set the Kubernetes certificate authority file. |
| $HELM_KUBEASGROUPS | set the Groups to use for impersonation using a comma-separated list. |
| $HELM_KUBEASUSER | set the Username to impersonate for the operation. |
| $HELM_KUBECONTEXT | set the name of the kubeconfig context. |
| $HELM_KUBETOKEN | set the Bearer KubeToken used for authentication. |
Helm stores cache, configuration, and data based on the following configuration order:
- If a HELM_*_HOME environment variable is set, it will be used
- Otherwise, on systems supporting the XDG base directory specification, the XDG variables will be used
- When no other location is set a default location will be used based on the operating system
By default, the default directories depend on the Operating System. The defaults are listed below:
| Operating System | Cache Path | Configuration Path | Data Path |
|------------------|---------------------------|--------------------------------|-------------------------|
| Linux | $HOME/.cache/helm | $HOME/.config/helm | $HOME/.local/share/helm |
| macOS | $HOME/Library/Caches/helm | $HOME/Library/Preferences/helm | $HOME/Library/helm |
| Windows | %TEMP%\helm | %APPDATA%\helm | %APPDATA%\helm |
...
...
그중에서 plugin path인 HELM_PLUGINS를 설정합니다.
$ mkdir ~/helm/plugins
$ vi ~/.profile
...
export HELM_PLUGINS=$HOME/helm/plugins
$ source ~/.profile
$ echo $HELM_PLUGINS
/home/ubuntu/helm/plugins
Diff Plugin Install
plugin path를 설정했으면, 해당 path에 plugin 파일을 옮깁니다.
plugin list로 plugin을 확인합니다.
$ mv helm-diff-linux-amd64.tgz ~/helm/plugins
$ cd ~/helm/plugins
$ tar xzf helm-diff-linux-amd64.tgz
$ helm plugin list
NAME VERSION DESCRIPTION
diff 3.8.1 Preview helm upgrade changes as a diff
Diff check
Helm Diff Plugin 설치가 끝났습니다.
이제 Helm으로 Chart Release Diff를 확인해 보겠습니다.
helm release도 git처럼 revision 단위로 관리됩니다.
helm history command로 확인 가능합니다.
$ helm history jupyterhub -n jupyterhub
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
6 Thu Feb 2 15:54:10 2023 superseded jupyterhub-1.2.0 1.5.0 Upgrade complete
7 Thu Feb 2 16:48:21 2023 superseded jupyterhub-1.2.0 1.5.0 Upgrade complete
8 Thu Mar 30 16:54:10 2023 failed jupyterhub-1.2.0 1.5.0 Upgrade "jupyterhub" failed: pre-upgrade hooks failed: timed out waiting for the condition
9 Thu Mar 30 17:07:10 2023 failed jupyterhub-1.2.0 1.5.0 Upgrade "jupyterhub" failed: pre-upgrade hooks failed: timed out waiting for the condition
10 Thu Mar 30 17:21:14 2023 superseded jupyterhub-1.2.0 1.5.0 Upgrade complete
11 Wed May 10 13:57:39 2023 failed jupyterhub-1.2.0 1.5.0 Upgrade "jupyterhub" failed: context canceled
12 Wed May 10 14:00:12 2023 superseded jupyterhub-1.2.0 1.5.0 Upgrade complete
13 Wed May 10 14:15:47 2023 superseded jupyterhub-1.2.0 1.5.0 Upgrade complete
14 Wed May 10 14:17:55 2023 superseded jupyterhub-1.2.0 1.5.0 Upgrade complete
15 Wed May 10 14:43:22 2023 deployed jupyterhub-1.2.0 1.5.0 Upgrade complete
diff을 revision 기준으로 확인할 수 있습니다.
해당 Package의 모든 리소스에 대해서 Diff를 보여줍니다.
아래 보면 jupyterhub singleuser.memory의 limit, requests가 다른 것을 알 수 있습니다.
$ helm diff revision jupyterhub -n jupyterhub 10 15
....
jupyterhub, user-placeholder, StatefulSet (apps) has changed:
# Source: jupyterhub/templates/scheduling/user-placeholder/statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: user-placeholder
labels:
component: user-placeholder
app: jupyterhub
release: jupyterhub
chart: jupyterhub-1.2.0
heritage: Helm
spec:
podManagementPolicy: Parallel
replicas: 0
selector:
matchLabels:
component: user-placeholder
app: jupyterhub
release: jupyterhub
serviceName: user-placeholder
template:
metadata:
labels:
component: user-placeholder
app: jupyterhub
release: jupyterhub
spec:
schedulerName: jupyterhub-user-scheduler
nodeSelector: {}
tolerations:
- effect: NoSchedule
key: hub.jupyter.org/dedicated
operator: Equal
value: user
- effect: NoSchedule
key: hub.jupyter.org_dedicated
operator: Equal
value: user
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: hub.jupyter.org/node-purpose
operator: In
values: [user]
terminationGracePeriodSeconds: 0
automountServiceAccountToken: false
containers:
- name: pause
image: desk-docker.bart.sec.samsung.net/tmp/k8s.gcr.io/pause:3.5
resources:
requests:
- memory: 8G
+ cpu: 0.5
+ memory: 16G
limits:
- memory: 8G
+ cpu: 0.5
+ memory: 16G
securityContext:
allowPrivilegeEscalation: false
runAsGroup: 65534
runAsUser: 65534
오프라인으로 Helm Diff Plugin을 설치하였습니다.
온라인이면 아래 command로 바로 설치가 가능합니다.
$ helm plugin install https://github.com/databus23/helm-diff
Plugin을 사용해 봤지만 가독성이 좋지 않습니다.
Helm Plugin도 있지만 ArgoCD로 Helm Package를 배포하면 Diff도 쉽게 알 수 있습니다.
다음에는 ArgoCD로 Helm Chart를 배포해 보겠습니다.
[참고사이트]
'MLOps > Kubernetes' 카테고리의 다른 글
명령어 한 번에 Kubernetes 설치하기(2) - AWS ENI를 이용한 설치 (0) | 2023.10.04 |
---|---|
Pod 주기적으로 삭제하기 - Kubernetes에 CronJob 세팅 (0) | 2023.08.06 |
포트 번호 쓰기도 귀찮네(1) (0) | 2023.07.11 |
PV 얼마나 남았나?!?! (3) | 2023.07.10 |
[Error Reporting] Worker Node join 에러 - CNI 이슈 (0) | 2023.06.26 |