DevOps/Kubernetes

[Kubernetes] AWS EKS 사용법 - EC2로 인스턴스로 구성하기

TTOII 2022. 6. 12. 14:14
728x90

🚀 AWS EKS (Elastic Kubernetes Service)

AWS EKS는 컨트롤 플레인 및 워커노드를 직접 구성하지 않고 쿠버네티스를 손쉽게 사용할 수 있도록 도와주는 AWS 완전관리형 서비스이다.
AWS에서 제공하는 VPC, ELB, IAM 등 특정 기능을 같이 활용하고자 할 때 유용하다.
EKS는 오픈소스 쿠버네티스의 최신 버전을 실행하므로 쿠버네티스의 모든 plugintool을 사용할 수 있다.

AWS에서 EKS를 사용해 클러스터를 구축하는 방법은 크게 2가지가 있다.

  • eksctl + AWS CLI 사용 (명령줄 사용)
  • AWS 콘솔

🚀 AWS 콘솔에서 클러스터 생성하기

자주 사용하지 않는 방식이다. 일반적으로 EKS를 명령줄로 사용한다.

클러스터의 이름, 버전 (기본 1.21), 생성해놓은 클러스터 서비스 역할을 지정한다.

CNI는 Amazon VPC를 사용한다.

로깅을 구성할 수 있다.
역할을 별도로 만들어줘야 하는 번거로움이 있고 고급 설정은 eksctl에서만 가능하므로 AWS 콘솔에서 작업하는 경우는 많지 않다.

🚀 eksctl 명령줄 사용하기

aws clieksctl 명령어가 있어야 한다. 설치 방법은 여기를 참고한다.


eksctl
eksctl 도구는 Amazon이 만든 도구가 아니다.
weaveworks사가 만들었고 이 오픈소스를 Amazon이 자사 정식 설치 방법으로 채택하였다.

aws configure

IAM으로 사용자를 만들고 .csv 파일로 aws configure을 설정한다.


클러스터 구축

PS C:\Users\Shinsohui> eksctl create cluster --name myeks --nodes=3 --region=ap-northeast-2

클러스터명과 워커 노드의 개수 및 가용 영역을 지정하면 간단하게 명령줄로 클러스터를 구축할 수 있다.
참고로 EKS가 워커 노드에 사용하는 기본 EC2 인스턴스 타입은 m5.large이다.

만약 클러스터명을 지정하지 않으면 랜덤하게 자동 생성된 이름이 부여된다.
리전을 지정하지 않으면 us-west-2에 생성되며 별도의 전용 VPC가 생성된다.


클러스터가 구축되는 과정을 살펴보자

2022-05-30 23:01:24 [ℹ]  using region ap-northeast-2
2022-05-30 23:01:24 [ℹ]  setting availability zones to [ap-northeast-2d ap-northeast-2b ap-northeast-2c]
2022-05-30 23:01:24 [ℹ]  subnets for ap-northeast-2d - public:192.168.0.0/19 private:192.168.96.0/19
2022-05-30 23:01:24 [ℹ]  subnets for ap-northeast-2b - public:192.168.32.0/19 private:192.168.128.0/19
2022-05-30 23:01:24 [ℹ]  subnets for ap-northeast-2c - public:192.168.64.0/19 private:192.168.160.0/19

ap-northeast-2 리전을 사용하고 가용영역은 노드를 3개 지정했기 때문에 2b, 2c, 2d를 선택한 것을 볼 수 있다.
각 노드마다 각각 3개의 public, private 서브넷을 만들고 있다.

 

2022-05-30 23:01:24 [ℹ]  nodegroup "ng-622f259a" will use "" [AmazonLinux2/1.22]

아마존 리눅스 이미지를 이용해 노드 그룹을 생성한다.

2022-05-30 23:01:24 [ℹ]  using Kubernetes version 1.22

eksctl에서는 기본 버전이 1.22이다.

2022-05-30 23:01:54 [ℹ]  waiting for CloudFormation stack "eksctl-myeks-cluster"
2022-05-30 23:02:25 [ℹ]  waiting for CloudFormation stack "eksctl-myeks-cluster"
2022-05-30 23:03:25 [ℹ]  waiting for CloudFormation stack "eksctl-myeks-cluster"

eksctl로 클러스터를 생성하면 스택을 만든다.

AWS 콘솔 창으로 가서 확인해보자


CloudFormation(AWS에서 사용하는 IaC 도구)에 보면 스택이 생성중인 것을 볼 수 있다.

CloudFormation은 Json 형식으로 작성한다.

2022-05-30 23:01:24 [ℹ]  building cluster stack "eksctl-myeks-cluster"
2022-05-30 23:01:24 [ℹ]  deploying stack "eksctl-myeks-cluster"

자동으로 클러스터 스택을 만들며 deploy한다.

 

스택이 모두 만들어지면 CloudFormation 콘솔에서 확인할 수 있다. 이후 컨트롤 플레인을 만드는 작업을 진행한다.

🚀 yaml 파일 사용하기

cluster.yaml

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: basic-cluster
  region: eu-north-1

nodeGroups:
  - name: ng-1
    instanceType: m5.large
    desiredCapacity: 10
  - name: ng-2
    instanceType: m5.xlarge
    desiredCapacity: 2


클러스터를 생성하기 위한 yaml 파일을 작성할 수 있다.

네비게이션바의 Examples를 클릭하면 다양한 예제 파일이 있는 github 레포지토리가 있다.

Introduction에는 간단한 사용법들이 나와있고 Usage에는 상세한 방법이 나와있다.
Config file schema를 클릭하면 yaml 파일을 작성하는 방법이 구체적으로 나와있다. (kubectl explain과 동일한 기능이다.)

컨트롤 플레인 구성과 워커 노드 구성이다.
즉, 하나의 클러스터를 생성하면 기본적으로 2개의 스택이 만들어진다.

EC2 인스턴스 3개가 ap-northeast-2b, ap-northeast-2c, ap-northeast-2d에 각각 생성됐다.

기본 80G로 세팅된 볼륨이 있다.

시작 템플릿이 생성되어 있다.

앞서 보았던 시작 템플릿이 적용되어 만들어진 오토 스케일링 그룹이며 인스턴스가 3개이다. 인스턴스 값을 조정하면 워커 노드를 스케일링 할 수 있다.
필요하면 편집을 통해 워커 노드 개수를 변경할 수 있다.

하나의 VPC가 생성된 것을 볼 수 있다.

총 6개의 서브넷이 만들어지며 public, private 각각 3개씩 만들어진다.

 

인터넷 게이트웨이도 생성되었다.

라우팅 테이블 또한 생성되었다.

2022-05-30 23:18:25 [ℹ]  kubectl command should work with "C:\\Users\\Shinsohui\\.kube\\config", try 'kubectl get nodes'

- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://C2F21659EFE49B16EEC2866604ECE7D9.sk1.ap-northeast-2.eks.amazonaws.com
  name: myeks.ap-northeast-2.eksctl.io

myeks.ap-northeast-2.eksctl.io 이름으로된 클러스터가 자동으로 등록되어있다.

 

users:
- name: eksadmin@myeks.ap-northeast-2.eksctl.io
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      args:
      - token
      - -i
      - myeks
      command: aws-iam-authenticator
      env:
      - name: AWS_STS_REGIONAL_ENDPOINTS
        value: regional
      - name: AWS_DEFAULT_REGION
        value: ap-northeast-2
      interactiveMode: IfAvailable
      provideClusterInfo: false

하단에는 IAM 계정과 연결되어 있는 부분이 보인다.

- context:
    cluster: myeks.ap-northeast-2.eksctl.io
    user: eksadmin@myeks.ap-northeast-2.eksctl.io
  name: eksadmin@myeks.ap-northeast-2.eksctl.io

context도 만들어져 있다.

 

PS C:\Users\Shinsohui> kubectl config get-contexts
CURRENT   NAME                                      CLUSTER                          AUTHINFO                                  NAMESPACE
*         eksadmin@myeks.ap-northeast-2.eksctl.io   myeks.ap-northeast-2.eksctl.io   eksadmin@myeks.ap-northeast-2.eksctl.io
          kubernetes-admin@cluster.local            cluster.local                    kubernetes-admin
          minikube                                  minikube                         minikube                                  default

자동으로 eksadmin@myeks.ap-northeast-2.eksctl.io이 선택되어 있다.

 

PS C:\Users\Shinsohui> kubectl get nodes
NAME                                                STATUS   ROLES    AGE   VERSION
ip-192-168-29-128.ap-northeast-2.compute.internal   Ready    <none>   32m   v1.22.6-eks-7d68063
ip-192-168-40-145.ap-northeast-2.compute.internal   Ready    <none>   32m   v1.22.6-eks-7d68063
ip-192-168-70-53.ap-northeast-2.compute.internal    Ready    <none>   32m   v1.22.6-eks-7d68063

세개의 워커 노드가 생성되었다. 컨트롤 플레인은 노출되지 않는다.

PS C:\Users\Shinsohui> kubectl get ns
NAME              STATUS   AGE
default           Active   42m
kube-node-lease   Active   42m
kube-public       Active   42m
kube-system       Active   42m

eksctl로 구성한 클러스터는 반드시 eksctl 명령으로 삭제해야 한다.
eksctl이라는 도구를 빌려 사용했지만 결국 CloudFormation이라는 IaC 도구를 이용한 것이기 때문이다.
따라서 명령줄을 사용해 클러스터를 구축한했다면 콘솔상에서 직접 클러스터를 삭제하면 안된다.
CloudFormation이 배포한 형태와 실제 형태가 달라지게 되어 eksctl이 삭제시 정보를 파악할 수 없게된다.

이제 eksctl을 사용한 클러스터 구축이 완료되었다. 생성된 리소스를 하나씩 살펴보자

PS C:\Users\Shinsohui\aws-eks> kubectl get po -A
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   aws-node-5zfqm             1/1     Running   0          39m
kube-system   aws-node-sswhj             1/1     Running   0          39m
kube-system   aws-node-vfntf             1/1     Running   0          39m
kube-system   coredns-556f6dffc4-rw9gc   1/1     Running   0          48m
kube-system   coredns-556f6dffc4-xsk4l   1/1     Running   0          48m
kube-system   kube-proxy-b27dw           1/1     Running   0          39m
kube-system   kube-proxy-nnz9z           1/1     Running   0          39m
kube-system   kube-proxy-t9tdh           1/1     Running   0          39m
PS C:\Users\Shinsohui\aws-eks> kubectl get po -A -o wide
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE   IP               NODE                                                NOMINATED NODE   READINESS GATES
kube-system   aws-node-5zfqm             1/1     Running   0          40m   192.168.70.53    ip-192-168-70-53.ap-northeast-2.compute.internal    <none>           <none>
kube-system   aws-node-sswhj             1/1     Running   0          40m   192.168.40.145   ip-192-168-40-145.ap-northeast-2.compute.internal   <none>           <none>
kube-system   aws-node-vfntf             1/1     Running   0          40m   192.168.29.128   ip-192-168-29-128.ap-northeast-2.compute.internal   <none>           <none>
kube-system   coredns-556f6dffc4-rw9gc   1/1     Running   0          49m   192.168.38.89    ip-192-168-40-145.ap-northeast-2.compute.internal   <none>           <none>
kube-system   coredns-556f6dffc4-xsk4l   1/1     Running   0          49m   192.168.34.9     ip-192-168-40-145.ap-northeast-2.compute.internal   <none>           <none>
kube-system   kube-proxy-b27dw           1/1     Running   0          40m   192.168.40.145   ip-192-168-40-145.ap-northeast-2.compute.internal   <none>           <none>
kube-system   kube-proxy-nnz9z           1/1     Running   0          40m   192.168.29.128   ip-192-168-29-128.ap-northeast-2.compute.internal   <none>           <none>
kube-system   kube-proxy-t9tdh           1/1     Running   0          40m   192.168.70.53    ip-192-168-70-53.ap-northeast-2.compute.internal    <none>           <none>

aws-nodekube-proxy 파드가 각 노드마다 하나씩 존재하는 것을 볼 수 있다.

aws-node 파드는 AWS EC2 인스턴스와 연결하기 위한 App을 실행하는 파드이다. 따라서 워커 노드의 개수만큼 존재한다.

apiserver, scheduler, etcd를 볼 수 없는 이유는 EKS가 컨트롤 플레인을 관리해주어 접근할 수 없기 때문이다.

 

nginx 이미지를 사용해 3개의 파드를 배포해보자

PS C:\Users\Shinsohui\aws-eks> kubectl create deploy myapp --image nginx --replicas 3
deployment.apps/myapp created

PS C:\Users\Shinsohui\aws-eks> kubectl get deploy,rs,po
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   3/3     3            3           18s

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/myapp-6d8d776547   3         3         3       18s

NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-6d8d776547-4c6pz   1/1     Running   0          18s
pod/myapp-6d8d776547-fkjrd   1/1     Running   0          18s
pod/myapp-6d8d776547-n6c77   1/1     Running   0          18s
PS C:\Users\Shinsohui\aws-eks> kubectl expose deploy myapp --name mysvc --port 80 --target-port 80 --type NodePort
service/mysvc exposed

PS C:\Users\Shinsohui\aws-eks> kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP        53m
mysvc        NodePort    10.100.20.104   <none>        80:30027/TCP   7s

PS C:\Users\Shinsohui\aws-eks> kubectl get svc,ep
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP        53m
service/mysvc        NodePort    10.100.20.104   <none>        80:30027/TCP   12s

NAME                   ENDPOINTS                                            AGE
endpoints/kubernetes   192.168.159.108:443,192.168.161.176:443              53m
endpoints/mysvc        192.168.55.23:80,192.168.7.56:80,192.168.80.240:80   12s
PS C:\Users\Shinsohui\aws-eks> kubectl get nodes -o wide
NAME                                                STATUS   ROLES    AGE   VERSION               INTERNAL-IP      EXTERNAL-IP     OS-IMAGE         KERNEL-VERSION                 CONTAINER-RUNTIME
ip-192-168-29-128.ap-northeast-2.compute.internal   Ready    <none>   44m   v1.22.6-eks-7d68063   192.168.29.128   3.37.30.52      Amazon Linux 2   5.4.190-107.353.amzn2.x86_64   docker://20.10.13
ip-192-168-40-145.ap-northeast-2.compute.internal   Ready    <none>   44m   v1.22.6-eks-7d68063   192.168.40.145   15.164.179.36   Amazon Linux 2   5.4.190-107.353.amzn2.x86_64   docker://20.10.13
ip-192-168-70-53.ap-northeast-2.compute.internal    Ready    <none>   44m   v1.22.6-eks-7d68063   192.168.70.53    13.209.96.138   Amazon Linux 2   5.4.190-107.353.amzn2.x86_64   docker://20.10.13

minikube나 kubespray에는 없는 EXTERNAL-IP가 존재한다.

노드 정보를 보면 EC2 인스턴스의 퍼블릭 ip가 EXTERNAL-IP 인 것을 알 수 있다.

PS C:\Users\Shinsohui\aws-eks> kubectl get deploy,rs,po,svc,ep
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   3/3     3            3           4m13s

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/myapp-6d8d776547   3         3         3       4m13s

NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-6d8d776547-4c6pz   1/1     Running   0          4m13s
pod/myapp-6d8d776547-fkjrd   1/1     Running   0          4m13s
pod/myapp-6d8d776547-n6c77   1/1     Running   0          4m13s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP        56m
service/mysvc        NodePort    10.100.20.104   <none>        80:30027/TCP   3m14s

NAME                   ENDPOINTS                                            AGE
endpoints/kubernetes   192.168.159.108:443,192.168.161.176:443              56m
endpoints/mysvc        192.168.55.23:80,192.168.7.56:80,192.168.80.240:80   3m14s
PS C:\Users\Shinsohui> curl 13.209.96.138:30027


접속 전에 보안 그룹을 설정하는 것을 잊지 말자

PS C:\Users\Shinsohui\aws-eks> kubectl get svc
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP                                                                    PORT(S)        AGE
kubernetes   ClusterIP      10.100.0.1     <none>                                                                         443/TCP        13m
mysvc        LoadBalancer   10.100.68.37   a8390bc24ff5545368a0afffc8ab1985-1246874039.ap-northeast-2.elb.amazonaws.com   80:32659/TCP   29s

서비스 타입을 LoadBalancer로 변경해보자

 

AWS 콘솔에서 classic 유형의 로드밸런서가 생성된 것을 확인할 수 있다.

 

PS C:\Users\Shinsohui\aws-eks> curl a8390bc24ff5545368a0afffc8ab1985-1246874039.ap-northeast-2.elb.amazonaws.com

 

접속 가능하다.

PS C:\Users\Shinsohui\aws-eks> kubectl create -f .\ing.yaml
ingress.networking.k8s.io/myweb-ing created
PS C:\Users\Shinsohui> kubectl get ing
NAME        CLASS    HOSTS         ADDRESS   PORTS   AGE
myweb-ing   <none>   *.sohui.xyz             80      43s

Ingress를 만들었지만 주소 할당이 안되며 사용할 수 없다.

우리가 Ingress를 사용하기 위해서는 nginx ingress controller라는 것이 있어야 하는 것처럼 AWS에서는 ALB controller라는 것이 있어야 한다.

addon으로 설치되어 있어야 하는데 현재는 설치하지 않았으므로 작동하지 않는 것이다.
AWS 콘솔 상에서 계속 새로고침을 해도 생성되지 않는다.

PS C:\Users\Shinsohui\aws-eks> kubectl get sc
NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
gp2 (default)   kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  27m

gp2라는 이름의 스토리지 클래스가 있다.
WaitForFirstConsumer 모드이므로 컨슈머가 있기 전까지 볼륨을 만들지 않는다.

 

PS C:\Users\Shinsohui\aws-eks> kubectl describe sc gp2
Name:            gp2
IsDefaultClass:  Yes
Annotations:     kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"},"name":"gp2"},"parameters":{"fsType":"ext4","type":"gp2"},"provisioner":"kubernetes.io/aws-ebs","volumeBindingMode":"WaitForFirstConsumer"}
,storageclass.kubernetes.io/is-default-class=true
Provisioner:           kubernetes.io/aws-ebs
Parameters:            fsType=ext4,type=gp2
AllowVolumeExpansion:  <unset>
MountOptions:          <none>
ReclaimPolicy:         Delete
VolumeBindingMode:     WaitForFirstConsumer
Events:                <none>

default 스토리지 클래스로 AWS EBS를 사용하는 프로비저너가 있다. 기본 설정된 타입은 gp2이다.

 

PS C:\Users\Shinsohui\aws-eks> kubectl get po,pv,pvc
NAME          READY   STATUS    RESTARTS   AGE
pod/pod-pvc   1/1     Running   0          19s

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   REASON   AGE
persistentvolume/pvc-ce41394c-0c55-40bf-844d-0d8752006414   10Gi       RWO            Delete           Bound    default/mypvc-dynamic   gp2                     13s

NAME                                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/mypvc-dynamic   Bound    pvc-ce41394c-0c55-40bf-844d-0d8752006414   10Gi       RWO            gp2            22s

클라우드에서는 비용 문제로 인해 WaitForFirstConsumer 모드가 기본이다.

 

AWS 콘솔상에서도 생성된 gp2 타입의 EBS 볼륨을 확인할 수 있다.


리소스를 삭제하면

PS C:\Users\Shinsohui\aws-eks> kubectl top nodes
error: Metrics API not available

metrics server가 없어서 불가하다.

myeks.yaml

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: myeks-custom
  region: ap-northeast-2
  version: "1.22"

# AZ
availabilityZones: ["ap-northeast-2a", "ap-northeast-2b",  "ap-northeast-2c"] # 사용할 가용 영역 지정

# IAM OIDC & Service Account # eks와 AWS IAM 계정 연동 
iam:
  withOIDC: true # eks 입장에서 AWS IAM은 외부 서버
  serviceAccounts: 
    - metadata:
        name: aws-load-balancer-controller # addon 추가할 때 필요함
        namespace: kube-system
      wellKnownPolicies:
        awsLoadBalancerController: true
    - metadata:
        name: ebs-csi-controller-sa # sa 계정의 이름 
        namespace: kube-system
      wellKnownPolicies: # 해당 기능을 켜면 계정에 해당되는 정책 자동 부여
        ebsCSIController: true
    - metadata:
        name: cluster-autoscaler # sa 계정의 이름 
        namespace: kube-system 
      wellKnownPolicies:
        autoScaler: true

# Managed Node Groups
managedNodeGroups: # 워커 노드의 그룹 
  # On-Demand Instance
  - name: myeks-ng1
    instanceType: t3.medium
    minSize: 2
    desiredCapacity: 3 # 3개의 Managed Node가 구성된다.
    maxSize: 4
    privateNetworking: true # private network에 배치하기 위함
    ssh: # 접속하기 위한 ssh key
      allow: true
      publicKeyPath: ./keypair/myeks.pub
    availabilityZones: ["ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c"]
    iam: # 3가지의 정책을 node에도 부여
      withAddonPolicies: 
        autoScaler: true
        albIngress: true
        cloudWatch: true # 로그를 남기기 위함
        ebs: true

# Fargate Profiles # EC2 인스턴스를 사용하지 않는 형태
fargateProfiles:
  - name: fg-1
    selectors:
    - namespace: dev
      labels:
        env: fargate


# CloudWatch Logging # 컨트롤 플레인이 숨겨져 있어 직접 관리하지 못함
cloudWatch: # 컨트롤 플레인의 구성 요소들은 로그를 수집하지 못함
  clusterLogging:
    enableTypes: ["*"] # 컨트롤 플레인에서 수집할 수 있는 모든 것을 수집
  • api
  • audit
  • authenticator
  • controllerManager
  • scheduler
  • EKS Anywhere - 타사 클라우드, on-prem의 쿠버네티스 클러스터를 등록하고 관리한다.
  • EKS EC2
  • EC2 사용하지 않는 방식 Fargate

PS C:\Users\Shinsohui\aws-eks> eksctl get clusters
NAME            REGION          EKSCTL CREATED
myeks           ap-northeast-2  True
myeks-custom    ap-northeast-2  True

 

eksctl-myeks-cluster를 지울 때는 워커 노드가 먼저 지워지고 컨트롤 플레인이 지워진다.

새로운 컨트롤 플레인과 워커 노드 그리고 4개의 sa가 생성되었다.

PS C:\Users\Shinsohui\aws-eks> eksctl get fargateprofile --cluster myeks-custom
NAME    SELECTOR_NAMESPACE      SELECTOR_LABELS POD_EXECUTION_ROLE_ARN                                                 SUBNETS                                                                          TAGS    STATUS
fg-1    dev                     env=fargate     arn:aws:iam::471702632719:role/eksctl-myeks-custom-cluste-FargatePodExecutionRole-19KH5C7ECILHU subnet-04f094d1f018a9863,subnet-0690006170697ddd6,subnet-0e2a044a24a4c5c59      <none>  ACTIVE

해당 클러스터에는 fg-1라는 fargateprofile이 있다.

 

PS C:\Users\Shinsohui\aws-eks> eksctl get nodegroup --cluster myeks-custom
CLUSTER         NODEGROUP       STATUS  CREATED                 MIN SIZE        MAX SIZE        DESIRED CAPACITY       INSTANCE TYPE    IMAGE ID        ASG NAME                                                TYPE
myeks-custom    myeks-ng1       ACTIVE  2022-05-31T14:18:59Z    2               4               3                      t3.medium        AL2_x86_64      eks-myeks-ng1-e6c08d3d-f18d-78cb-5fbf-1f97663fc565      managed

myeks-costom 밑에 myeks-ng1 이라고하는 클러스터가 최소 2개, 최대 4개, 현재 3개 있다.

 

PS C:\Users\Shinsohui\aws-eks> eksctl get iamserviceaccount --cluster myeks-custom
NAMESPACE       NAME                            ROLE ARN
kube-system     aws-load-balancer-controller    arn:aws:iam::471702632719:role/eksctl-myeks-custom-addon-iamserviceaccount-Role1-14HU7OMA2KR7D
kube-system     aws-node                        arn:aws:iam::471702632719:role/eksctl-myeks-custom-addon-iamserviceaccount-Role1-WUU61L6CCZUW
kube-system     cluster-autoscaler              arn:aws:iam::471702632719:role/eksctl-myeks-custom-addon-iamserviceaccount-Role1-WPSNTCTVMI7L
kube-system     ebs-csi-controller-sa           arn:aws:iam::471702632719:role/eksctl-myeks-custom-addon-iamserviceaccount-Role1-14E4KY8FQBRLH

생성된 4개의 IAM sa를 확인할 수 있다.

PS C:\Users\Shinsohui\aws-eks> kubectl get sa -n kube-system

쿠버네티스에도 sa 계정이 존재하며 AWS IAM에도 계정이 만들어져 권한이 부여된다.

728x90