01. 쿠버네티스란?
Containerized application을 관리해주는 오픈소스 플랫폼이다.
container를 개발자가 직접 관리하는게 아니라, k8s에게 어떤 방식으로 관리하라고 지시를 내리면 k8s가 대신 관리를 담당하는 방식이다.
여기서 이야기하는 관리에는 배포방식, scailing, network 등등 다양한 기능들을 포함한다.
기존에는 컨테이너를 관리할 때 컨테이너 갯수를 늘리거나 scailing을 적용하거나 다른 기능을 추가할 때 해당 작업들을 컨테이너에 직접 가해줘야 했다.
그에 비해 쿠버네티스는 명령을 전달받으면 컨테이너들에게 알아서 명령을 지속적으로 내리면서 관리해준다.
Core Components
Cluster
노드 머신, 워커노드, 마스터 노드, 배포 혹은 원하는 최종 상태를 구성하는 모든 것의 컬렉션 세트.
Nodes
클러스터와 통신하거나 클러스터 내에서 통신하는 물리or가상 머신
Control Plane
클러스터 내부 요소들을 제어하는 역할. 클러스터 내의 마스터 노드들의 집합이라고 보면 된다.
Master Node
클러스터 내의 모든 워커 노드를 걸쳐 pod를 관리함
- API Server: 워커와 마스터 노드간의 통신을 위한 카운터 파트(대응자)
- Scheduler: 포드를 관찰하고 새 포드가 생성되어야 하는 워커 노드를 선택하는 일을 담당하는 스케쥴러. 워커 노드에게 무엇을 해야 하는지 api 서버에 알리는 역할을 함
- Kube-Controller-Manager: 워커 노드 전체를 감시하고 제어하며 적당한 수의 포드를 가동 중에 있는지 확인하는 역할을 함.
- Cloud-Contoller-Manager: Kube-Controller-Manager와 동일한 일을 하지만 , 클라우드 프로바이더에게 쿠버네티스에서 실행해야 할 명령을 번역해준다.
Worker Node
pod를 실행하는 노드. 즉, application을 실행하는 노드
일반적으로는 pod에서 실행되는 컨테이너를 생성하기 위하여 docker 또한 워커노드에 포함시켜놓는다.
- pod: 워커노드 하나에 여러개의 pod을 가질 수 있다.
- kubelet: 워커노드에 포함되어 있으며 마스터 노드와 통신하여 마스터 노드가 해당 워커 노드의 포드를 제어할 수 있도록 함
- kube-proxy: 허용된 트래픽만이 워커노드에 들어오거나 떠날 수 있게 관리함
Pod
쿠버네티스에서 여러개의 컨테이너를 가질 수 있는 가장 작은 단위
일반적으로는 pod 하나에 컨테이너 하나만 사용하지만, 밀접하게 관련된 컨테이너들을 pod 내부에 같이 두기도 한다. 이런 경우에는 pod 내부에 volumes 또한 설정하여 컨테이너들이 데이터를 주고 받을 수 있게 한다.
Services
명령어
# 버전확인
minikube version
# 가상머신 시작 (intel 버전)
minikube start --driver=hyperkit
# 가상머신 시작 (M1 버전 - docker desktop 설치 필요)
minikube start --driver=docker
# driver 에러가 발생하면 virtual box를 사용
minikube start --driver=virtualbox
# 특정 k8s 버전 실행
minikube start --kubernetes-version=v1.23.1
# 상태확인
minikube status
# 정지
minikube stop
# 삭제
minikube delete
# ssh 접속
minikube ssh
# ip 확인
minikube ip
# docker desktop 이용시에 해당 명령어로 서비스 접속 가능
minikube service [service name]
설치방법 - kubectl
MacOS
brew install kubectl
- 테스트
kubectl version