Featured image of post 쿠버네티스: 3. 쿠버네티스 오브젝트 이해하기

쿠버네티스: 3. 쿠버네티스 오브젝트 이해하기

쿠버네티스 문서 읽어보기

쿠버네티스 오브젝트는 하나의 의도를 담은 레코드이다.

쿠버네티스 오브젝트는 쿠버네티스 시스템에서 영속성을 가지는 오브젝트이다. 쿠버네티스는 클러스터의 상태를 나타내기 위해 .yaml로 작성된 오브젝트에 상세 내용을 기술한다.

  • 어떤 컨테이너화된 애플리케이션이 동작 중인지(어느 노드에서 동작중인지)
  • 해당 어플리케이션이 이용할 수 있는 리소스
  • 해당 애플리케이션이 어떻게 재구동 정책,
  • 업그레이드
  • 내고장성과 같은 것에 동작해야 하는지에 대한 정책

오브젝트를 생성하게 되면, 쿠버네티스 시스템은 오브젝트에 담긴 상태를 보장하기 위해 지속적으로 동작하게 된다.

오브젝트 명세(spec)과 상태(status)

거의 모든 쿠버네티스 오브젝트는 spec 오브젝트와 status 오브젝트로 구성된다.

spec

spec을 가지는 오브젝트는 오브젝트를 생성할 때 리소스에 원하는 특징(의도한 상태)에 대한 설명을 제공하여 설정한다.

status

쿠버네티스 시스템과 컴포넌트에 의해 제공되고 업데이트된 오브젝트의 현재 상태를 설명한다. 컨트롤 플레인은 모든 오브젝트의 실제 상태를 사용자가 의도한 상태와 일치시키기 위해서 끊임없이 능독적으로 관리한다.

https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md

쿠버네티스 오브젝트 기술하기

쿠버네티스에서 오브젝트를 생성할 때, 오브젝트에 대한 기본적인 정보와 더불어, 의도한 상태를 기술한 오브젝트 spec을 제시해야 한다.

대부분의 경우 정보를 .yaml 파일로 kubectl에 제공한다. kubectl은 API 요청이 이루어질 때, JSON 형식으로 정보를 변환시켜준다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

요구되는 필드

생성하고자 하는 쿠버네티스 오브젝트에 대한 .yaml 파일 내, 다음 필드를 윟나 값들을 설정해 줘야한다.

  • apiVersion: 해당 오브젝트를 생성하기 위해 사용하고 있는 쿠버네티스 API 버전
  • kind: 오브젝트의 종류
  • metadata: 오브젝트를 유일하게 구분지어 줄 데이터(이름 문자열, UID, 선택적인 네임스페이스 등)

spec에 대한 정확한 포맷은 모든 쿠버네티스 오브젝트마다다르고, 그 오브젝트 특유의 중첩된 필드를 포함한다.

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/