[kubernetes] 쿠버네티스 오브젝트
쿠버네티스 오브젝트
쿠버네티스 시스템에서 영속성을 가지는 오브젝트입니다.
쿠버네티스틑 상태를 나타내기 위해 이 오브젝트를 이용합니다.
- 어떤 컨테이너화된 애플리케이션이 동작 중인지 ( 어느 노드에서 동작 중인지 )
- 그 애플리케이션이 이용할 수 있는 리소스
- 그 애플리케이션이 어떻게 재구동 정책, 업그레이드, 그리고 내고장성과 같은 것에 동작해야 하는지에 대한 정책
쿠버네티스 오브젝트는 하나의 의도를 담은 레코드
입니다. 오브젝트를 생성하게 되면, 쿠버네티스 시스템은 그 오브젝트 생성을 보장하기 위해 지속적으로 작동할 것입니다.
오브젝트를 생성함으로써, 클러스터의 워크로드를 어떤 형태로 보이고자 하는지에 대해 효과적으로 쿠버네티스 시스템에 전합니다. 이것이 우리가 클러스터에 대해 의도한 상태가 됩니다.
생성 ,수정 ,삭제 등 쿠버네티스 오브젝트를 동작시키려면 쿠버네티스 API를 이용해야 합니다. 예를 들어 kubectl
명령어를 이용할때 kubectl
은 쿠버네티스 API를 호출해줍니다. 또한, 우리는 클라이언트 라이브러리 중 하나를 이용하여 우리만의 프로그램에서 쿠버네티스 API를 직접 이용할 수도 있습니다.
오브젝트 명세(spec)와 상태(status)
거의 모든 쿠버네티스 오브젝트는 오브젝트의 구성을 결정해주는 두 개의 중첩된 오브젝트 필드를 포함하는데 오브젝트 spec
과 오브젝트status
입니다.
spec
을 가진 오브젝트는 오브젝트를 생성할 때 리소스에 원하는 특징(의도한 상태)에 대한 설명을 제공해서 설정합니다.
status
는 쿠버네티스 시스템과 컴포넌트에 의해 제공되고 업데이트된 오브젝트의 현재 상태를 설명합니다.
쿠버네티스 컨트롤 플레인은 모든 오브젝트의 실제 상태를 사용자가 의도한 상태와 일치시키기 위해 끊임없이 그리고 능동적으로 관리합니다.
예를 들어, 쿠버네티스 디플로이먼트는 클러스터에서 동작하는 애플리케이션을 표현해줄 수 있는 오브젝트입니다. 디플로이먼트를 생성할때 디플로이먼트 spec
에 3개의 애플리케이션 레플리카가 동작되도록 설정할 수 있습니다. 쿠버네티스 시스템은 그 디플로이먼트 spec
을 읽어 spec
에 일치되도록 상태를 업데이트하여 3개의 의도한 애플리케이션 인스턴스를 구동시킵니다.
만약, 그 인스턴스들 중 어느 하나가 어떤 문제로 인해 멈춘다면(상태 변화 발생), 쿠버네티스 시스템은 보정을 통해 spec
과 status
간의 차이에 대응합니다.
자세한 내용은 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의 모든 포맷
Author And Source
이 문제에 관하여([kubernetes] 쿠버네티스 오브젝트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@miewone/kubernetes-쿠버네티스-오브젝트저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)