[AWS] EKS 시작하기(2) - EKS 시작
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 추가
브라우저 접속확인!