쿠버네티스 오브젝트는 클러스터의 '상태'를 나타내기 위한 영속성을 가지는 오브젝트이며,
여기서 말하는 상태는 동작중인 애플리케이션이 어떤 컨테이너화 된, 어느 노드에서 동작중인지, 이용할 수 있는 리소스들은 무엇이 있는지, 어떤 정책을 적용 했는지 등을 말한다.
이전에 포스팅 했던 쿠버네티스 기본 명령어 정리 (tistory.com) 에서 명령어를 통해 쿠버네티스 API를 호출하는 것이
바로 쿠버네티스 오브젝트를 동작시키는 것 이다.
오브젝트는 spec과 status를 가지는데,
- spec은 내가 '의도한(원하는) 상태'를 기술해놓은 것 이고 ,
- status는 쿠버네티스 시스템과 컴포넌트에 의해 제공되고 업데이트된 '현재의 상태'를 의미 한다.
쿠버네티스 오브젝트를 생성하기위해 API 요청내용을 JSON 형식으로 정보를 줘야한다. 대부분 .yaml 파일로 kubectl에 제공한다.(kubectl이 JSON parsing)
> 쿠버네티스 오브젝트의 기본 구조(필수 필드)
apiVersion:
kind:
metadata:
spec:
- apiVersion - 이 오브젝트를 생성하기 위해 사용하고 있는 쿠버네티스 API 버전이 어떤 것인지
- kind - 어떤 종류의 오브젝트를 생성하고자 하는지
- metadata - 이름 문자열, UID, 그리고 선택적인 네임스페이스를 포함하여 오브젝트를 유일하게 구분지어 줄 데이터
- spec - 오브젝트에 대해 어떤 상태를 의도하는지(spec은 모든 쿠버네티스 마다 다르며 해당 오브젝트 특유의 중첩된 필드를 포함한다.)
위의 기본 형태를 기반하여 명세하고 완성된 .yaml 파일인 test.yaml 이 있다고 가정한다면 쿠버네티스 오브젝트를 kubectl CLI에 인자값으로 .yaml 파일명을 작성하여 생성할 수 있다.
kubectl apply -f test.yaml
* 쿠버네티스 오브젝트를 생성/관리하는법은 크게 두가지로 나뉜다. 하지만 하나의 기법만 사용하는 것을 권장한다.
- 명령적 관리 : 원하는 상태를 만들기 위해 필요한 동작을 지시하는 것
kubectl run nginx --image=nginx
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80
kubectl edit deployment nginx
kubectl scale deployment nginx --replicas=5
kubectl set image deployment nginx nginx=nginx:1.18
kubectl <create|replace|delete> -f nginx.yaml
=> 필요한 것을 명시적으로 지시한다.
- 선언적 관리 : 원하는 상태 그 자체를 선언하는 것
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
↓ 1. nginx.yaml 파일 수정
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:1.20.2
↓ 2. 명령어 실행
kubectl apply -f nginx.yaml
=> 선언한 특정 상태를 시스템 스스로 파악하여 반영해준다.