📒 쿠버네티스 영상 참조 1 , 쿠버네티스 영상 참조 2
클러스터 : 여러개의 물리/논리적인 소프트/하드웨어를 묶어서 마치 하나의 시스템으로 관리한다
가상화 : 과거의 전통적인 배포방식에서 가상화방식이 도입되면서 하이퍼바이저를 통해 하나의 물리 pc에서 여러 서버를 배포할 수 있게 되었다. 물리pc 또는 가상머신이 호스트 pc가 되어 그 아래 여러 가상머신(서버) or 컨테이너(서버)를 두어 호스트가 관리하게 한다 (=클러스터, 컨테이너 오케스트레이션). 그러나 만약 기업의 규모가 커지고 실행해야할 어플리케이션이 늘어나면 그만큼 관리해야할 호스트 또한 늘어난다. 만일 수많은 호스트를 개별pc로 일일이 관리한다는 것은 인력과 비용이 많이 든다.
-> 이러한 이유로 호스트 아래 여러 가상머신/컨테이너를 두어 클러스터링 / 컨테이너 오케스트레이션을 통해 호스트가 여러 서버를 관리하는 컨셉과 비슷하게 여러 호스트를 마찬가지로 클러스터링 / 오케스트레이션을 통해 관리하기 위해 필요한 것이 쿠버네티스이다.
-> 쿠버네티스를 사용하면 여러 서버를 관리하는 호스트를 각각 관리하는 인력이 필요하지 않기 때문에 인력에 대한 비용과 관리 효율성을 높일 수 있다.
📒 하나의 호스트가 여러 컨테이너(서버)를 쉽게 관리하게 하는 것은 Docker도 가능하다. 하지만 Docker는 여러 호스트를 쉽게 관리하는 것은 하지 못한다.
( Docker에서 Docker Swarm이라는 것을 만들긴 했지만 이미 쿠버네티스가 시장을 점령한 상태 )
1 . vagrant파일을 생성 후 c디스크에 적당한 디렉터리를 만들어 넣어놓는다
2 . 터미널에 접속하여 해당 디렉터리에 cd로 접속
3 . 상태 확인 및 설치
Vagrant status # 상태확인
Vagrant up # 설치
4 . 컨트롤 노드(호스트 pc)에 접속
vagrant ssh kube-control1
5 . Kubespray을 이용한 설치
6 . 최종 상태 확인
kubectl get pods -A
-> 모든 컨테이너의 STATUS값이 모두 Running이여야 한다
📒 쿠버네티스는 환경 또는 필요에 따라 설치 방법이 다양하다
보통 일반적으로 VM을 이용하여 설치한다
Control Plane = Master
Node = Worker , Minions , Data Plane
쿠버네티스를 배포하면 클러스터를 얻는다.
쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합. 모든 클러스터는 최소 한 개의 워커 노드를 가진다.
워커 노드는 애플리케이션의 구성요소인 파드를 호스트한다. 컨트롤 플레인은 워커 노드와 클러스터 내 파드를 관리한다. 프로덕션 환경에서는 일반적으로 컨트롤 플레인이 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 일반적으로 여러 노드를 실행하므로 내결함성과 고가용성이 제공된다.
📒 파드는 클러스터에서 실행 중인 컨테이너의 집합을 나타낸다 = 쉽게 말해 그냥 컨테이너다.
📒 쿠버네티스에서는 컨테이너보다는 파드라는 개념을 사용한다.
< kube-apiserver >
< etcd >
< kube-scheduler >
< kube-controller-manager >
< cloud-controller-manager >
📒 이들 요소중 단 하나라도 장애가 발생하면 쿠버네티스는 작동을 하지 않는다. 따라서 각 요소는 반드시 3중화를 통해 구성한다.
-> 그림을 잘 보면 세개로 겹쳐있는 것을 볼 수 있다.
-> 클러스터로 다중화를 구성할 때는 짝수개로는 구성하지 않는다
-> Control Plane도 3중화한다.
노드 컴포넌트는 동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작한다
Container Runtime Interface (CRI) = 쿠버네티스 런타임 환경
< kubelet >
< kube-proxy >
sudo ss -tnlp # kube-proxy 확인 가능
애드온은 쿠버네티스 리소스(데몬셋, 디플로이먼트 등)를 이용하여 클러스터 기능을 구현한다. 이들은 클러스터 단위의 기능을 제공하기 때문에 애드온에 대한 네임스페이스 리소스는 kube-system 네임스페이스에 속한다.
< DNS >
< 웹 UI (대시보드) >
< 컨테이너 리소스 모니터링 >
< 클러스터-레벨 로깅 >
kubectl get pods -A # 컨테이너들을 확인할 수 있다
kubectl get pods -A -o wide # 컨테이너들을 확인할 수 있다
-> 위의 아키텍처를 보면 그림에서는 생략되었지만 사실 명령어로 알 수 있다시피 control plane도 kube-proxy를 가지고 있다.
-> 즉 control plane도 사실 node의 기능을 가지고 있다.
-> control plane은 node를 관리하는 대장느낌이라면 node는 각 컨테이너를 실행하는 병사다.
systemctl status etcd
systemctl status kubelet
-> etcd, kubelet은 컨테이너가 아닌 서비스이기 때문에 kubectl이 아닌 systemd로 확인
kubectl api-resources