-
github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 5부AWS 2023. 4. 3. 19:39
4부 링크
manifest 레포지토리는 보안 이유로 공유할 수가 없습니다.
위에 링크를 보고 참고했다.
일단 argoCD를 설치해보자
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
혹시모르니 argoCD CLI도 설치하자.
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/') sudo curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64 sudo chmod +x /usr/local/bin/argocd
argoCD를 밖에서 접근 가능하게 type을 LoadBalancer로 바꿔주자
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
LoadBalancer로 바꿨으므로 ec2에서 로드밸런서 탭에 로드밸런서가 만들어져있고 주소가 나온다.
5분정도 있다가 브라우저로 요청을 해보자.
로그인 아이디는 admin 이고 비밀번호는 아래의 명령어를 통해 얻어야한다.
ARGO_PWD=`kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d` echo $ARGO_PWD
워크샵에서 나온 내용을 보면, k8s의 yaml들을 저장하기 위한 repository를 하나 만들었다.
워크샵에서는 public 이지만, 나는 private 로 만들겠다.
eks cluster에서 해당 private repository로 push 해야하므로 cluster에서 ssh 키를 만들어줘야한다.
ssh-keygen -t rsa -b 4096 -C 깃허브로그인이메일
이렇게 한다음 , id_rsa.pub 파일을 복사해서 github 프로필 누르면 setting이 있는데 거기에서 ssh 키를 등록해주면 된다.
https://velog.io/@loakick/2019-11-19-0011-%EC%9E%91%EC%84%B1%EB%90%A8-2ck34lupye
잘 이해가 안된다면 위 블로그를 보자.
이제 만들어준 private repository를 ec2 bastion에서 clone 해보자.
스프링 workflow의 build.yaml 에 아래의 설정을 추가한다.
- name: Setup Kustomize uses: imranismail/setup-kustomize@v1 - name: Checkout kustomize repository uses: actions/checkout@v2 with: repository: ${{ secrets.GIT_USERNAME }}/k8s-manifest-repo ref: main token: ${{ secrets.ACTION_TOKEN }} path: k8s-manifest-repo - name: Update Kubernetes resources run: | echo ${{ steps.login-ecr.outputs.registry }} echo ${{ steps.image-info.outputs.ecr_repository }} echo ${{ steps.image-info.outputs.image_tag }} cd k8s-manifest-repo/base kustomize edit set image ${{ steps.login-ecr.outputs.registry}}/${{ steps.image-info.outputs.ecr_repository }}=${{ steps.login-ecr.outputs.registry}}/${{ steps.image-info.outputs.ecr_repository }}:${{ steps.image-info.outputs.image_tag }} cat kustomization.yaml - name: Commit files run: | cd k8s-manifest-repo git config --global user.email "github-actions@github.com" git config --global user.name "github-actions" git commit -am "Update image tag" git push -u origin main
ACTION_TOKEN은 맨위에 첨부한 워크샵 링크에 잘 나와있다.
github.com 로그인 후 User profile > Settings > Developer settings > Personal access tokens 으로 이동 합니다. 그리고 우측 상단에 위치한 Generate new token을 선택 합니다.
Note 에 access token for github action 라 입력 하고 Select scopes 에서 repo 를 선택 합니다. 그리고 화면 아래에서 Generate token 을 클릭 합니다.
이런 방식으로 해서 얻은 다음 넣어주면 된다.
build.yaml 파일을 보면 k8s-manifest-repo의 base폴더로 이동하므로 k8s-manifest-repo 에 base폴더를 만들자.
일단 EC2 내부에서 파일을 만들고, 깃허브에 푸시해보자.
#my-secret.yaml apiVersion: v1 data: username: base64로 암호화 한 값을 넣으세요. password: base64로 암호화 한 값을 넣으세요. url: base64로 암호화 한 값을 넣으세요. kind: Secret metadata: creationTimestamp: null name: my-secret
#backend-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: spring-backend namespace: default spec: replicas: 3 selector: matchLabels: app: spring-backend template: metadata: labels: app: spring-backend spec: containers: - name: spring-backend image: 002838798861.dkr.ecr.ap-northeast-2.amazonaws.com/back-end:9dc1dab1 imagePullPolicy: Always ports: - containerPort: 8080 env: - name: DATASOURCE_URL valueFrom: secretKeyRef: name: my-secret key: url - name: DATASOURCE_USERNAME valueFrom: secretKeyRef: name: my-secret key: username - name: DATASOURCE_PASSWORD valueFrom: secretKeyRef: name: my-secret key: password
#backend-service.yaml apiVersion: v1 kind: Service metadata: name: spring-backend # annotations: # alb.ingress.kubernetes.io/healthcheck-path: "/" spec: selector: app: spring-backend type: LoadBalancer ports: - protocol: TCP port: 80 targetPort: 8080
#kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization images: - name: 002838798861.dkr.ecr.ap-northeast-2.amazonaws.com/back-end newName: 002838798861.dkr.ecr.ap-northeast-2.amazonaws.com/back-end newTag: 8ec13824 resources: - backend-deployment.yaml - backend-service.yaml
이렇게 만들어주고, 위에서 만들어준 깃허브 ssh 키가 있으므로 푸시가 된다.
argocd에서 k8s-manifest-repo private 레포에 접근하기 위해 ssh 키가 또 필요하다.
ssh키를 아래 블로그 통해서 만들고, k8s-manifest-repo 레포지토리에 가서 deploy key에 추가하자.
그리고 아래 블로그 보고 그대로 깃허브 ssh로 추가하면 된다.
https://malwareanalysis.tistory.com/415
이렇게 하고 우리의 소스코드가 있는 레포지토리에서 아무거나 푸시를 하고 기다리면 이미지 태그가 변경되면 k8s-manifest-repo 에 커밋+푸시를 하고, argocd는 해당 레포를 3분에 1번씩 보고있어서 변경되면 3분뒤에 반영된다.
이때 우리는 kustomization.yaml이 있으므로 argocd는
kustomize build | kubectl apply -f
해당 명령어를 실행해서 배포하게 되므로 deploy의 이미지 값이 변경되는 것이다.
우리가 만든 서비스가 https 가 붙어있지 않으므로, 로드밸런서랑 route53 이랑 certification manager을 사용해서 https를 붙여보겠다. 실패했는데, 인증서는 ingress alb로 해야 작동하는건지 다음에 해보겠다.
지금은 spring+rds 조합인데, 다음에는 클러스터 내부 db와 연동해보겠다.
아래글을 읽어보자.
https://kingofbackend.tistory.com/194
'AWS' 카테고리의 다른 글
github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 7부 (0) 2023.04.05 github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 6부 (0) 2023.04.05 github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 4부 (0) 2023.04.03 github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 3부 (0) 2023.04.03 ec2에서 jenkins 빌드서버 만들어보기 2편 (0) 2023.03.31