본문 바로가기

AWS/EKS

1) EKS 따라해보기.

반응형

docker 관련해서 공부할때 gcp에 instance를 만들고 k8s를 설치하고 pod배포 하는것까지는 해봤는데

 

aws의 managed k8s인 eks도 궁금해서 eks를 만들어 공부해 보기로 했다.

 

실제로 eks는 설치는 AWS의 매커니즘에 익숙한 사람이면 쉽게 할수 있는 수준이긴 했다.

 

아래 내용은 AWS EKS document를 참조해서 공부한 내용이다.

docs.aws.amazon.com/ko_kr/eks/latest/userguide/what-is-eks.html

 

이란 무엇인가요?Amazon EKS? - Amazon EKS

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

1) VPC 네트웍 설정

2) EKS는 master node에 접속없이 managed 이기때문에 eks 설정과 테스트를 위한

   ec2 instance하나를 만든다.

3) eks에 필요한 IAM 설정

4) eks cluster 생성 및 worker node 구성.

5) 테스트용 application 배포 및 service 구성

6) ELB 설정으로 실행 테스트

 

저런 순서로 설정을 하고 테스트까지 해보도록 하자.

 

1) VPC 네트웍 설정

docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-public-private-vpc.html

 

Amazon EKS 클러스터용 VPC 생성 - Amazon EKS

VPC에 아웃바운드 인터넷 액세스(예: NAT 인스턴스, NAT 게이트웨이, VPN 또는 Direct Connect)가 없는 경우 추가 요구 사항이 있습니다. 클러스터 인증 기관 및 클러스터 API 엔드포인트를 노드에 제공하

docs.aws.amazon.com

EKS에 필요한 VPC 설정을 Cloud Formation 기능을 통해 한번에 설정이 되게 가이드 되어 있다.

 

해당 가이드에 따라 설정을 하게 아래 그림과 stack이 만들어지고 해당 stack으로 만들어지는 리소스들이 보인다.

 

 2) EKS는 master node에 접속없이 managed 이기때문에 eks 설정과 테스트를 위한

   ec2 instance하나를 만든다.

 

여기서는 AWS의 Cloud9이라는 IDE를 설정하고 사용해도록 하자.

Cloud9 메뉴에 들어가서 Create 누르고 설정 정보를 입력한다.

이때 주의사항으로 VPC를 선택할때 위에서 EKS용으로 사용한 VPC를 선택해야 한다. 

 

3) eks에 필요한 IAM 설정

 

eks cluster에 접근 하기 위해 AmazonEKSClusterPolicy 를 추가한다.

 

work node 관련 Role은 다음 cluster를 추가하고 work node를 생성할때 같이 추가하자.

 

4) eks cluster 생성 및 worker node 구성

위 까지 잘했으면 EKS는 생성은  간단하다 . 메뉴에서 EKS를 들어가서 클러스터 생성 버튼을 클릭하고 

위와 같이 기본 정보를 입력.

다음 눌러 앞에 1번에서 생성한 VPC 관련 네트워킹 정보를 선택한다.  그리고 다음을 눌러 생성.

 

 

그다음 work node를 추가해 보자.

work node도 cloud formation을 이용해서 추가해보자.

 

https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml 

를 입력하고 다음 눌러 정보를 입력한다.

 

여기서 마찬가지로 ClusterControllPlaneSecurityGroup정보에다 앞에서 생성한 SG를 선택.

 

그리고 NodeInstanceType 부분의 최소한 t2.small이상을 선택하자  t2.small 이상이여야만 한 work node에 

pod가 4개는 만들어진다. 

 

해당 stack을 생성하고 나면 아래와 같이 된다.

 

여기서 보면 자동으로 Node에 필요한 Role이 추가되는것을 확인할수 있다. 그리고 work node로 선택한것 만큼

ec2 instance로 생성된것을 확인이 된다.

 

 

여기까지 하고 이제 앞에서 생성한 Cloud9 IDE에 접속해서 kubectl과 aws 관련 설정을 해서 eks에 접속을 해보자.

먼저 kubectl 설치를 하자.

# 쿠버네티스를 스토리지에서 가져옴
$ curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.14.6/2019-08-22/bin/linux/amd64/kubectl

# 퍼미션 적용
$ chmod +x ./kubectl

# kubectl 바이너리 파일을 적절한 디렉토리에 옮기고 path 지정.
$ mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH

# bash profile 에 적용
$ echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc
# cli 설치
$ pip3 install awscli --upgrade --user

# version 확인
$ aws --version
$ aws configure
  • AWS Access Key ID: 위에서 IAM 생성 시 만든 access key
  • AWS Secret Access Key: 위에서 IAM 생성 시 만든 secret key
  • Default region name: ap-northeast-2
  • Default output format: json

그다음

# aws-iam-authenticator 설치
$ curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.14.6/2019-08-22/bin/linux/amd64/aws-iam-authenticator

# 권한 설정
$ chmod +x ./aws-iam-authenticator

# Path 설정
$ mkdir -p $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$HOME/bin:$PATH

# 환경 변수에 추가
$ echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc

 

해당 아래는 해당 사용자로 클러스트에서 인증 토큰을 잘 가져오는지 테스트하는것이다. 

$ aws-iam-authenticator token -i {클러스터 이름} | python3 -m json.tool

그림처럼 정상적으로 cluster에 접속이 된다.

 

그다음 eks 관련 설정을 해준다.

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

그리고 

$ mkdir -p ~/.kube && vi ~/.kube/kubeconfig
apiVersion: v1
clusters:
- cluster:
    server: <endpoint-url>
    certificate-authority-data: <base64-encoded-ca-cert>
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
        - "token"
        - "-i"
        - <cluster-name>

해당 부분을 아래 eks 클러스터 정보에서 찾아서 수정하고 저장한다.

 

그리고 환경변수에 추가한다.

$ export KUBECONFIG=$KUBECONFIG:~/.kube/kubeconfig

$ echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/kubeconfig' >> ~/.bashrc

이제 정상적으로 설치 되었는지 확인해보자. 

정상적으로 설치 된것을 확인했다. 

여기까지 아직 work node 생성했던것을 확인해 보면 work node가 연결 되지 않는것이 보인다. 

 

docs.aws.amazon.com/ko_kr/eks/latest/userguide/troubleshooting.html

 

Amazon EKS 문제 해결 - Amazon EKS

해당 위치에 스크립트가 없으면 CNI 컨테이너를 실행할 수 없습니다. 다음 명령을 사용하여 스크립트를 수동으로 다운로드하고 실행할 수 있습니다. curl -O https://raw.githubusercontent.com/awslabs/amazon-ek

docs.aws.amazon.com

여기를 보면 아래 페이지에서 워크노드가 클러스트에 조인하기위해 aws-auth-cm.yaml을 받아서 클러스트에 deploy해야 한다고 되어 있다.

docs.aws.amazon.com/ko_kr/eks/latest/userguide/launch-workers.html

 

자체 관리형 Amazon Linux 노드 시작 - Amazon EKS

아웃바운드 인터넷 액세스 없이 프라이빗 VPC 내에서 노드를 시작한 경우, 노드가 VPC 내에서 클러스터에 조인하도록 활성화해야 합니다.

docs.aws.amazon.com

해당 가이드에 따라 aws-auth-cm.yaml을 받아서 열어 보면 

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: <ARN of instance role (not instance profile)>
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes

위와 같이 되어 있는데 roleearn 부분의 값은 우리가 worknode를 cloud formation으로 만들었을때 해당 

stack의 출력탭을 열어 보면 NodeInstanceRole 이라는 키의 값을 넣어 주면 된다.

 

이제 정상적으로 work node가 클러스트에 연결 되어 진것을 확인 했다.

 

 

'AWS > EKS' 카테고리의 다른 글

2) EKS Application 배포하기  (0) 2021.03.06