[AWS Cloud 구축 및 운영 Mini Project] 02. 구축된 쿠버네티스 환경에서 Nginx 서비스 배포하기

leny·2021년 5월 31일
0
post-thumbnail

✏️ 글의 구성

  1. 쿠버네티스 환경 구축
    1-1) EKS cluster 생성
    1-2) Worker node group 생성
  2. Nginx 서비스 배포

.
.
.
.

그럼 본격적으로 시작하기 전에, 쿠버네티스라는 건 뭐고, 쿠버네티스라는게 왜 등장했는지 개념부터 짚고 넘어가자.

1. 쿠버네티스 환경 구축

1. Kubernetes (쿠버네티스)

  • 컨테이너 orchestration tool (like "docker swarm")
    즉, 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼 - 컨테이너 관리 툴! 이라고 이해하면 되겠다.

if docker 가 컨테이너 기반의 가상화를 실현한 플랫폼이라면, docker container를 관리하는 것이 Kubernetes이다.

💁🏻‍♀️ 아래와 같이 "쿠버네티스가 나오게 된 과정"(?) 계기에 대하여 설명해보았다!








그러면 이제, 쿠버네티스 클러스터 아키텍처(kubernetes cluster architecture) 에 대해 살펴보자.
쿠버네티스 클러스터(eks) 아키텍처는 기본적으로, 여러 대의 서버가 하나의 클러스터로 연결되어 있고, 클러스터 마스터와 클러스터 워커노드로 구성된다.

클러스터 마스터(cluster master)
: control plane이 실행되는 클러스터의 두뇌
: 컨테이너를 스케쥴링하고, 서비스를 관리하며, api 서비스를 호출하고 수행하는 역할 수행
: pod 와 resource를 컨트롤하고, loadbalancer를 관리하는 역할 수행

  • pod 란? 쿠버네티스에서 관리할 수 있는 가장 작은 단위로, 하나 이상의 container 모음을 뜻한다.

그러면 쿠버네티스 워커노드(worker node)는 무슨 역할을 할까?
: 사용자의 워커로드를 실행하는 역할 수행
: 마스터의 관리 아래, 실제 pod와 같은 resource가 실행되는 노드

  • 참고 ) kubectl: 쿠버네티스를 다루기 위한 명령어

.
.
.
.
.
.

1. 쿠버네티스 환경을 구축한다.
구축을 위해, bastion host에 kubectl 설치와 eksctl 설치를 순차적으로 진행한다.

yum update 확인

yum update -y

(중요) Kubectl 설치 (2021.05 기준 최신판) 파일 다운로드

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

kubectl 파일의 rwe 권한을 변경하기 위해, 이전에 권한 조회

ll 또는 ls -al

kubectl의 rwe 권한 변경 (execute 권한 추가)

chmod +x ./kubectl

이 kubectl 파일을 /usr/local/bin/kubectl로 이동

sudo mv ./kubectl /usr/local/bin/kubectl

kubectl 잘 설치되었는지 확인 (=버전 확인 통해 설치되었는지 유무 파악 가능)

kubectl versino --client

(중요) eksctl 설치 (2021.05 기준 최신판) 파일 다운로드

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp

이 파일을 path가 설정된 디렉토리로 변경 (이동)

sudo mv /tmp/eksctl /usr/local/bin

설치 잘 되었는지 확인 (버전 확인 통해 설치 유무를 판단할 수 있음)

eksctl version

2. EKS 클러스터와 NodeGroup을 생성한다.
2-1 ) EKS Cluster 생성
2-2 ) Worker Node Group 생성

1-1) EKS cluster 생성

eksctl 명령어를 통해서 eks cluster와 node group을 생성할 수 있다.

eksctl create --name 클러스터 이름 --version 버전 --region 지역명(한국은 ap-northeast-2) --nodegroup-name 노드그룹이름 --node-type 노드타입 --nodes 노드개수 --nodes-min 지정할 노드 최소개수 --nodes-max 지정할 노드 최대개수 --ssh-access --ssh-public-key 워커노드접속에 사용할 키 --managed

정상적으로 생성이 되고 나면, ~ is ready라는 메세지를 확인할 수 있다.

1-2) Worker node group 생성

그리고, 노드 그룹을 아래 커맨드를 통해서 확인할 수 있다. (노드 그룹= 노드)

kubectl get node

2. Nginx 서비스 배포

  1. 구축된 쿠버네티스 환경에 Nginx 서비스를 배포한다.

개략적인 순사는 아래와 같다.

Ngnix 서비스를 배포하려면, Deployment 를 정의하여, Nginx 컨테이너를 담은 pod를 띄운다.
pod 를 loadbalancer type 의 service를 통해 배포한다.
자동생성한 ELB를 통해, Nginx가 배포된 것을 확인한다.

👏🏻 (체크) deployment.yaml 소스와 얘기가 빠짐

Ngnix-service.yaml 파일 원본은 아래와 같다.

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

yaml 파일을 apply하여, 배포한다.

배포한 후, 잘 배포가 되었는지 확인 한다.

my ngnix- loadbalancer 확인 가능하고, aws 콘솔에서도 확인 가능하다.

포트 9200 으로 설정된 로드밸런서 a클래스 dns 이름/주소 부분을 참조해서 웹서버에 들어가보면 엔진엑스가 구동중인 것을 확인할 수 있다. (할 수 있어야 되는데, 왜 다운되있지...)
http://ad42a04bb44e54bddaf77dde357c303f-246083352.ap-northeast-2.elb.amazonaws.com:9200/

--> 해결 완료 !

원인 :
알고 보니, 엔진엑스 서비스가 제대로 구동되지 않고 있었고,

해결 방법 :
해당 서비스 확인 후 재구동하여, 웹사이트 연결 정상적으로 되는 것을 확인하였다.
참고로, 서비스 상태는 위에서 설명한 것 처럼, aws 콘솔 통해 확인하거나, 또는 서비스 재배포를 통해 해결하면 된다.

profile
행복과 성장에 대해 고민하는 사람🤓 , 포스팅 주기가 잦지 않을 수 있습니다만, 항상 좋은 내용을 담고자 합니다🙇🏼

0개의 댓글