Objects In Kubernetes

숭맹이·2025년 4월 25일

오브젝트란 무엇인가?

Kubernetes에서 오브젝트는 "원하는 상태(desired state)"의 선언입니다. 이 선언은 다음과 같은 클러스터 상태를 정의합니다:

  • 어떤 애플리케이션이 어떤 노드에서 실행 중인지
  • 애플리케이션에 할당된 리소스
  • 재시작 정책, 업그레이드 방식, 장애 허용성과 같은 동작 정책

오브젝트는 단순한 리소스 정보 이상의 의미를 가지며, Kubernetes는 이 선언을 기반으로 클러스터를 끊임없이 조율합니다. 이처럼 오브젝트는 "명령"이 아니라 "의도"를 기록하는 방식이라는 점에서, 선언적(declarative) 접근을 대표합니다.


오브젝트의 구조

대부분의 Kubernetes 오브젝트는 다음과 같은 공통 필드를 갖습니다:

apiVersion: <API 버전>
kind: <오브젝트 종류>
metadata:
  name: <오브젝트 이름>
  namespace: <네임스페이스 (선택)>
spec:
  ... 원하는 상태에 대한 정의 ...

필드 설명

  • apiVersion: 해당 오브젝트를 처리할 API의 버전
  • kind: 생성하고자 하는 오브젝트의 종류 (예: Deployment, Pod 등)
  • metadata: 이름, 라벨, 네임스페이스 등 식별자 정보
  • spec: 오브젝트가 어떤 상태를 가져야 하는지 정의

또한, Kubernetes는 status라는 필드를 통해 현재 상태(actual state)를 기록합니다. 이는 시스템이 자동으로 업데이트하며, 사용자는 수정하지 않습니다.


예제: Deployment 오브젝트

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

위 YAML은 nginx 컨테이너를 2개의 복제본으로 실행하는 Deployment를 정의합니다. 중요한 점은 이 설정이 단순히 "2개의 nginx를 실행하라"는 명령이 아니라, "2개가 항상 존재해야 한다"는 의도를 담고 있다는 것입니다. Kubernetes는 이 의도를 만족시키기 위해 pod를 생성하고, 실패 시 재시작하며, 롤링 업데이트도 처리합니다.

적용 방법:

kubectl apply -f deployment.yaml

오브젝트와 API

오브젝트는 결국 Kubernetes API를 통해 정의되고 조작됩니다. kubectl CLI는 이러한 API 호출을 추상화해주는 도구일 뿐입니다. 직접 프로그램에서 오브젝트를 생성하거나 조회하고 싶다면, Kubernetes 클라이언트 라이브러리를 사용할 수 있습니다 (Go, Python, Java 등).


유효성 검사 (Validation)

Kubernetes v1.25부터는 서버 측 필드 유효성 검사가 도입되었습니다. 기존에는 kubectl --validate=true를 통해 클라이언트 측에서만 필드 유효성을 검사했지만, 이제는 서버에서 직접 잘못된 필드나 중복된 항목을 검사합니다.

검사 옵션

  • strict: 유효하지 않으면 에러
  • warn: 유효하지 않아도 경고만 출력
  • ignore: 검사를 수행하지 않음

기본값은 strict이며, 이는 CI/CD 환경에서 잘못된 리소스 정의로 인한 장애를 미리 방지하는 데 효과적입니다.

profile
👨🏻‍💻 Backend Developer

0개의 댓글