본문 바로가기

Cloud/Kubernetes

쿠버네티스 오브젝트

쿠버네티스 오브젝트는 클러스터의 '상태'를 나타내기 위한 영속성을 가지는 오브젝트이며,

 

여기서 말하는 상태는 동작중인 애플리케이션이 어떤 컨테이너화 된, 어느 노드에서 동작중인지, 이용할 수 있는 리소스들은 무엇이 있는지, 어떤 정책을 적용 했는지 등을 말한다.

 

이전에 포스팅 했던 쿠버네티스 기본 명령어 정리 (tistory.com) 에서 명령어를 통해 쿠버네티스 API를 호출하는 것이

바로 쿠버네티스 오브젝트를 동작시키는 것 이다.

 

 오브젝트는 specstatus를 가지는데,

 

- spec은 내가 '의도한(원하는) 상태'를 기술해놓은 것 이고 ,

- status는 쿠버네티스 시스템과 컴포넌트에 의해 제공되고 업데이트된 '현재의 상태'를 의미 한다. 

 

쿠버네티스 오브젝트를 생성하기위해 API 요청내용을 JSON 형식으로 정보를 줘야한다. 대부분 .yaml 파일kubectl에 제공한다.(kubectl이 JSON parsing)

 

> 쿠버네티스 오브젝트의 기본 구조(필수 필드)

apiVersion: 
kind:
metadata:

spec:
  • apiVersion - 이 오브젝트를 생성하기 위해 사용하고 있는 쿠버네티스 API 버전이 어떤 것인지
  • kind - 어떤 종류의 오브젝트를 생성하고자 하는지
  • metadata - 이름 문자열, UID, 그리고 선택적인 네임스페이스를 포함하여 오브젝트를 유일하게 구분지어 줄 데이터
  • spec - 오브젝트에 대해 어떤 상태를 의도하는지(spec은 모든 쿠버네티스 마다 다르며 해당 오브젝트 특유의 중첩된 필드를 포함한다.)

 

위의 기본 형태를 기반하여 명세하고 완성된 .yaml 파일인 test.yaml 이 있다고 가정한다면 쿠버네티스 오브젝트를 kubectl CLI에 인자값으로 .yaml 파일명을 작성하여 생성할 수 있다.

 

kubectl apply -f test.yaml

 

 

 

 

 

* 쿠버네티스 오브젝트를 생성/관리하는법은 크게 두가지로 나뉜다. 하지만 하나의 기법만 사용하는 것을 권장한다.

 

 

- 명령적 관리 : 원하는 상태를 만들기 위해 필요한 동작을 지시하는 것 

 

kubectl run nginx --image=nginx
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80
kubectl edit deployment nginx
kubectl scale deployment nginx --replicas=5
kubectl set image deployment nginx nginx=nginx:1.18
kubectl <create|replace|delete> -f nginx.yaml

=> 필요한 것을 명시적으로 지시한다.

 

 

 

 

 

- 선언적 관리 : 원하는 상태 그 자체를 선언하는 것

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-container
    image: nginx

 

↓  1. nginx.yaml 파일 수정

 

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-container
    image: nginx:1.20.2

 

 

↓  2. 명령어 실행

 

kubectl apply -f nginx.yaml

=> 선언한 특정 상태를 시스템 스스로 파악하여 반영해준다.

 

728x90
반응형