minikube
minikube는 쿠버네티스를 로컬에서 실행할 수 있는 도구이다.
개인용컴퓨터에서 단일 노드 쿠버네티스 클러스터를 실행하여 예제 또는 단순개발작업을 수행 할 수 있다.
쿠버네티스 doc페이지에선 온라인 vm클러스터를 제공해 간단한 예제를 테스트할 수 있는 대화형 튜토리얼 환경을 제공하고 있다.
https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/
해당 튜토리얼에서는 아래와 같은 그림의 작업을 수행한다.
1. 클러스터 생성하기
위의 URL에 들어가보면 ubuntu-18.04.4 리눅스 환경에 minikube를 미리 설치한 터미널로 테스트 할 수 있다.
minikube 설치 참조 : https://minikube.sigs.k8s.io/docs/start/
[ minikube 명령어 ]
minikube version : minikube 버전확인
minikube start : 쿠버네티스 클러스터를 minikube를 통해 실행
[ kubectl 명령어 ]
쿠버네티스 커맨드 라인도구인 kubectl을 사용하면 쿠버네스트 클러스터에 대한 명령(애플리케이션 배포, 리소스검사/관리, 로그 등)을 실행 할 수 있다. 이 또한 대화형 터미널에 이미 설치 되어있다.
kubectl 설치 참조 : https://kubernetes.io/ko/docs/tasks/tools/install-kubectl/
kubectl version : client와 server 2가지 버전이 나오는데, client버전은 사용하고 있는 kubectl버전을 가리키고, server버전은 master노드에 설치된 kubectl 버전을 가리킨다. master노드 개념은, 쿠버네티스는 마스터노드와 워커노드로 구분되는데 마스터 노드가 워커노드들을 컨트롤 한다 정도로 알자.
kubectl cluster-info : 클러스터 상세정보
Kubernetes master is running at https://172.17.0.30:8443
KubeDNS is running at https://172.17.0.30:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
kubectl get nodes : 애플리케이션을 사용할 수 있는 노드들의 정보
NAME STATUS ROLES AGE VERSION
minikube NotReady master 10s v1.17.3
2. 앱배포하기
Deployment
클러스터를 실행하면, 그 위에 컨테이너화된 애플리케이션을 배포 할 수 있다. 이를 디플로이먼트를 통해 실행하며 이후 마스터가 개별 노드에 실행되도록 스케줄 한다.
또한 디플로이먼트 컨트롤러가 애플리케이션 인스턴스들을 지속적으로 모니터링하여 장애시 다른 노드의 인스턴스로 교체한다.
[ kubectl 명령어 ]
kubectl create deployment 이름 --image=다운로드 이미지위치 :
디플로이먼트를 생성한다. 아래 명령어로 쿠버네티스 튜토리얼에서 제공하는 샘플 디플로이먼트를 생성한다.
kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
kebectl get deployments : 디플로이먼트 리스트 확인
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1/1 1 1 6s
kubectl proxy : 클러스터 개인의 네트워크로 전달하는 프록시를 만든다. 프록시는 control-c를 눌러 종료하며, 실행 중 출력이 표시된지 않는다.
3. 앱조사하기
파드
파드는 하나 이상의 애플리케이션의 그룹으로 쿠버네티스의 추상적인 개념이다. 2.앱배포하기에서 디플로이먼트를 통해 애플리케이션을 생성했다. 이때 애플리케이션 인스턴스에 파드는 자동생성된다.
파트는 쿠버네티스 플랫폼 상에서 최소단위이며, 각 파드는 스케쥴 되어진 노드로 묶인다. 노드가 소멸되거나 삭제되기 전까지 그 노드에 유지된다.
같은 파드내 애플리케이션은 아래와 같은 리소스를 공유한다.
- 같은 공유 스토리지 볼륨
- 클러스터 IP와 네트워킹, 포트
- 컨테이너 이미지, 각 컨테이너가 동작하는 방식에 대한 정보
노드
노드는 파드를 담고있으며, 같은 말로 파드는 언제나 노드 안에서 동작한다. 하나의 노드는 여러 개의 파드를 가질 수 있고, 이러한 노드는 마스터에 의해 관리된다. 쿠버네티스 마스터는 클러스터 내 노드를 통해서 파드에 대한 스켈쥴링을 자동처리한다.
마스터 -> 노드 -> 파드
https://kubernetes.io/ko/docs/tutorials/