.
.
.
.
그럼 본격적으로 시작하기 전에, 쿠버네티스라는 건 뭐고, 쿠버네티스라는게 왜 등장했는지 개념부터 짚고 넘어가자.
1. Kubernetes (쿠버네티스)
if docker 가 컨테이너 기반의 가상화를 실현한 플랫폼이라면, docker container를 관리하는 것이 Kubernetes이다.
💁🏻♀️ 아래와 같이 "쿠버네티스가 나오게 된 과정"(?) 계기에 대하여 설명해보았다!
그러면 이제, 쿠버네티스 클러스터 아키텍처(kubernetes cluster architecture) 에 대해 살펴보자.
쿠버네티스 클러스터(eks) 아키텍처는 기본적으로, 여러 대의 서버가 하나의 클러스터로 연결되어 있고, 클러스터 마스터와 클러스터 워커노드로 구성된다.
클러스터 마스터(cluster master)
: control plane이 실행되는 클러스터의 두뇌
: 컨테이너를 스케쥴링하고, 서비스를 관리하며, api 서비스를 호출하고 수행하는 역할 수행
: pod 와 resource를 컨트롤하고, loadbalancer를 관리하는 역할 수행
그러면 쿠버네티스 워커노드(worker node)는 무슨 역할을 할까?
: 사용자의 워커로드를 실행하는 역할 수행
: 마스터의 관리 아래, 실제 pod와 같은 resource가 실행되는 노드
.
.
.
.
.
.
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 생성
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라는 메세지를 확인할 수 있다.
그리고, 노드 그룹을 아래 커맨드를 통해서 확인할 수 있다. (노드 그룹= 노드)
kubectl get node
- 구축된 쿠버네티스 환경에 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 콘솔 통해 확인하거나, 또는 서비스 재배포를 통해 해결하면 된다.