EKS CI/CD 환경구축 (2)

Joshua_s·2022년 6월 21일
0
post-thumbnail
post-custom-banner

환경

Github, jenkins, argoCD를 사용하여 CI/CD 환경의 EKS 구축을 진행한다.
CI의 경우 Github -> jenkins -> AWS ECR로 진행되며
CD의 경우 argoCD -> AWS EKS로 진행된다.
필자의 구성 환경은 vmware-ubuntu-docker에서 진행할 예정이다.
이전 내용을 참조하세요

EKS

EKS는 Kubernetes를 실행하는 데 사용할 수 있는 관리형 서비스이다. kubernetes 제어 플레인 또는 노드를 설치, 작동, 유지 관리할 필요가 없다. 또한 오픈소스 Kubernetes 소프트웨어의 최신 버전을 실행하므로 모든 즉 기존에 사용중인 플러그인과 도구들을 사용할 수 있다. EKS에서 실행된느 애플리케이션은 IDC에서 실행중이든 퍼블릭 클라우드에서 실행중이든 상관없이 모든 표준 K8s환경에서 실행되는 앱과 완벽하게 호환된다. 즉 필요한 코드를 수정하지 않고 쉽게 EKS로 마이그레이션이 가능하다.
자세한 설명은 Docs를 확인하자

EKS Server

EKS를 시작하기 앞서서 먼저 서버를 생성해야 한다. EKS 서버는 VM으로 해도 상관없지만 필자는 EC2를 이용하여서 EKS 전용 서버를 생성하였다.

EKS server instance 정보
OS : amazon Linux2 5.10
인스턴스 유형 : t3.small

저는 인스턴스 정보와 같이 진행하였지만 다른 OS혹은 인스턴스 유형을 선택하여 진행하여도 상관 없습니다.
EKS 서버 인스턴스가 시작되면 ssh를 통하여 접속한 후 AWS CLI를 삭제합니다. 이는 초기에 AWS cli 1버전이 깔려있기 때문에 이 버전을 AWS CLI 2로 업그레이드 하기 위하여 진행하는 것입니다. 버전 확인은 아래의 코드로 확인할 수 있습니다.

aws --version

제거 방법은 아래와 같습니다

sudo yum remove awscli

이후에 아래의 코드로 AWS CLI버전 2를 다운로드 합니다.

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

설치가 완료되었다면 버전을 확인합니다.

/usr/local/bin/aws --version

이제 eksctl을 설치합니다. 설치방법은 docs를 참조하시면 됩니다.

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version

버전이 정상적으로 나온다면 설치가 완료된 것입니다.
이제 kubectl을 설치합니다.

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
kubectl version --short --client

마찬가지로 완료가 된다면 client버전이 정상적으로 나오게 됩니다.
이제 aws configure 명령어를 이용하여 키를 등록합니다. 만약 계정의 Access key와 Secret key가 없다면 IAM user를 새로 만드는 것을 추천합니다. IAM user생성시 programmatic access를 꼭 체크하셔야 합니다.

aws configure

aws configure를 입력하게 된다면 아래 이미지와 같이 나오게 되는데 이때 region name은 원하는 리전을 입력하시면 됩니다. 서울 리전의 경우 ap-northeast-2입니다.

리전을 확인하는 방법은 이름 console에서 계정옆에 서울 혹은 글로벌로 되어있는 부분에 나와있습니다.

이렇게 하면 관리서버에 계정을 등록하는 부분까지 완료된 상태입니다. 이제 eksctl을 사용하여서 클러스터와 node를 생성하면 됩니다. 제가 사용한 명령어는 아래와 같습니다.

eksctl create cluster \
--name k8s-argocd \
--region ap-northeast-2 \
--with-oidc \
--ssh-access \
--ssh-public-key my-key \
--nodes 2 \
--node-type t3.small \
--node-volume-size=8 \
--managed

여기서 ssh-public-key 부분에 my-key는 본인 키의 이름으로 수정하셔야 합니다. 또한 더 많은 옵션들을 확인하고 싶다면 eksctl create cluster --help 를 이용하시거나 링크를 확인하시면 더 다양한 예제를 볼 수 있습니다.
eks클러스터 생성은 20분 정도 소요되며 생성되고 있는 정보를 확인하고 싶다면 cloudformation에 들어가서 이벤트를 확인하시면 볼 수 있습니다.

EKS argocd

argo cd를 설치하여 eks server에 적용한다.

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.0.4/manifests/install.yaml
sudo curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.0.4/argocd-linux-amd64
sudo chmod +x /usr/local/bin/argocd
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

기본적으로 argocd-server는 공개적으로 노출하지 않지만 테스트 진행상황을 확인하기 위하여 Argo cd를 로드밸런서를 사용하여 사용할 수 있도록 설정한 것이다. ELB를 통하여 접근하기 까지 시간은 대략 2분정도 기다려야한다.

export ARGO_PWD=`kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d`

위 코드를 입력하면 argocd의 초기 비밀번호와 이름이 자동으로 생성된다.

ArgoCD는 로드벨런서의 dns주소를 입력해서 접근한다.
username은 admin이고
password는 echo $ARGO_PWD 명령어를 이용하여 확인하면 된다.

ArgoCD 접근까지 완료 되었다. 이제 jenkins와 연결만 하면 CI/CD가 완료된다. Manage > repositories 에 들어가서 github url 설정을 합니다. 이 설정은 connect repo using https를 클릭한 후 git repo url을 입력해주고 connect를 연결하였을때 successful이 뜨면 성공입니다.
이후에 메인 화면에 new app을 클릭하고 manifest 파일이 수정되면 저동 배포를 위하여 automatic으로 설정합니다
repository URL 부분에 깃 repo주소를 넣어주고 path부분에 kustomization.yaml파일이 있는 path를 넣어주면 됩니다.
kustomization 파일이 없다고 한다면 만들어서 넣으면 되는데 이 파일은 공식 홈페이지를 참조하면 됩니다.

테스트

jenkins에서 bulid now를 클릭하게 되면 ecr에서 태그가 업데이트 되게되고 argocd의 app을 확인하면 새로운 pod가 배포되는 것을 확인 할 수 있습니다.

정리

kubectl delete pod --all
eksctl delete cluster --name cluster-name

이후에 ecr과 eks managed용 ec2를 삭제하면 끝입니다.

사진이 안올라가요.... 그래서 중간부터 짤림...ㅠ

하... 다했는데 사진 왜 안올라가 이게 외않되...?

profile
devops engineer가 되기 위해
post-custom-banner

0개의 댓글