Imperative(명령형) vs Declarative(선언형)
-
Imperative
- 코드 작성하는 것처럼 원하는 결과물을 얻기 위해 하나하나 지정하고 명령내려야함
- kubectl run --image=nginx nginx
- create, expose, edit, scale, set, replace, delete 등 명령어 입력이 해당됨
- expose는 기존 리소스를 기반으로 service 생성하는 명령
- kubectl expose pod redis --port=6379 --name=redis-service --type=ClusterIP 이렇게 씀
- 이러한 명령어로만 구성하면 history 추적이 어려워짐
-
Declarative
- 원하는 값만 선언하면 소프트웨어가 알아서 수행해줌
- 해줘. 가 가능
- kubectl apply -f file.yaml와 같은 명령어가 해당됨
Declarative - kubectl apply
local file(yaml) - kubernetes(쿠버네티스 메모리에 저장) - last applied configuration
- local file apply 시 kubernetes에서 객체 상태를 저장하기 위한 필드 추가 생성하여 저장(live object configuration)
- last applied configuration의 경우 yaml 파일을 json 형식으로 변환
- 이 경우는 삭제된 필드를 확인하는데에 효과적
- kubectl.kubernetes.io/last-applied-configuration 라는 이름의 어노테이션으로 kubernetes에 저장
- 명령형과 선언형을 혼용하여 사용하지 않도록 함
https://github.com/kodekloudhub/certified-kubernetes-administrator-course
참고하면 좋을 링크