김붕어87 2022. 5. 3. 18:31
반응형

EKS (Elastic Kubernetes Service) 이란?


AWS kubernetes 시스템이다.

AWS kubernetes은 마스터노드와 제어 영역을 설치 및 운영할 필요 없이 쿠버네티스 환경을 사용 할 수 있다.

> kops으로 kubernetes를 구축하게되면, 마스터 노드 3대 이상 서버를 관리해줘야하고, 제어 영역(통신 방법, etcd 등)를 관리 및 설정해줘야한다.

 

 

kubernetes 이란 ?


kubernetes는 구글에서 2014년 오픈소스 공개

여러개의 마스터 노드(3개 이상)와 워커 노드로 구분된다.

kubernetes 링크 : https://kubernetes.io/

 

마스터 노드 기능

> 워커 노드와 쿠버네티스 클러스터를 관리한다.

> API server : 사용자와 컨트롤 플레인과 통신

> scheduler : node. pod 감지 및 pod 배포 관리(스케줄링 결정 요소에 따라서)

> controller manager : 구성 요소 복제, 워커 노드 추척, 노드 장애처리 등

> etcd : 분산 데이터 스토리지

 

워커 노드

> 워커 노드에서 pod를 배치하고 구동해준다.

> kubelet : 워커 노드의 pod에서 컨테이너 동작 관리

> kube-proxy : 워커 노드의 pod으로 트래픽 포워드 역할 (네트워크 규칙)

> pod : pod안에 한개 이상의 docker 컨테이너를 관리

> 워커 노드는 EKS 클러스터 API 서버 엔드포인트를 통해 클러스터의 제어 영역에 연결 및 제어

 

 

EKS 구축


EKS 구축 링크 : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/getting-started.html

 

EKS 설치 목차

1. 네트워크 구축 (VPC, subnet, SG 등)
> vpc 생성 

> SG 생성

2. EKS 클러스터 Role 생성

3. EKS 클러스터 생성

4. 워커노드 생성

5. EKS 클러스터 접속

 

 

1. 네트워크 구축

  • VPC : ekstest-dev-vpc
    DNS 호스트 이름 편집 : True
    DNS 확인 편집 : True

  • subnet : private-subnet-a, private-subnet-b, db-subnet-a, db-subnet-b, mgmt-subnet
    private subnet :  워커노드 EC2 생성
    db subnet : RDS 생성

  • NATGATEWAY : private subnet EC2가 외부로 나갈 수 있도록 설정
    Name : ekstest-private-nat
    subnet : mgmt-subnet

  • public routetable
    Name : ekstest-publiczone-rtb
    attachment : IGW
  • private routetable
    Name : ekstest-privatezone-rtb
    attachment : NAT

  • SG

ekstest-eks-sg (EKS 클러스터 SG그룹)

 

2. EKS 클러스터 Role 생성

EKS 클러스터 IAM 생성

> role Name : eksClusterRole-ekstest

> Policy : AmazonEKSClusterPolicy

워크노드 IAM 생성

> role Name : AmazonEKSNodeRole-ekstest

> Policy : AmazonEKSWorkerNodePolicy, AmazonEC2ContainerRegistryReadOnly, AmazonEKS_CNI_Policy

 

3. EKS 클러스터 생성

> EKS Name : ekstest-eks

> version : 1.21

> EKS role Name : eksClusterRole-ekstest

> VPC : ekstest-dev-vpc

> subnet : ekstest-dev-privatezone-2a, ekstest-dev-privatezone-2c

> SG : ekstest-eks-sg

> 클러스터 엔드포인트 액세스 : 퍼블릭 및 프라이빗

 

4. 워커노드 생성

> 워커노드는 3가지 방식이 있다. (EKS관리형 노드그룹, 자체 관리형 노드, AWS Fargate)

> EKS 관리형 노드 그룹은 최신 AMI 이미지 버전이 나오면 클릭한번이면 업데이트를 수행할 수 있다.

> 자체 관리형 노드는 tag 설정 필요, BootstrapArguments 인수값 별도 설정(레이블, 테인트 등)

> 자세한 내용은 링크 참조 : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eks-compute.html

 

EKS 관리형 노드 그룹 생성

> Name : ekstest-workernode-service1

> node IAM role : AmazonEKSNodeRole-ekstest

> subnet : ekstest-private-2a, ekstest-private-2c
> type : c5.large

 

 

5. EKS 클러스터 접속

> kubectl version 1.21 설치

  1. 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

> kubeconfig 생성

kubectl api 명령어를 날리는 EC2의 아이피를 EKS security group에 443 port 허용해줘야한다.
aws eks update-kubeconfig --region region-code --name cluster-name

 

aws sts get-caller-identity
> 올바른 자격 증명 확인 명령어 (eks 클러스터 생성자인지 확인)

aws eks update-kubeconfig --region ap-northeast-2 --name ekstest-eks

[ kubectl alias 설정 ]
vi ~/.bashrc
alias k='/root/bin/kubectl'

k version

k get svc
> kubernetes service 내용 확인 (접근 여부 확인)

k get no
NAME                                                 STATUS   ROLES    AGE   VERSION
ip-200-200-100-102.ap-northeast-2.compute.internal   Ready    <none>   49s   v1.21.5-eks-9017834
ip-200-200-100-103.ap-northeast-2.compute.internal   Ready    <none>   50s   v1.21.5-eks-9017834
ip-200-200-100-236.ap-northeast-2.compute.internal   Ready    <none>   43s   v1.21.5-eks-9017834
> 워커노드 확인

 

# 특이사항 : error: You must be logged in to the server (Unauthorized)

> kubectl 명령을 통해 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 액세스하려고 하면 다음 권한 부여 오류가 발생합니다. "error: You must be logged in to the server (Unauthorized)."

> EKS 클러스터 생성자에게만 클러스터를 구성할 system:masters 권한이 있음

> aws-auth에 권한 추가 필요

 

 

 


 

2. 클러스터 Role 생성

클러스터 Role

반응형