Kubernetes 기반 EKS 환경 구성, 웹 서비스 구축

2021. 08. 02.

PROJECT

가상의 고객사 시스템 구축과 운영

  • SI

    • AWS 클라우드 환경 구성
    • 쿠버네티스 기반 EKS 환경 구성, 웹서비스 구축
  • SM

    • 로그 수집을 위한 EFK Stack 구축
    • CloudWatch 알람을 Slack으로 전송하여 실시간 모니터링

Work

  • EKS 환경구성
  1. EKS 클러스터와 NodeGroup 생성
    • 1.17 버전으로 생성
  2. Nginx 서비스 배포
    • Nginx deployment 배포
    • Nginx service 배포

 Nginx란?

Nginx

웹 서버 소프트웨어이다. 로드밸런싱을 지원한다.

로드밸런싱

하나의 웹 서비스에 클라이언트가 많아질 때(트래픽이 많을 때), 여러 대의 서버를 통해 요청을 처리함으로써 부하 문제를 해결하는 서비스이다. 서버의 로드율, 부하량, 속도저하 등을 고려하여 적절하게 서버들에게 분산처리를 해야 한다.

Nginx 서비스를 배포하려면

1. Deployment를 정의하여 Nginx 컨테이너를 담은 pod를 띄운다.
2. Pod를 LoadBalancer Type의 Service를 통해 배포한다.
3. 자동 생성된 ELB를 통해 Nginx가 배포된 것을 확인한다.

 EKS 환경구성

1. yum을 업데이트하고 aws cli version이 1.18인지 확인한다.

* yum: RPM 기반의 패키지 매니저이다. 패키지를 다루는 작업을 편리하고 안전하게 수행하기 위해 사용되는 툴이다(npm 같은 것).

# sudo su - ec2-user
# sudo yum update		// yum update
# aws --version			// aws-cli/1.18 확인

2. IAM에서 EC2에 적용할 admin role을 만든다. [ IAM > 역할 > 역할 만들기 ]

3. [ AWS 서비스 > EC2 ]

4. [ AdministratorAccess 선택 ] 한 뒤 태그는 넘긴다.

5. 이름은 mission-admin-Role으로 설정했다.

6. 인스턴스로 가서 이전에 생성한 NAT 인스턴스를 선택하고 우클릭 > IAM 역할 수정

7. 새로 생성한 IAM 역할과 인스턴스를 연결해준다.

8. Bastion을 kubectl 명령어를 수행하는 workspace로 사용할 것이다. Bastion에 kubectl를 설치한다.

# curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl
// 1.8버전의 kubectl 다운로드

# chmod +x ./kubectl
//실행권한 추가

# sudo mv ./kubectl /usr/local/bin/kubectl 
//PATH가 설정된 디렉터리로 변경

# kubectl version --client
//설치 확인

 EKS cluster 생성

1. eksctl를 설치한다. eksctl는 EKS 클러스터 작업 시 사용하는 명령 라인 툴이다.

# curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp 
// eksctl 설치파일 다운로드

# sudo mv /tmp/eksctl /usr/local/bin 
// PATH가 설정된 디렉터리로 변경

# eksctl version 
//설치 확인

2. NodeGroup 용 ssh 키를 생성한다. EC2 유저를 사용하는 이유가 ssh를 위해서이다. 

# aws configure set region ap-northeast-2 //region 설정
# cd .ssh		//.ssh 폴더로 이동
# ssh-keygen		//키 생성
// 모두 enter

3. 생성된 공개키를 사용 중인 EC2 리전으로 업로드한다.

# aws ec2 import-key-pair --key-name "workernode-key" --public-key-material fileb://~/.ssh/id_rsa.pub

생성된 워커노드 키는 EC2 키페어에서 확인할 수 있다.

4. eksctl 명령어를 이용하여 eks cluster와 workerNode를 생성한다.

# eksctl create cluster --name mission-cluster --version 1.17 --region ap-northeast-2 --nodegroup-name mission-wn --node-type t3.medium --nodes 1 --nodes-min 1 --nodes-max 1 --ssh-access --ssh-public-key workernode-key --managed

커맨드 라인이 복잡하므로 오타에 주의하도록 하자. 만약 오타로 클러스터를 잘못 생성했다면 EKS 클러스터에서 잘못 생성한 클러스터를 찾은 뒤 eksctl delete 명령어로 삭제하도록 한다. 삭제 명령어에 대해선 이 포스팅 마지막에 남겨둘 것이다.

5. kubectl get node로 생성된 node를 확인한다.

 Nginx 서비스 배포

1. Nginx-Deployment를 생성한다.

# cat <<EOF > ~/nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
EOF

* 디플로이먼트 참고자료

디플로이먼트

2. Nginx 파드를 배포한다.

# kubectl apply –f nginx-deployment.yaml	//배포
# kubectl get pod 				//생성된 파드 확인

파드 확인

3. Nginx Service yaml을 생성한다. type은 LoadBalancer이다.

# cat <<EOF > ~/nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    run: my-nginx
  type: LoadBalancer
EOF

4. Service를 배포한다. 로드밸런서 타입으로 생성했기 때문에 CLB(Classic Load Balancer) 타입의 ELB가 생성되었다.

# kubectl apply –f nginx-service.yaml 	//배포
# kubectl get service 			//배포된 서비스 확인

5. [ EC2 > 로드밸런서 > DNS 이름 .com까지 복사 ] 한 뒤 주소 창에 붙여넣어 웹에서 EXTERNER-IP:80으로 Nginx 접속을 확인한다.

 Cluster와 NodeGroup 삭제

실무 환경에서는 계속 진행하겠지만, 우리는 실습 상황 이외에 비용이 부과되면 안되기 때문에 삭제해준다.

1. Nginx-service와 Nginx-Deployment를 삭제한다. 

# kubectl delete –f nginx-service.yaml 	
# kubectl delete –f nginx-deployment.yaml
  • [ EC2 > 로드밸런서 ] 에서 CLB 삭제를 확인한다.

2. EKS cluster와 NodeGroup 삭제

# eksctl delete cluster --region ap-northeast-2 --name=mission-cluster

  • [ EKS > Cluster ] 에서 클러스터 삭제를 확인한다.
  • [ EC2 > AutoscalingGroup ] 에서 NodeGroup 삭제를 확인한다.

좋은 웹페이지 즐겨찾기