개발 이야기/[자격증] 쿠버네티스

[CKA with Practice Tests] Section 2. Core concepts - (12) Imperative vs Declarative

경이로운아일라 2024. 8. 29. 00:31
이 글은 <Certificated Kubernetes Administrator (CKA) with Practice Test, Mumshad Mannambeth, Kode Kloud Training> 섹션 2. Core concepts를 참고하여 작성하였습니다.

[CKA with Practice Tests] Section 2. Core concepts - (12) Imperative vs Declarative

이번 포스트에서는 Kubernetes에서 리소스를 관리하는 두 가지 주요 접근법, 즉 명령적(Imperative) 접근법과 선언적(Declarative) 접근법에 대해 다루겠습니다. 또한, 이 두 가지 접근법을 실무와 시험에서 어떻게 활용할 수 있는지에 대한 팁도 알아보겠습니다.

 

Imperative Approach

명령적 접근법은 관리자나 사용자가 명령을 통해 시스템에 즉시 작업을 지시하는 방식입니다. 이 방식은 특정 작업을 직접 수행해야 할 때 유용합니다. 예를 들어, Kubernetes에서 포드(Pod)를 생성하거나, 배포(Deployment)를 설정하는 명령을 실행하는 것이 이에 해당합니다.

더보기
더보기

kubectl run nginx-pod --image=nginx

장점:

  • 빠른 실행: 간단한 작업을 빠르게 수행할 수 있습니다.
  • 직관적: 명령어 한 줄로 원하는 작업을 바로 실행할 수 있습니다.

단점:

  • 추적 어려움: 명령 실행 후에는 어떤 설정이 적용되었는지 추적하기 어렵습니다.
  • 복잡성: 복잡한 작업을 처리할 때 명령어가 길어지고, 관리가 어려워집니다.

Imperative Approach Command Exmaples:

더보기
더보기

kubectl run nginx-pod --image=nginx:alpine

kubectl run redis --image=redis:alpine --labels="tier=db"

kubectl run custom-nginx --image=nginx --port=8080 

kubectl run httpd --image=httpd:alpine --port=80 --expose=true

kubectl expose redis --port 6379 --name redis-service

kubectl create namespace dev-ns

kubectl create deployment webapp --image=kodekloud/webapp-color --replicas=3

kubectl create deployment redis-deploy --image=redis --replicas=2 -n dev-ns

 

Declarative Approach

선언적 접근법은 시스템의 최종 상태를 선언하고, 시스템이 그 상태에 도달하도록 자동으로 조정하는 방식입니다. YAML 또는 JSON 파일로 리소스를 정의하고, Kubernetes가 이 파일을 읽어 원하는 상태를 설정하는 방식은 선언적 접근법에 해당합니다.

kubectl apply -f nginx-pod.yaml

장점:

  • 변경 추적 가능: 모든 설정이 파일에 기록되므로, 변경 사항을 쉽게 추적하고 관리할 수 있습니다.
  • 재사용 가능: 동일한 설정 파일을 여러 환경에 적용할 수 있습니다.
  • 자동화 가능: 선언적 설정 파일을 기반으로 인프라를 자동화할 수 있습니다.

단점:

  • 초기 설정 복잡: 초기 설정이 다소 복잡할 수 있으며, 파일 작성이 필요합니다.

 

유용한 팁

 

  1. 명령적 접근법 활용:
    • 시험에서 시간 절약: 간단한 포드 생성이나 배포 설정 등의 작업을 빠르게 수행할 때 명령적 접근법을 사용하세요. 예를 들어, kubectl run이나 kubectl expose 명령을 사용하면 빠르게 작업을 완료할 수 있습니다.
    • 임시 수정: 특정 리소스의 속성을 임시로 수정할 때 kubectl edit 명령을 사용하면 효율적입니다.
  2. 선언적 접근법 활용:
    • 복잡한 설정 관리: 다중 컨테이너 포드나 환경 변수 설정, 초기화 컨테이너(init container) 등이 필요한 경우, 선언적 접근법이 더 적합합니다. YAML 파일을 작성하고, kubectl apply 명령으로 배포하세요.
    • 변경 사항 추적: 구성 파일을 Git과 같은 버전 관리 시스템에 저장하여 변경 사항을 기록하고 추적할 수 있습니다. 이렇게 하면 팀 전체가 동일한 설정을 사용할 수 있습니다.