Imperative / Declarative ?
비유하자면, 위의 사진과 같다.
Imperative : 목적지에 도달하기 위해, "어떻게" 갈 것인지를 지정하는 방식
Declarative : 목적지만 지정하면 알아서 길을 찾아 도달하는 방식
=> 정리하자면 Imperative는 수동적이고, Declarative는 능동적인 방식이라고 볼 수 있다.
쿠버네티스에서 위 사항을 적용해본다면, 아래와 같다.
Imperative : 각종 리소스 생성 시 커맨드, yaml 파일을 통해 일일히 옵션들을 지정한다.
ex) kubectl create deployment / pod, kubectl run 등등 각종 명령어들을 예로 들 수 있다.
ex2) kubectl create -f ~~~.yaml 명령어를 통해 yaml 파일을 활용하여 리소스를 생성하였다.
Imparative 방식
커맨드에 대해 좀 더 자세히 살펴본다.
Imperative 커맨드
- 오브젝트 생성 : run / create / expose
- 오브젝트 업데이트 : edit / scale / set
- 커맨드의 경우, 간단한 리소스 생성에는 간편하고 자격증 시험에는 유리하나 반복적인 리소스 생성과 복잡한 리소스 생성 시에는 적합하지 않다. 이를 위해 yaml 파일을 생성한다.
다음은 configuration file을 살펴본다.
- 이제까지 살펴보았던 definition file 즉, yaml 파일을 말한다.
- 코드 형식으로 작성하기 때문에 관리하기 쉽고, github과 같은 온라인 리포지토리에 저장을 할 수도 있다.
- 생성한 리소스에 변경 사항이 생길 경우에는 kubectl edit 명령어를 통해 수정한다. 다만 이 경우, yaml 파일은 수정되지 않는다.
- 위 경우와 같이 리소스만 변경하고 yaml 파일만 변경하는 경우되는 경우를 방지하고 싶다면, 파일을 먼저 수정하고 kubectl replace 커맨드를 통해 업데이트 하는 방식을 고려해볼 수 있다.
==> Imparative 방식을 사용하여 리소스를 관리한다면, 아래와 같이 정리할 수 있다.
생성 : create
교체 : replace
삭제 : delete
위와 같이 커맨드를 사용할 때, 주의해야할 점들이 많다. 기 생성된 리소스를 다시 한 번 create 할 경우 에러가 발생한다거나, replace 를 실행했는데 리소스가 없다면 에러가 발생한다. 따라서 관리자는 리소스의 현 상태를 항상 기억하고 명령어를 입력해야 하므로, 관리가 번거로워진다.
Declarative 방식
- configuration file을 동일하게 사용한다. 다만, create / replace 커맨드가 아닌 apply 커맨드를 사용한다.
- 폴더 단위로 apply 커맨드를 실행하면 폴더 내 configuration file을 모두 실행하여 객체를 한번에 생성할 수도 있다.
- Imparative 방식에서는 파일 수정 후 replace 방식을 통해 업데이트를 하였다. 이 때, 리소스의 상태를 기억해두지 않으면 에러가 발생한다. 하지만 Declarative 에서는 apply 만 입력하면 모두 해결된다. 리소스가 없을 경우에는 생성하고 적용한다.
- 즉, configuration file에서 어떠한 변경 / 생성 / 삭제 작업을 진행하던 apply 커맨드만 실행하면 문제가 없다는 뜻이다.
위 두 방식에 대해서는 각자 장단점이 있다. 따라서, CKA 시험에 대해서는 아래와 같은 팁을 기억해두면 좋다.
시험 시간을 아끼기 위해서는 Imperative 방식을 사용한다.
- 단순 생성, 이미지 사용 등이라면 yaml 파일 작성을 해야하는 declarative 방식은 시간이 오래 걸린다. 커맨드 입력하여 바로 넘어가자
- 복잡한 요구사항이 있는 경우엔 yaml 파일 작성하고 apply 커맨드를 사용하자.
'IT > CKA' 카테고리의 다른 글
CKA 준비과정 - Scheduling (2) / Labels and Selectors (0) | 2023.05.13 |
---|---|
CKA 준비과정 - Scheduling (1) (0) | 2023.05.13 |
CKA 준비과정 - Kubernetes 개념 (7) / Namespaces (0) | 2023.05.06 |
CKA 준비과정 - Kubernetes 개념 (6) / Services (0) | 2023.05.01 |
CKA 준비과정 - Kubernetes 기초 (5) / Deployments (0) | 2023.05.01 |