AWS EKS 개념 정리 (+AWS Cloud9)
2023. 8. 8.

AWS Community Day Online 2021 | Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) 이 워크샵 자료를 참고해서 작성한글입니다.

Amazon EKS란?

Amazon Elastic Kubernetes Service(Amazon EKS)는 자체 Kubernetes 컨트롤 플레인 또는 노드를 설치, 운영 및 유지 관리할 필요 없이 AWS의 Kubernetes 실행에 사용할 수 있는 관리형 서비스입니다. 

 

홈페이지에는 위와 같이 나와 있다. 그냥 쉽게 말해서 AWS에서 쿠버네티스를 쉽게 실행할수있도록 도와주는 서비스의 일종. 컨트롤 플레인은 사용자로부터 명령을 받아서 데이터 플레인에게 전달해서 동작하도록 한다. Amazon EKS를 사용하면 쿠버네티스 컨트롤 플레인을 직접 설치하거나 운영 및 유지 할 필요가 없다.

 

EKS는 다른 AWS서비스들과 연동이 가능하고 쿠버네티스 소프트웨어 최신 버전을 실행하므로 코드를 수정하지 않고 표준 쿠버네티스 애플리케이션을 그대로 사용할 수 있다.

 

출처 https://www.slideshare.net/awskr/amazon-eks-aws-aws-community-day-online-2021

개발자 팀에서 파드에 올라가는 컨테이너 이미지를 레파지토리인 GitHub에 push하면 Jenkins같은 곳에서 빌드를 수행한다.

빌드된 이미지는 DockerHub이나 Amazon ECR(컨테이너 이미지 저장소)에 저장할 수 있다.

Flux는 GitOps를 실제 구현한 오픈소스로 git에 저장된 쿠버네티스 리소스의 상태를 자동으로 대상 쿠버네티스에 반영해주는 도구라고 한다. Flux를 통해 애플리케이션의 변경단에 내용을 push한다.

 

이런 클러스를 사용하는 User는 ALB, NLB, NGINX 같은 엔트리 포인트를 통해서 애플리케이션에 접속할 수 있다.

EKS위에서 선택할 수 있는 컴퓨팅 엔진에는 amazon EC2나 서버리스 컴퓨팅 엔진은 Fargate를 선택해서 그 위에 파드를 올릴 수 있다.

 

amazon cloud watch나 Grafana, Prometheus같은것을 통해서 모니터링을 할 수도 있다.

 

AWS Cloud9

aws cloud9은 클라우드 기반 통합 개발 환경 즉, IDE이다. 

AWS IAM Role은 IAM 사용자 외에도 AWS에서 제공하는 서비스에도 적용할 수 있는데 서비스에 IAM Role을 부여하면 서비스가 사용자 대신 역할을 수행한다.

실습에서는 Cloud 9에 부여할 IAM Role로 AdministratorAccess를 사용했는데 실제 구현시에는 최소 권한을 부여하는게 더 적합하다고 한다.

AWS Cloud9은 EC2 인스턴스로 구동되기 때문에 EC2콘솔에서 생성한 Role을 부여해줬다.

그리고 나서 temporary credentials을 꺼줘야한다. EKS IAM authentication과 호환되지 않기 때문에 끄고 IAM Role을 붙이는거라고 한다.

확실히 없애기 위해서 기존의 자격 증명 파일도 삭제를 한다.

rm -vf ${HOME}/.aws/credentials

아래 명령어를 통해 제대로된 role이 적용됐는지 확인 할 수 있다.

aws sts get-caller-identity --query Arn | grep eksworkspace-admin

위와 같이 내가 적용한 role의 이름인 eksworkspace-admin이 나오는걸 확인할 수 있다.

 

추가적으로 AWS CLI를 업데이트해주고 버전을 확인해준다.(해당 내용은 생략)

 

kubectl

https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html

 

Installing or updating kubectl - Amazon EKS

You must use a kubectl version that is within one minor version difference of your Amazon EKS cluster control plane. For example, a 1.26 kubectl client works with Kubernetes 1.25, 1.26, and 1.27 clusters.

docs.aws.amazon.com

위 링크를 참고해서 kubectl을 설치해주면 된다.

설치 후 버전 확인도 해주기!

kubectl이 무엇인지는 지난번 쿠버네티스 공부할때 작성한 부분이 있기 때문에 이 글에서는 생략

 

eksctl

eksctl이란 EKS클러스터를 쉽게 생성 및 관리하는 CLI툴이라고 한다. GO언어를 사용한다. Amazon EKS 클러스터를 배포하는 방법에는 AWS 콘솔, CloudFormation, CDK, eksctl, Terraform 등이있는데 내가 따라하는 실습에서는 eksctl을 사용해서 배포했다.

 

EKS 클러스터 생성

아무 설정 없이 eksctl create cluster를 입력하면 디폴트로 클러스터가 배포된다. 하지만 명확하게 하기 위해 구성파일을 작성해서 배포하는 것이 좋다고 한다.

cd ~/environment
cat << EOF > eks-demo-cluster.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: eks-demo # 생성할 EKS 클러스터명
  region: ${AWS_REGION} # 클러스터를 생성할 리전
  version: "1.23"

vpc:
  cidr: "10.0.0.0/16" # 클러스터에서 사용할 VPC의 CIDR
  nat:
    gateway: HighlyAvailable

managedNodeGroups:
  - name: node-group # 클러스터의 노드 그룹명
    instanceType: t3.large # 클러스터 워커 노드의 인스턴스 타입
    desiredCapacity: 1 # 클러스터 워커 노드의 갯수
    minSize: 0
    maxSize: 4
    volumeSize: 20  # 클러스터 워커 노드의 EBS 용량 (단위: GiB)
    privateNetworking: true
    ssh:
      enableSsm: true
    iam:
      withAddonPolicies:
        imageBuilder: true # Amazon ECR에 대한 권한 추가
        albIngress: true  # albIngress에 대한 권한 추가
        cloudWatch: true # cloudWatch에 대한 권한 추가
        autoScaler: true # auto scaling에 대한 권한 추가
        ebs: true # EBS CSI Driver에 대한 권한 추가

cloudWatch:
  clusterLogging:
    enableTypes: ["*"]

iam:
  withOIDC: true
EOF

워크샵 실습코드랑 조금 다른 부분이 있음 주의

eksctl create cluster -f eks-demo-cluster.yaml

이 코드를 통해 클러스터를 배포한다.

kubectl get nodes

노드가 제대로 배포되고 있는지 위와 같이 확인이 가능하다.

(다른걸 하던 중인 화면을 캡쳐해와서 조금 다를 수 있음 주의)

'공부기록 > AWS' 카테고리의 다른 글

powershell으로 eks접속하기  (0) 2023.09.05
AWS EC2 실행 및 연결  (0) 2023.07.15
AWS EC2 개념 정리  (0) 2023.07.15
myoskin