쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다.
쿠버네티스의 가장 큰 설계 원칙 = 선언적 API
선언적이라고 하는 것은 컨테이너가 원하는 상태를 쿠버네티스에 설정해놓으면 쿠버네티스는 계속 컨테이너 상태 확인하고 설정한 상태가 아니면 거기에 맞춘다.
설정한 이후엔 ⇒ 현재상태 확인 → 설정한 상태와 비교 → 설정한 상태로 맞춤
이렇게 하면 정의해 준대로 자동으로 유지가 되서 관리 비용이 많이 줄어든다.
쿠버네티스를 이용하면 로드밸런싱, 배포, 확장, 장애조티 등 컨테이너화된 어플리케익션을 탄력적으로 실
쿠버네티스 내 가장 큰 단위로, 가상 서버들이 속한 클라우드를 뜻한다.
쿠버네티스에서 서버는 노드라는 단위로 불리고 클러스터는 마스터 노드와 워커 노드를 모두 합친것이라고 볼 수 있다.
클러스터 내 가상 서버 즉, 컴퓨팅 엔진 단위
클러스터 다음으로 큰 단위이며, 마스터 노드와 워커 노드로 분리돼 있다.
마스터노드가 죽으면 클러스터를 관리할 수 없어서 일반적으로는 3개정도의 마스터 노드를 띄우는데 실제로 관리하는 노드는 하나고 나머지는 대기중이다.
파드란, 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위다.
그리고 이와 동시에, 하나 이상의 컨테이너 그룹을 뜻한다.
파드와 컨테이너의 차이?
⇒ 파드에 정의된 여러개 혹은 하나의 컨테이너는 완전한 하나의 어플리케이션으로 동작
실제 클러스터 전체 관리
클러스터에 관한 전반적인 결정(ex 스케쥴링)을 수행하고, 클러스터 이벤트(ex 디플로이먼트의 replicas
필드에 대한 요구 조건이 충족되지 않을 경우 새로운 파드를 구동시키는 것)를 감지하고 반응한다.
API 서버는 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트이다. API 서버는 쿠버네티스 컨트롤 플레인의 프론트 엔드이다.
쿠버네티스의 모든 요청은 여길 거쳐 다음 컴포넌트로 전달됨
모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소
노드가 배정되지 않은 새로 생성된 파드 를 감지하고, 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트.
파드를 처음 실행할 때 조건을 설정하는데 얘가 그 조건에 맞는 파드를 찾음
controller 각각을 실행하는 컴포넌트
클라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고, 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있게 해 준다.
쿠버네티스 실행 환경 관리
동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공
클러스터의 각 노드에서 실행되는 에이전트. Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리한다.
PodSpec을 전달받아 컨테이너를 실행/헬스체크
Kubelet은 쿠버네티스를 통해 생성되지 않는 컨테이너는 관리하지 않는다.
클러스터의 각 노드에서 실행되는 네트워크 프록시로, 쿠버네티스의 서비스 개념의 구현부이다.
노드의 네트워크 규칙을 유지 관리. 이 네트워크 규칙이 내부 네트워크 세션이나 클러스터 바깥에서 파드로 네트워크 통신을 할 수 있도록 해준다.
컨테이너 실행을 담당하는 소프트웨어
레플리카셋은 파드의 수를 보장하기 위한 개념
어플리케이션을 배포하고 업데이트를 수행하는 리소스
디플로이먼트는 레플리카셋 컨트롤러를 제어하기때문에 레플리카셋을 생성하는 역할도 수행한다.
디플로이먼트를 이용해서 어플리케이션을 배포, 업데이트 해야하는 이유는 안정성 때문이다.
파드들은 각각의 IP주소를 갖는다.
어플리케이션의 레플리카셋을 3으로 설정하면 3개의 파드가 띄어질것이다. 이때 어떠한 이유로 하나의 파드가 삭제되면 디플로이먼트는 레플리카셋 값을 맞추기 위해 하나의 파드를 새로 생성할 것이다.
3개의 파드는 각각의 IP주소를 갖고 새로운 파드도 새 IP주소를 할당받게 되는데 여기서 사용자에게는 하나의 IP만 제공하고 싶다면?
⇒
서비스를 이용하면 파드가 여러개/재생성되어도 하나의 IP로 접속할 수 있게 설정 가능하다.
서비스란 파드 집합에서 실행중인 어플리케이션을 네트워크 서비스로 노출하는 추상화 리소스이다.
라벨을 통해 특정 어플리케이션 집단의 파드들만 하나의 IP로 연결이 가능하다.