Infra/AWS

[AWS] EKS 시작하기(2) - EKS 시작

하우아유두잉 2020. 7. 24. 19:10

 

 

 

2020/07/24 - [aws] - [AWS] EKS 시작하기(1) - 사전 준비과정 (ECR & Tools)

이번엔 앞 포스터에 이어서

EKS로 서버를 배포해본다.

 

 

 

 

 

 


IAM Role 생성

 

 

EKS 생성시 적용시킬 Role을 만든다.

 

'Create role' 버튼 클릭

AWS service -> EKS -> EKS = Cluster 선택

 

다음

 

다음

완료

 


CloudFormation Stack 생성

 

Create stack -> With new resources(standard)

 

아래 주소 복사

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-06-10/amazon-eks-vpc-private-subnets.yaml

Amazon S3 URL에 붙여넣기

이름 지정

파라메터 기본 유지

다음

생성!

Resources 탭에서 확인

subnet: Private 2개 / public 2개

 

 

 


 

EKS Cluster 생성

metadata / vpc.id / vpc.subnets 각각 입력

// cluster.yml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: EKS-Demo-Cluster
  region: ap-northeast-2

vpc:
  id: vpc-09ee0ce943b8c8d63
  cidr: "192.168.0.0/16"
  subnets:
    public:
      ap-southeast-1a:
        id: subnet-00cf893
      ap-southeast-1b:
        id: subnet-0cd40d2
    private:
      ap-southeast-1a:
        id: subnet-007c9552
      ap-southeast-1b:
        id: subnet-046c55

nodeGroups:
  - name: EKS-public-workers
    instanceType: t2.medium
    desiredCapacity: 2
  - name: EKS-private-workers
    instanceType: t2.medium
    desiredCapacity: 1
    privateNetworking: true

 

 

 

 

 

 

권한을 추가해줘야한다.

(나의 경우 관리자권한 하나로 끝냈다.)

EKS 클러스터 생성 명령어

$ eksctl create cluster -f cluster.yml --kubeconfig=~/.kube/config 

확인

 

EC2 인스턴스 확인

 

 

 

에러 발생

$ kubectl get svc

Unable to connect to the server: dial tcp 192.168.99.100:8443: i/o timeout

 

 

$ kubectl config view

 

minikube를 설치하여 에러 해결

$ brew install minikube
$ brew link minikube
$ minikube start

 

또 다른 에러

$ kubectl get svc

error: You must be logged in to the server (Unauthorized)

 

 

참고

 

 

$ aws sts get-caller-identity

 

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

 

$ kubectl config view --minify

 

 

다시 명령

$ kubectl get svc

정상 동작 확인

 

 

 

 

 

 

deployment.yml 파일 작성

// deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-demo
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: back-end
          image: 42323423423.dkr.ecr.ap-northeast-2.amazonaws.com/eks-demo:latest
          ports:
            - containerPort: 3000

 

 

 

배포승인

$ kubectl apply -f deployment.yml

deployment.apps/server-demo created

 

확인

$ kubectl get deployments

시간이지나면 바뀜 

만약 상태가 계속 바뀌지 않을 경우

node.js 서버가 제대로 동작하는지 로컬에서 확인해본다.

 

 

 

 

service.yml 파일 작성

만약 로드밸런서 사용시, spec.type을 NodePort에서 LoadBalancer로 바꿔준다.

// service.yml
apiVersion: v1
kind: Service
metadata:
  name: backend-service
spec:
  type: NodePort
  selector:
    app: web
  ports:
    - nodePort: 31479
      port: 8080
      targetPort: 3000

서비스 승인

$ kubectl apply -f service.yml

service/backend-service created

 

서비스 확인

$ kubectl get services

 

pods 확인

$ kubectl get pods -o wide

 

node 확인

public node의 external-ip 확인(이 EC2 인스턴스 주소로 접속한다)

$ kubectl get nodes -o wide

 

public EC2 인스턴스의 

Security Group에 inbound 추가

 

 

브라우저 접속확인!

http://13.124.88.32:31479/