워크로드가 돌아가는 컨테이너를 배치하는 물리(가상) 머신
- control plane에 의해 관리됨.
- 일반적인 운영환경에서는 multi node로 운영
- 각 노드는 kube-proxy, container-runtime, kubelet이 포함.
동일 물리 클러스터를 기반으로 하는 복수의 가상 클러스터를 지원하는 개념
- 클러스터를 논리적으로 나누고 액세스를 제한하여, 리소스 생성 및 관리
- 논리적으로 구별될뿐 격리되는 것이 아님.
(격리 시키기 위해서는 network policy와 같은 오브젝트를 추가로 사용해야함.)
kubernetes 최소 단위 객체
- 하나의 pod는 여러 컨테이너 포함 가능
- MSA의 decoupling에 의하면 사실상 1 pod 당 1 container가 정석이다.
하나의 pod안에서 동작하는 특정 컨테이너의 로그를 수집해야하는 경우에는
상황에 따라 해당 pod에 두 개의 컨테이너를 배치해야할 수도 있다.
- 이럴 때를 위해서 권장되는 공식 디자인 패턴이 존재한다.
굳이 두 개의 컨테이너로 하지않고 하나의 컨테이너가 전부 해도 된다.
하지만 "하나의 컨테이너는 하나의 성격을 가진다" 라는 이념에 어긋나기 때문에,
컨테이너 decoupling을 할 때는 이런 식의 패턴으로 구성하는 것이best practice라고 권장한다.
pod의 레플리카를 생성하고 지정한 pod의 수를 유지하는 리소스
복제된 (replicated) 애플리케이션 (pod)를 관리하는 오브젝트
- 롤링 업데이트나 롤백 등을 구현하는 리소스
- maxUnavailable : 업데이트 중 동시에 정지 가능한 최대 pod 수
- maxSurge : 업데이트 중 동시에 생성할 수 있는 최대 pod 수
클러스터의 각 노드에 pod를 하나씩 띄울 때 사용하는 오브젝트
- 로그 수집기를 실행하거나 노드를 모니터링하는 모니터링용 데몬 등 클러스터 전체에 항상 실행시켜 두어야하는 pod를 실행하는 데 사용
- 대표적인 daemonset : kube-proxy, fluent-bit
Pod의 집합과 같은 어플리케이션에 접근 경로나 Serice Discovery를 제공
- Pod를 외부 네트워크에 연결하고 pod로의 연결을 로드 밸런싱하는 네트워크 오브젝트
- 하나의 MicroSerivce 단위
일반적인 웹 서비스라면 80 또는 443을 사용하기 때문에, NodePort 방식으로 서비스를 노출하게 되면 접근하려는 클라이언트가 매번 3000이 넘는 포트를 기억해서 url 끝에 달아줘야한다.
- 즉, NodePort 방식도 일반적인 서비스 용도로는 적합하지 않다.
Service Type은 아니지만, Service 앞에서 Smart Router 및 entry point 역할을 하는 오브젝트
- 외부에서 접근 가능한 url, 로드밸런싱, SSL Termination 등을 통해 Service에 대한 HTTP 기반 접근을제공
- 클러스터에 하나 이상의 실행 중인 Ingress Controller가 필요
/user, /order 등 다양한 서비스 들이 존재하는 MSA 일 때 각각에 로드밸런서를 생성하는 건 좋지 않다. 그래서 하나의 로드밸런서를 두고 호스트를 기반으로 트래픽을 분기하기 위해 Ingress를 사용한다.
- AWS의 ALB를 Ingress로 사용하면 된다. ( Target Group )
수요에 따라 kubernetes 노드를 자동으로 추가하는 기능
- 리소스 부족으로 pod의 노드 할당이 pending 될 때 (scale-out)
- 미사용 node가 있을 때 (scale-in)
- 각 클라우드 provider 마다 각자의 cluster autoscaling 방법이 있음
kubernetes 클러스터 리소스 사용량 데이터를 집계하는 역할
- 리소스의 metrics (CPU 사용량, 메모리 사용량 등)을 수집하고 metric API를 통해 apiserver에 노출하여 horizontal pod Autoscaler 및 vertical pod Autoscaler에서 활용
- 클러스터 내에서 Deployment 형태로 설치
개별 컨테이너에 설정해야하는 내용을 환경 변수로 전달
- Timezone, DB 접속 정보 등
- pod 정의 파일에 환경변수를 지정하거나 설정 파일을 마운트하여 전달
워크로드에 필요한 설정 정보를 key-value 형태로 저장할 수 있는 데이터 오브젝트
- 간단한 환경변수부터 nginx.conf와 같은 파일도 저장 가능
워크로드에 필요한 민감정보를 key-value 형태로 저장할 수 있는 데이터 오브젝트
- base64 인코딩 상태로 저장
스토리지 볼륨을 추상화하여 pod와 느슨하게 결합시킨 리소스
- 오브젝트 형태가 아닌 pod 내에서 정의