Kubernetes 이해하기 - 1 (with. minikube)
*개인 공부를 위한 포스팅으로, 잘못된 부분이 있는 경우 댓글로 피드백 해주시면 감사하겠습니다.
목표
- 쿠버네티스 클러스터가 무엇인지 배운다.
- Minikube가 무엇인지 배운다.
- 온라인 터미널을 사용해서 쿠버네티스 클러스터를 시작한다.
쿠버네티스는 single unit으로 연결된 컴퓨터처럼 동작할 수 있도록 컴퓨터들의 클러스터들을 조정하는 역할을 한다. 컨테이너 단위로 애플리케이션을 띄우고, 각각의 머신을 개별적으로 조작하지 않아도 된다. 이를 위해서는 애플리케이션의 컨테이너화가 필요하다.
쿠버네티스는 애플리케이션 컨테이너간의 스케줄링, 분산 등을 효과적으로 자동화한다.
그럼 어떻게 애플리케이션을 컨테이너화하고 클러스터 구성을 할까?
클러스터
클러스터는 두가지 형태의 자원으로 구성된다.
- 컨트롤 플레인은 클러스터를 조율한다.
- 노드는 애플리케이션을 구동하는 작업자이다.
컨트롤 플레인
- 애플리케이션을 스케줄링
- 애플리케이션의 항상성을 유지
- 애플리케이션을 스케일링
- 새로운 변경사항을 순서대로 반영(rolling out)하는 일
- 같은 클러스터 내 모든 활동을 조율
노드
- 쿠버네티스 클러스터 내 워커 머신으로 동작하는 VM 또는 물리적인 컴퓨터다.
- 노드를 관리하고 쿠버네티스 컨트롤 플레인과 통신하는 Kubelet이라는 에이전트를 갖는다.
배포를 어떻게 할까
애플리케이션을 쿠버네티스에 배포를 하기 위해서는 컨트롤 플레인에 애플리케이션 컨테이너의 구동을 지시하면 된다. 그러면 컨트롤 플레인은 컨테이너를 클러스터의 어느 노드에 구동시킬지 스케줄한다. 노드는 컨트롤 플레인이 제공하는 쿠버네티스 API를 통해서 컨트롤 플레인과 통신한다.
로컬에서 테스트는 어떻게 할까
Minicube를 이용하자. Minikube는 가벼운 쿠버네티스 구현체이며, 로컬 머신에 VM을 만들고 하나의 노드로 구성된 간단한 클러스터를 생성한다.
deployment
컨테이너화 된 애플리케이션을 배포하기 위해선, 쿠버네티스 디플로이먼트 설정을 만들어야 한다. 디플로이먼트는 쿠버네티스가 애플리케이션의 인스턴스를 어떻게 생성하고 업데이트해야 하는지를 지시한다. 디플로이먼트는 쿠버네티스가 애플리케이션의 인스턴스를 어떻게 생성하고 업데이트해야 하는지를 지시한다. 디플로이먼트가 만들어지면, 쿠버네티스 컨트롤 플레인이 해당 디플로이먼트에 포함된 애플리케이션 인스턴스가 클러스터의 개별 노드에서 실행되도록 스케줄한다.
인스턴스가 생성되면 k8s deployment controller는 지속적으로 모니터링하며 머신의 장애나 정비에 대응할 수 있는 자동 복구(self-healing) 메커니즘을 제공한다.
deployment를 통해 인스턴스 생성과 인스턴스 구동에 관여하여 장애 복구가 가능하다.