본문 바로가기
IT/Kubernetes

[Kubernetes] Kubernetes Object (쿠버네티스 오브젝트) - DevelopMoon

by developmoon 2024. 10. 23.

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

Kubernetes Object란

  • 쿠버네티스 객체는 쿠버네티스 시스템의 영구 엔티티이다. 다른 말로 쿠버네티스 시스템에서 영속성을 가지고 있는 객체이다.
  • 이 객체를 사용하여 쿠버네티스는 클러스터의 상태를 나타내며 구체적으로 아래와 같이 설명할 수 있다.
    • 어떤 컨테이너화된 애플리케이션이 동작 중인지 (그리고 어느 노드에서 동작 중인지)
    • 해당 애플리케이션에서 사용 가능한 리소스
    • 재구동 정책, 업그레이드, 그리고 내결함성과 같은 해당 애플리케이션의 동작 방식에 대한 정책
  • 쿠버네티스 객체는 하나의 "의도를 담은 레코드(기록)"이다.
  • 쿠버네티스 객체를 동작(생성, 수정, 삭제 등)시키려면 Kubernetes API를 사용해야 한다.
  • kubectl 커맨트 라인 인터페이스를 이용할 때, CLI는 우리 대신 필요한 쿠버네티스 API를 호출해주며, 클라이언트 라이브러리 중 하나를 이용하여 자신의 프로그램에서 쿠버네티스 API를 직접 이용할 수 있다.

 

Spec과 Status

  • 쿠버네티스에서 오브젝트는 클러스터의 상태를 관리하고 조정하기 위한 중요한 구성 요소이다.
  • 각 오브젝트는 두 가지 주요 필드를 포함하는데 spec과 status이다.
  • spec은 spec을 가진 오브젝트는 사용자가 의도한 상태를 정의한다.
  • 예를 들어, Deployment를 생성할 때 spec에서 몇 개의 애플리케이션 인스턴스(Replica)가 실행되어야 하는지 설정할 수 있다.
  • Status는 현재 오브젝트의 실제 상태를 나타낸다.
  • 쿠버네티스 시스템은 이 필드를 지속적으로 업데이트하여 사용자가 정의한 spec과 일치하도록 클러스터를 관리한다.
  • 예를 들어, 사용자가 3개의 레플리카를 정의한 경우, 쿠버네티스는 실제로 3개의 인스턴스가 실행되도록 지속적으로 상태를 조정한다. 만약 어떤 이유로 한 인스턴스가 중지되면, 쿠버네티스는 자동으로 새로운 인스턴스를 시작하여 spec과 status 간의 차이에 대응한다.
  • 객체 사양, 상태 및 메타데이터에 대한 자세한 내용은 Kubernetes API Conventions를 참조하면 된다.

 

필수 필드

  • 생성하려는 Kubernetes 객체의 매니페스트(YAML 또는 JSON 파일)에서 다음 필드에 대한 값을 설정해야 한다.
  • apiVersion
    • 객체를 생성하는 데 사용하는 Kubernetes API 버전을 뜻한다.
  • kind
    • 어떤 종류의 객체를 만들고 싶은지 작성한다.
    • Deployment, Service 등이 있다.
  • metadata
    • name, namespace, UID 등을 포함하여 객체를 고유하게 식별하는 데 도움이 되는 데이터이다.
  • spec
    • 객체에 대한 원하는 상태를 지정한다.
  • 오브젝트 spec에 대한 정확한 포맷은 모든 쿠버네티스 오브젝트마다 다르고, 그 오브젝트 특유의 중첩된 필드를 포함한다.

※  kubernetes API : 해당 사이트는 Kubernetes API를 통해 Kubernetes 리소스 객체를 읽고 쓰기 위해 필요한 각 필드와 그에 사용되는 값들을 정리해 놓은 문서입니다. 이 문서를 참고하면 Kubernetes API 엔드포인트를 사용해 다양한 Kubernetes 리소스 객체를 관리할 때 필요한 정보들을 쉽게 확인할 수 있습니다.


Reference

https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md

https://kubernetes.io/ko/docs/reference/using-api/client-libraries/