관리기법 | 대상 | 권장 환경 | 지원하는 작업자 수 | 학습 난이도 |
---|---|---|---|---|
명령형 커맨드 | 활성 오브젝트 | 개발 환경 | 1+ | 낮음 |
명령형 오브젝트 구성 | 개별 파일 | 프로덕션 환경 | 1 | 보통 |
선언형 오브젝트 구성 | 파일이 있는 디렉터리 | 프로덕션 환경 | 1+ | 높음 |
명령형 커맨드를 사용할 경우, 사용자는 클러스터 내 활성 오브젝트를 대상으로 직접 동작시킨다. 사용자는 실행할 작업을 인수 또는 플래그로 kubectl 커맨드에 지정한다.
이것은 클러스터에서 일회성 작업을 개시시키거나 동작시키기 위한 추천 방법이다. 이 기법은 활성 오브젝트를 대상으로 직접적인 영향을 미치기 때문에, 이전 구성에 대한 이력을 제공해 주지 않는다.
ex) 디폴로이먼트 오브젝트를 생성하여 nginx 컨테이너의 인스턴스를 구동시킨다.
kubectl create deployment nginx --image nginx
명령형 커맨드의 장점은 아래와 같다.
단점은 아래와 같다.
명령형 오브젝트 구성에서는 kubectl 커맨드로 작업(생성, 교체 등), 선택적 플래그, 그리고 최소 하나의 파일 이름을 지정한다. 그 파일은 YAML 또는 JSON 형식으로 오브젝트의 완전한 정의를 포함해야만 한다.
ex) 구성 파일에 정의된 오브젝트를 생성한다.
my-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 1
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
//my-nginx가 존재하는 경로에서 해당 명령어 실행
kubectl create -f my-nginx.yaml
//my-nginx가 존재하는 경로에서 해당 명령어 실행
kubectl delete -f my-nginx.yaml
kubectl replace -f nginx.yaml
명령형 커맨드에 비해 장점은 다음과 같다.
명령형 커맨드에 비해 단점은 다음과 같다.
선언형 오브젝트 구성을 사용할 경우, 사용자는 로컬에 보관된 오브젝트 구성 파일을 대상으로 작동시키지만, 사용자는 파일에서 수행 할 작업을 정의하지 않는다. 생성, 업데이트, 그리고 삭제 작업은 kubectl에 의해 오브젝트마다 자동으로 감지된다. 이를 통해 다른 오브젝트에 대해 다른 조작이 필요할 수 있는 디렉터리에서 작업할 수 있다.
ex) configs 디렉터리 내 모든 오브젝트 구성 파일을 처리하고 활성 오브젝트를 생성 또는 패치한다. 먼저 어떠한 변경이 이루어지게 될지 알아보기 위해 diff 하고 나서 적용할 수 있다.
kubectl diff -f configs/
kubectl apply -f configs/
재귀적으로 디렉터리를 처리한다.
kubectl diff -R -f configs/
kubectl apply -R -f configs/