[kubernetes] 쿠버네티스 오브젝트

박원균·2021년 10월 31일
0

Kubernetes

목록 보기
5/24
post-thumbnail

쿠버네티스 오브젝트

쿠버네티스 시스템에서 영속성을 가지는 오브젝트입니다.
쿠버네티스틑 상태를 나타내기 위해 이 오브젝트를 이용합니다.

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

쿠버네티스 오브젝트는 하나의 의도를 담은 레코드입니다. 오브젝트를 생성하게 되면, 쿠버네티스 시스템은 그 오브젝트 생성을 보장하기 위해 지속적으로 작동할 것입니다.

오브젝트를 생성함으로써, 클러스터의 워크로드를 어떤 형태로 보이고자 하는지에 대해 효과적으로 쿠버네티스 시스템에 전합니다. 이것이 우리가 클러스터에 대해 의도한 상태가 됩니다.

생성 ,수정 ,삭제 등 쿠버네티스 오브젝트를 동작시키려면 쿠버네티스 API를 이용해야 합니다. 예를 들어 kubectl 명령어를 이용할때 kubectl은 쿠버네티스 API를 호출해줍니다. 또한, 우리는 클라이언트 라이브러리 중 하나를 이용하여 우리만의 프로그램에서 쿠버네티스 API를 직접 이용할 수도 있습니다.

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

거의 모든 쿠버네티스 오브젝트는 오브젝트의 구성을 결정해주는 두 개의 중첩된 오브젝트 필드를 포함하는데 오브젝트 spec과 오브젝트status입니다.

spec을 가진 오브젝트는 오브젝트를 생성할 때 리소스에 원하는 특징(의도한 상태)에 대한 설명을 제공해서 설정합니다.
status는 쿠버네티스 시스템과 컴포넌트에 의해 제공되고 업데이트된 오브젝트의 현재 상태를 설명합니다.

쿠버네티스 컨트롤 플레인은 모든 오브젝트의 실제 상태를 사용자가 의도한 상태와 일치시키기 위해 끊임없이 그리고 능동적으로 관리합니다.

예를 들어, 쿠버네티스 디플로이먼트는 클러스터에서 동작하는 애플리케이션을 표현해줄 수 있는 오브젝트입니다. 디플로이먼트를 생성할때 디플로이먼트 spec에 3개의 애플리케이션 레플리카가 동작되도록 설정할 수 있습니다. 쿠버네티스 시스템은 그 디플로이먼트 spec을 읽어 spec에 일치되도록 상태를 업데이트하여 3개의 의도한 애플리케이션 인스턴스를 구동시킵니다.

만약, 그 인스턴스들 중 어느 하나가 어떤 문제로 인해 멈춘다면(상태 변화 발생), 쿠버네티스 시스템은 보정을 통해 specstatus간의 차이에 대응합니다.

자세한 내용은 Kubernetes API Conventions를 참조해주십시오.

쿠버네티스 오브젝트 기술

쿠버네티스에서 오브젝트를 생성할 때, 오브젝트에 대한 기본적인 정보와 더불어, 의도한 상태를 기술한 오브젝트 spec을 제시해줘야만 합니다. 오브젝트를 생성하기 위해 쿠버네티스 API를 이용할 때, API 요청은 요청 내용 안에 JSON형식으로 정보를 포함시켜 줘야만 합니다.

대부분의 경우 정보를 .yaml파일로 kubectl에 제공합니다

kubectl은 API 요청이 이루어질 때, JSON 형식으로 정보를 변환시켜줍니다.

yaml 예시

# testpod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: testpod
  name: testpod
spec:
  containers:
  - image: httpd
    name: testpod
    ports:
    - containerPort: 80
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

위 예시와 같이 yaml파일을 이용하여 디플로이먼트를 생성하기 위한 하나의 방식으로는 kubectl 명령어의 인자값으로 .yaml 파일을 건네 kubectl apply 명령어를 이용하는 것입니다.

# Command
$ kubectl apply -f testpod.yaml --record
# result
pod/testpod created

요구되는 필드

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

field설명
apiVersion이 오브젝트를 생성하기 위해 사용하고 있는 쿠버네티스 API 버전이 어떤 것인지
kind어떤 종류의 오브젝트를 생성하고자 하는지
metadata이름 문자열,UID, 선택적인 네임스페이스를 포함하여 오브젝트를 유일하게 구분지어 줄 데이터
spec오브젝트에 대해 어떤 상태를 의도하는지

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

profile
함바라기

0개의 댓글