IT/CKA

CKA 준비과정 - Kubernetes 개념 (8) / Imperative vs Declarative

Primes 2023. 5. 9. 11:55
728x90

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 커맨드를 사용하자.

반응형