본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 47: Kubectl Apply Command

by 공부하는 무니 2023. 1. 5.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


(보충 필요 - 캡처)

kubectl apply command

이번 강의에서는 kubectl apply커맨드가 어떻게 작동하는지에 대해 이해해보겠습니다.

Declarative

지난 강의에서 우리는 declarative한 방식으로 오브젝트를 관리하는데 kubectl apply커맨드가 어떻게 사용하는지 보았습니다. 이번 강의에서는 커맨드가 내부적으로 어떻게 작동하는지 조금 더 살펴보겠습니다.

Kubectl Apply

apply커맨드는 로컬 configuration file, kubernetes의 liev object definition, 마지막으로 적용된 구성을 변경사항을 결정하기 전에 고려합니다. 따라서 apply 커맨드를 실행할 때, 오브젝트가 아직 존재하지 않는 경우, 오브젝트가 생성됩니다. 오브젝트가 생성되면 오브젝트 configuration(우리가 로컬에서 만든 것과 유사)은 쿠버네티스 내에서 생성됩니다.

그러나 오브젝트의 상태를 저장하는 추가 필드가 있습니다. 이것이 Kubernetes 클러스터에 있는 오브젝트의 live configuration입니다.

(캡처)

이것이 Kubernetes가 어떤 접근 방식을 사용하여 오브젝트를 생성했든간에, 내부적으로 정보를 저장하는 방식입니다. 그러나 오브젝트를 생성하기 위해 kubectl apply 커맨드를 사용하면 약간 더 많은 작업을 수행합니다.

우리가 작성한 로컬 오브젝트 configuration 파일의 YAML 버전은 json 형식으로 변환되고, 마지막으로 적용된 configuration으로 저장됩니다. 앞으로 오브젝트에 대한 모든 업데이트에 대해 어떤 변경이 live object에 적용되는지 세 가지 모두 비교하겠습니다.

  • Local file
  • Last applied Configuration
  • Kubernetes (Live object configuration)

예를 들어, nginx 이미지가 1.19로 업데이트되었을 때, kubectl apply 커맨드는 local file과 live configuration의 값을 비교합니다. 만약 차이점이 있다면 live configuration이 새 값으로 업데이트됩니다. 변경 후, 마지막으로 적용된 json 형식은 항상 최신 상태로 업데이트됩니다.

그렇다면 왜 우리는 last applied configuration이 필요할까요? type label과 같은 필드가 삭제되었다고 가정해 보겠습니다. 이제 kubectl apply 커맨드를 실행하면 마지막으로 적용된 configuration에는 레이블이 있었으나, 로컬 configuration에는 없다는 것을 알 수 있습니다. 이것은 그 필드를 live configuration에서 제거해야 함을 의미합니다. 따라서 live configuration에 필드가 있고 로컬이나 last applied configuration에 존재하지 않는다면, 필드는그대로 남게 됩니다. 그러나 로컬 파일에서 필드가 누락되고 마지막으로 적용된 configuration에 존재한다면, 이전 단계나 또는 kubectl apply 명령을 마지막으로 실행했을 때마다 해당 특정 필드가 있었고 현재 제거 중이라는 것을 의미합니다.

따라서 마지막으로 적용된 configuration은 로컬 파일에서 어떤 필드가 제거되었는지 파악하는 데 도움이 됩니다. 해당 필드는 실제 live configuration에서 제거된 것입니다. 방금 얘기한 내용을 Kubernetes 공식문서 페이지에서 자세히 설명합니다. 

 

우리는 세 종류의 파일을 보았고, 로컬 파일이 로컬 시스템을 저장하고 있다는 것을 알았습니다. 라이브 오브젝트 configuration은 Kubernetes 메모리에 있습니다. 그런데 마지막으로 적용된 configuration이 저장되는 json file은 어디에 있을까요? Kubernetes 클러스터 자체의 live object configuration에 last applied configuration라는 주석으로 저장됩니다.

따라서 apply명령을 사용해야만 완료되고, kubectl create, replace 명령은 last applied configuration 을 저장하지 않는다는 것을 기억해주세요. 그러므로 imperative 방식과 declarative방식을 혼합하지 않도록 명심해야 합니다. 따라서 apply 커맨드를 사용할 때마다 live configuration내에서 변경사항을 결정하기 위해 local part definition file, live object configuration, last applied configuration stored within the live object configuration file 세가지 섹션을 모두 비교합니다.

 

반응형

댓글