-
[Kubernetes] 쿠버네티스 오브젝트 관리공부/데이터 2023. 3. 4. 16:21
kubectl
커맨드라인 툴은 쿠버네티스 오브젝트를 생성하고 관리하는 다양한 방법을 지원합니다. 이 문서는 여러 가지 접근법에 대한 개요를 제공합니다.관리 기법
명령형 커맨드
kubectl
커맨드를 사용하여 클러스터 내의 활성 오브젝트를 직접 동작시킬 수 있습니다. 이 방법은 일회성 작업을 시작하거나 실행하는 데 추천됩니다. 그러나 이 방법은 활성 오브젝트에 직접적인 영향을 미치기 때문에, 이전 구성에 대한 이력을 제공하지 않습니다.예를 들어, 아래와 같이 디플로이먼트 오브젝트를 생성하여 nginx 컨테이너의 인스턴스를 구동시킬 수 있습니다.
kubectl create deployment nginx --image nginx
장단점
오브젝트 구성 대비 장단점은 다음과 같습니다.
장점
- 커맨드는 단 하나의 단계만으로 클러스터를 수정 가능
- 커맨드는 하나의 동작을 나타내는 단어로 표현
단점
- 커맨드는 변경 검토 프로세스와 통합되지 않음
- 커맨드는 변경에 대한 감사 추적(audit trail)을 제공하지 않음
- 커맨드는 활성 동작 중인 경우를 제외하고 레코드의 소스를 제공하지 않음
- 커맨드는 새로운 오브젝트 생성을 위한 템플릿을 제공하지 않음
명령형 오브젝트 구성
명령형 오브젝트 구성에서는 kubectl 커맨드로 작업(생성, 교체 등), 선택적 플래그, 그리고 최소 하나의 파일 이름을 지정합니다. 그 파일은 YAML 또는 JSON 형식으로 오브젝트의 완전한 정의를 포함해야만 합니다.
다음은 구성 파일을 사용해 오브젝트 생성, 삭제, 업데이트를 하는 예시입니다.
kubectl create -f nginx.yaml
kubectl delete -f nginx.yaml -f redis.yaml
kubectl replace -f nginx.yaml
장단점
명령형 커맨드 대비 장단점은 다음과 같습니다.
장점
- 오브젝트 구성은 Git과 같은 소스 컨트롤 시스템 활용 가능
- 오브젝트 구성은 푸시와 감사 추적 전에 변경사항을 검토하는 것과 같은 프로세스들과 통합 가능
- 오브젝트 구성은 새로운 오브젝트 생성을 위한 템플릿을 제공
단점
- 오브젝트 구성은 오브젝트 스키마에 대한 기본적인 이해를 필요
- 오브젝트 구성은 YAML 파일을 기록하는 추가적인 과정을 필요
선언형 오브젝트 구성 대비 장단점은 다음과 같습니다.
장점
- 명령형 오브젝트 구성의 동작은 보다 간결하고 이해하기 쉬움
- 쿠버네티스 버전 1.5 부터는 더 성숙한 명령형 오브젝트 구성을 제공
단점
- 명령형 오브젝트 구성은 디렉터리가 아닌, 파일에 가장 적합
- 활성 오브젝트에 대한 업데이트는 구성 파일에 반영되어야 하며 그렇지 않으면 다음 교체 중에 손실 발생
선언형 오브젝트 구성
선언형 오브젝트 구성을 사용하면 로컬에 저장된 오브젝트 구성 파일을 대상으로 작동하며, 생성, 업데이트 및 삭제 작업은
kubectl
에서 자동으로 감지됩니다. 이를 통해 디렉터리에서 다른 오브젝트에 대해 다른 조작을 수행할 수 있습니다.예를 들어,
configs
디렉터리 내의 구성 파일을 처리하고 활성 오브젝트를 생성 또는 패치합니다. 변경 사항을 알아보기 위해diff
하고 적용할 수 있습니다.kubectl diff -f configs/ kubectl apply -f configs/
또한 재귀적으로도 처리할 수 있습니다.
kubectl diff -R -f configs/ kubectl apply -R -f configs/
장단점
명령형 오브젝트 구성 대비 장단점은 다음과 같습니다.
장점
- 활성 오브젝트에 직접 작성된 변경 사항은 구성 파일로 다시 병합되지 않더라도 유지
- 선언형 오브젝트 구성은 디렉터리에서의 작업 및 오브젝트 별 작업 유형(생성, 패치, 삭제)의 자동 감지에 더 나은 지원을 제공
단점
- 선언형 오브젝트 구성은 예상치 못한 결과를 디버깅하고 이해하기가 더 어려움
- diff를 사용한 부분 업데이트는 복잡한 병합 및 패치 작업을 일으킴
레퍼런스
https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/object-management/