- IaC를 위해 k8s에서는 오브젝트를 사용한다. 시스템에 오브젝트를 올려두면 오브젝트 생성 보장을 위해 지속적으로 동작한다.
- 다음과 같은 오브젝트 필드는 거의 모든 오브젝트의 필드에 포함이 된다
spec
: 오브젝트를 생성할 때 리소스에 원하는 특징에 대한 설명이 작성된다status
: k8s 오브젝트의 현재 상태를 설명한다. 실제 상태를 정의한 상태와 일치시키기 위해 동작한다apiVersion
: k8s 버전kind
: 어떤 종류의 오브젝트를 생성할지metadata
: 이름 문자열, uid, 네임스페이스를 포함
- 관리기법은 다음과 같이 여러가지가 있다
- 명령형 커맨드: cli로 직접 명령어를 때려 동작시킨다
- 명령형 오브젝트 구성
- yml 파일로 작성해 버전관리가 가능하다
- 작성하기 위해 오브젝트 스키마에 대한 기본적인 이해가 필요하다
- 디렉토리가 아닌 파일에 가장 적합하다
- 선언형 오브젝트 구성
- diff를 사용해 k8s 내에서 버전관리가 가능하다
- 네임스페이스: 여러개의 프로젝트가 있는 환경에서 사용할 수 있도록 만들어졌다. k8s에는 다음 초기 네임스페이스가 있다
default
kube-system
: k8s 시스템에서 생성한 오브젝트를 위한 네임스페이스kube-public
: 자동으로 생성되며 모든 사용자가 읽기 권한으로 접근이 가능하다kube-node-lease
: 클러스터가 스케일링될 때 하트비트 성능을 향상시키는 각 노드와 관련된 리스 오브젝트에 대한 네임스페이스
- 노드
- master: 주요 컨트롤 유닛으로 worker를 관리하는 주체
kubectl
: master와 통신하는 명령어- api server: rest api 요청을 처리하고 k8s 클러스터를 구성하는 컴포넌트들과 통신한다
- scheduler: 노드들의 리소스를 파악하며 pod이 배치될 적절한 노드를 선택한다
- controller manager: 클러스터 상태 감시 및 상태를 유지한다
etcd
: 오픈소스 key/value 저장소로 master의 api server가 http를 통해 접근할 수 있는 데이터를 저장하는 용도로 사용한다
- worker: 할당한 태스크를 요청대로 수행한다
- kubelet: master와 통신을 담당하는 에이전트로 노드에서 동작하는 pod을 관리한다
- kube-proxy: 노드별로 탑재되어 네트워크 프록시 및 로드밸런서 역할을 한다
- master: 주요 컨트롤 유닛으로 worker를 관리하는 주체