ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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/

    댓글