EKS Helm Deploy


Helm 설정

Instasll Helm

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh



Helm Repo

Helm repository는 다양한 chart의 repository 이다. 현재 Helm 3에서 지원하는 repository url은 아래와 같으며 helm repo add 명령어를 통해 추가한다.

helm repo add stable https://charts.helm.sh/stable
#helm repo ls


해당 URL로 접속해보면 Improve this page. 링크가 존재하고 클릭하면 github 사이트로 이동한다.
chart 하위에 여러 app들이 존재하며 만약 nginx-ingress를 배포하고자 하면 아래와 같이 커맨드를 수행한다.

helm upgrade -i nginx-ingress stable/nginx-ingress -n ingress
helm upgrade -i "name" stable/nginx-ingress -n "namespace"


만약 제공 되는 values.yaml 중 변경하고 싶은 값이 있다면 아래와 같이 수행한다.

  1. helm fetch 를 통해 tgz을 내려받고 압축을 풀어 chart를 내려받은 후 values.yaml 값을 수정하여 배포
    helm fetch stable/nginx-ingress
    tar -xzvf nginx-ingress-1.41.3.tgz
    
  2. helm upgrade -i 를 통해 수행하며 –set 옵션을 통해 values.yaml을 오버라이딩 한다.
    #sample
    helm upgrade -i nginx-ingress stable/nginx-ingress -n ingress \
    --set image.pullPolicy=Always \
    --set serviceAccount.enabled=false
    



Helm Chart Create

helm create “name” 을 통해서 default chart를 생성할 수 있다.
아래와 같이 command를 실행하면 현재 폴더에 helm 폴더가 생기고 하위에 templates, Chart.yaml, Values.yaml 이 생성된다.
templates 하위에는 deployment.yaml, service.yaml, serviceaccount.yaml ingress.yaml 등이 기본적으로 생성되며 모두 values.yaml에 설정한 값을 이용하여 배포된다.
Helm Chart

helm create helm
#helm create "name"


Helm Deploy
위에서 생성한 chart를 이용하여 values.yaml 값을 적정하게 설정한 후 아래와 같이 커맨드를 수행하면 배포가 진행된다.

#Command
helm upgrade -i test ./helm/ -f ./helm/values.yaml -n test

#Output
: << "END"
Release "test" does not exist. Installing it now.
NAME: test
LAST DEPLOYED: Fri Jul 16 17:24:50 2021
NAMESPACE: test
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace test -l "app.kubernetes.io/name=helm,app.kubernetes.io/instance=test" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace test $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace test port-forward $POD_NAME 8080:$CONTAINER_PORT
END
helm upgrade -i --debug ${APP_NAME} ./helm/ -f ./helm/${HELM_VALUES_FILE} -n ${APPLICATION_NS}

helm ls -A
#helm ls -n namespace


Helm Delete
helm을 통해 배포한 app은 아래와 같은 커맨드로 resource 삭제가 가능하다.

helm uninstall test -n test



Tag: [ aws  eks  helm  deploy  ]