Container Orchestration/Kubernetes

Kubernetes 개념과 Minikube 실습

Somaz 2022. 3. 22. 03:22
728x90
반응형

 

1. Kubernetes의 개념과 특징, 그리고 아키텍처

 

1) 개념

 Kubernetes는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼이다.

 

2) 특징

 Kubernetes `DeploymentStatefulSetsDaemonSetJobCronJob` 등 다양한 배포 방식을 지원한다. 그리고 다양한 웹 애플리케이션을 하나의 로드 밸런서로 서비스하기 위해 `Ingress` 기능을 제공한다. 또한, 부하에 따라 자동으로 서버를 늘리는 기능AutoScaling이 있고 IP를 할당 받아 LoadBalancer로 사용할 수 있다. 하나의 클러스터를 논리적으로 구분하여 사용할 수 있다. 하나의 클러스터에 다양한 프레임워크와 애플리케이션을 설치하기 때문에 기본외에 여러 개의 네임스페이스를 사용하는 것이 일반적이다.

 

 

3) 아키텍처

 

작동 중인 쿠버네티스 배포를 클러스터라고 합니다. 쿠버네티스 클러스터는 컨트롤 플레인과 컴퓨팅 머신(또는 노드)의 2개 부분으로 시각화할 수 있다. 각 노드는 자체 Linux® 환경이며 물리 또는 가상 머신일 수 있다. 각 노드는 컨테이너로 이루어진 포드(Pod)를 실행한다.

이 다이어그램은 쿠버네티스 클러스터 구성 요소의 상호 관계를 보여준다.

 

 

4) 통신방식

출처 : https://www.slideshare.net/opennaru/kubernetes-229938840

 

 

2. Minikube 실습

https://kubernetes.io/ko/docs/tutorials/hello-minikube/

 

Hello Minikube

이 튜토리얼에서는 Minikube와 Katacoda를 이용하여 쿠버네티스에서 샘플 애플리케이션을 어떻게 실행하는지 살펴본다. Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다. 참고: 로컬에서

kubernetes.io

 

1) minikube 클러스터 만들기

[Launch Terminal] 버튼을 클릭하면, 아래와 같이 터미널창에 실행된다.

 

지금은 로딩중이다!

 

정상적으로 minikube가 시작되었다!

 

minikube dashboard 명령을 내리면 대시보드 애드온과 프록시가 활성화되고 해당 프록시로 접속하는 기본 웹 브라우저 창이 열린다. 대시보드에서 디플로이먼트나 서비스와 같은 쿠버네티스 자원을 생성할 수 있다.

 

url을 쳐도 열리지 않는다.. 문제를 해결해보자
[Preview Port 30000] 버튼을 클릭하면 아래와 같이 인터넷에 대시보드가 열린다!

 

대시보드를 열엇다!

 

 

2) 디플로이먼트 만들기

 

kubectl create 명령어를 실행하여 파드를 관리할 디플로이먼트를 만든다.

 

$ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4

 

디플로이먼트 보기

$ kubectl get deployments

위와 같이 출력된다.
대시보드에서도 볼 수 있다!

 

파드 보기

$ kubectl get pods

위와 같이 출력된다
대시보드 확인

 

클러스터 이벤트 보기

$ kubectl get events

위와 같이 출력된다

 

kubectl 환경설정 보기

$ kubectl config view

 

 

 

3) 서비스 만들기

 

기본적으로 파드는 쿠버네티스 클러스터 내부의 IP 주소로만 접근할 수 있다. hello-node 컨테이너를 쿠버네티스 가상 네트워크 외부에서 접근하려면 파드를 쿠버네티스 서비스로 노출해야 한다.

 

kubectl expose 명령어로 퍼블릭 인터넷에 파드 노출하기

 

kubectl expose deployment hello-node --type=LoadBalancer --port=8080

 

--type=LoadBalancer플래그는 클러스터 밖의 서비스로 노출하기 원한다는 뜻이다.

 

k8s.gcr.io/echoserver 이미지 내의 애플리케이션 코드는 TCP 포트 8080에서만 수신한다. kubectl expose를 사용하여 다른 포트를 노출한 경우, 클라이언트는 다른 포트에 연결할 수 없다.

 

 

생성한 서비스 살펴보기

 

$ kubectl get services

 

 

대시보드 확인

 

로드 밸런서를 지원하는 클라우드 공급자의 경우에는 서비스에 접근할 수 있도록 외부 IP 주소가 프로비저닝 한다. minikube에서 LoadBalancer타입은 minikube service 명령어를 통해서 해당 서비스를 접근할 수 있게 한다.

 

 

다음 명령어를 실행한다

 

$ minikube service hello-node

 

 

[ select port to view on Host 1 ] 클릭

서비스 출력에서 8080의 반대편에 표시되는 5자리 포트 번호를 기록 한다. 이 포트 번호는 무작위로 생성되며, 사용자마다 다를 수 있다. 포트 번호 텍스트 상자에 포트 번호를 입력한 다음, 포트 표시를 클릭한다. 32049 를 입력한다.

 

이렇게 하면 당신의 앱을 서비스하는 브라우저 윈도우를 띄우고 애플리케이션의 응답을 볼 수 있다.

 

 

 

4) 애드온 사용하기

 

minikube 툴은 활성화하거나 비활성화할 수 있고 로컬 쿠버네티스 환경에서 접속해 볼 수 있는 내장 애드온 셋이 포함되어 있다.

 

Installing Addons

Note: This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects, which are listed alphabetically. To add a project to this list, read the content guide

kubernetes.io

 

현재 지원하는 애드온 목록을 확인한다.

 

$ minikube addons list

 

애드온을 활성화 한다. 여기서는 metrics-server를 예시로 사용한다.

 

$ minikube addons enable metrics-server

 

 

생성한 파드와 서비스를 확인한다.

 

$ kubectl get pod,svc -n kube-system

 

 

metrics-server 비활성화

 

$ minikube addons disable metrics-server

 

 

 

5) 제거하기

 

이제 클러스터에서 만들어진 리소스를 제거할 수 있다.

 

$ kubectl delete service hello-node
$ kubectl delete deployment hello-node


Reference

 

쿠버네티스란?

 

728x90
반응형