-
helm이란 쿠버네티스 패키지 매니저입니다. centOS에서 yum 이나 python에서는 pip 툴 MAC OS에서는 brew와 같이 패키지를 관리 주는 툴입니다. helm을 이용하면 원하는 패키지들을 쿠버네티스에 쉽게 설치할 수 있습니다.
-
helm은 docker hub와 비슷하게 helm 패키지들을 저장하고 있는 저장소(repository)가 있습니다. 사용자는 저장소를 추가하고 해당 저장소의 패키지를 install하기만 하면 됩니다. helm 차트로 원하는 패키지를 install할때 values.yaml 을 이용하여 사용자의 환경에 따라 커스텀하여 사용할 수 있습니다.
helm chart 구조
-
Chart.yaml: 차트 이름, 버전등 기본적인 메타 정보를 정의하는 파일
-
templates: 쿠버네티스에 배포될 리소스들의 매니페스트 템플릿이 포함된 폴더
-
values.yaml: 템플릿에 사용될 변수(Value)값들을 정의하는 파일
-
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 chart repo를 위한 CodeCommit 레포 생성 후 README.md 파일을 생성합니다.
-
해당 레포를 cloud9 환경으로 클론 합니다.
cd ~/environment git clone codecommit::ap-northeast-2://chart-repo
-
book-sample/helm/game-2048 폴더 하위 (
templates/
,Chart.yaml
,values.yaml
)파일을 Chart 레포지토리로 복사합니다.cd ~/environment mkdir chart-repo/game-2048 cp -r book-sample/helm/game-2048/* chart-repo/game-2048
-
Chart 레포지토리에 변경사항을 커밋한 후 푸시 합니다.
cd chart-repo git add . git commit -m "Updated game chart" git push origin main
-
ArgoCD 설치 & 네임스페이스 생성합니다.
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
-
외부에서 ArgoCD에 접속할 수 있도록 CLB를 생성하도록 합니다.
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
-
ArgoCD 접속 주소를 확인 합니다.
export ARGOCD_SERVER=`kubectl get svc argocd-server -n argocd -o json | jq --raw-output .status.loadBalancer.ingress[0].hostname` echo $ARGOCD_SERVER
-
초기 admin 사용자 암호를 확인합니다.
ARGO_PWD=`kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d` echo $ARGO_PWD
-
ARGO_SERVER를 브라우저에서 오픈 하고 admin유저로 로그인합니다.
-
ArgoCD가 레포지토리에 접속할 수 있도록 IAM User 및 Git Credential을 생성합니다.
CodeCommit 레포지토리에 접근 할 수 있도록 AWSCodeCommitPowerUser 권한을 할당 합니다.
IAM User의 보안 자격 증명으로 이동하여 Git Credential을 생성 한 후 다운로드하거나 다른 곳에 메모합니다.
ArgoCD로 이동하여 Setting > Repository로 이동 후 Connnect Repo를 통해 CodeCommit 레포지토리를 연동합니다.
-
Application 탭으로 이동 후
default
프로젝트,Manual
SYNC POLICY, 기존 설정한 Repository URL,game-2048
Path, 기본 Cluster URL을 선택한 다음 ArgoCD App을 생성합니다. -
Application 으로 이동하여 Chart 레포지토리와 Sync를 맞춰 줍니다.
-
3~4분 후 ingress를 통하여 ALB가 프로비저닝 된 후 ALB DNS를 통하여 브라우저에 접속합니다.
-
Values.yaml
에 ReplicaSet 갯수를 변경 후 Chart 레포에 푸시합니다.git add . git commit -m "Updated replicas to 4" git push origin main
-
ArgoCD로 이동하여 Application을 Sync 후 변경된 replica 갯수를 확인합니다.
ArgoCD로 이동하여 Setting > Repository로 이동 후 Connnect Repo를 통해 Public EKS Chart 레포지토리를 연동합니다.
-
Application 탭으로 이동 후 아래와 같은 값을 입력 후 ArgoCD App을 생성합니다.
- Application Name:
cloudwatch-metrics
- Project Name:
default
- SYNC POLICY:
Manual
- AUTO-CREATE NAMESPACE:
true
- Sourece:
eks-charts
- Path:
stable/aws-cloudwatch-metrics
- Cluster URL:
https://kubernetes.default.svc
- Namespace:
amazon-cloudwatch
- Helm/clusterName: <Your_Cluster_Name>
- Application Name:
-
생성한 Application을 클릭하여 sync를 통해 Cloudwatch Metric Helm 차트를 배포합니다.
-
Daemonset 이 잘 동작하는지 로그를 확인 합니다.
kubectl logs <Daemonset_name> -n amazon-cloudwatch