쿠버네티스 api, 명세(spec)과 상태(status)

코딩노잼·2022년 6월 6일
0

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

쿠버네티스 오브젝트를 생성할때 이 오브젝트가 어떤 status를 갖기를 원하는지 spec 을 설정할수 있음.(yaml 파일 등으로)

# nginx 컨테이너 하나로 구성된 pod 생성하기

apiVersion: v1
kind: Pod
metadata:
  name: my-nginx-pod
spec:
  containers:
  - name: my-nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80
      protocol: TCP
  • apiVersion: 오브젝트의 API 버전
  • kind: 리소스의 종류 (kubectl api-resources 로 확인)
  • metadata: label, name 등 리소스의 부가 정보
  • spec: 리소스 생성 위한 자세한 정보 (어떤 컨테이너, 어떤 이미지, 어떤 포트 사용할 것인지 등..)

쿠버네티스 시스템은 오브젝트의 spec 과 현재 status 의 차이에 지속적으로 대응하면서 동작한다


쿠버네티스 오브젝트 동작

쿠버네티스 오브젝트를 동작시키려면 쿠버네티스 api 를 이용해야 함.

  • kubectl 이용한 방법 - kube config 있는 설정으로 api 날려줌 (log level 설정하여 직접 요청 보내지는것 볼수있음)
$ kubectl get pods -v=10

I0615 21:28:33.354485    7186 loader.go:372] Config loaded from file:  /Users/kakao/.kube/config
I0615 21:28:33.371476    7186 round_trippers.go:466] curl -v -XGET  -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.23.5 (darwin/amd64) kubernetes/c285e78" -H "Authorization: Bearer <masked>" 'https://dkosv3-c2-api-dev2-master-1.pg1.krane.9rum.cc:6443/api/v1/namespaces/default/pods?limit=500'
I0615 21:28:33.373846    7186 round_trippers.go:495] HTTP Trace: DNS Lookup for dkosv3-c2-api-dev2-master-1.pg1.krane.9rum.cc resolved to [{10.194.5.252 }]
I0615 21:28:33.418193    7186 round_trippers.go:510] HTTP Trace: Dial to tcp:10.194.5.252:6443 succeed
I0615 21:28:33.459433    7186 round_trippers.go:570] HTTP Statistics: DNSLookup 2 ms Dial 43 ms TLSHandshake 19 ms ServerProcessing 19 ms Duration 87 ms
I0615 21:28:33.459450    7186 round_trippers.go:577] Response Headers:
I0615 21:28:33.459468    7186 round_trippers.go:580]     Date: Wed, 15 Jun 2022 12:28:33 GMT
I0615 21:28:33.459474    7186 round_trippers.go:580]     Cache-Control: no-cache, private
I0615 21:28:33.459478    7186 round_trippers.go:580]     Content-Type: application/json
I0615 21:28:33.476562    7186 request.go:1181] Response Body: ...
NAME                                            READY   STATUS    RESTARTS   AGE
him-krane-dev-web-deployment-7775b95f4f-pht2t   1/1     Running   0          56d
mymysql-percona-server-80-7c75f7bc4b-mvtgb      3/3     Running   1          56d
mypostgresql-postgresql-0                       1/1     Running   0          56d
snapscheduler-7b5f46856f-f9hcn                  2/2     Running   0          13d

네임스페이스

단일 클러스터 내에 리소스 그룹을 격리.

  • 네임스페이스 기반 오브젝트: 디플로이먼트, 서비스 등 (논리적 단위)
  • 클러스터 기반 오브젝트: 스토리지클래스, 노드, 퍼시스턴트 볼륨 (물리적 단위)

Label 과 Selector

label: 오브젝트에 붙는 태그 같은 것. 키+값
Selector: 일치성, 집합성 기준요건으로 특정 레이블에대해서만 뭔가를 할수 있음

# example: 'accelerator=nvidia-tesla-p100' 레이블을 가진 노드에 대해서만 파드 생성하기

apiVersion: v1
kind: Pod
metadata:
  name: cuda-test
spec:
  containers:
    - name: cuda-test
      image: "k8s.gcr.io/cuda-vector-add:v0.1"
      resources:
        limits:
          nvidia.com/gpu: 1
  nodeSelector:
    accelerator: nvidia-tesla-p100

Finalizer

리소스를 완전히 삭제하기 전에 특정 조건이 충족될 때까지 대기하도록 지시하는 네임스페이스 키.
metadata.finalizers 매니페스트 파일 사용하여 종료자 지정.
ex) kubernetes.io/pv-protection : pod 에서 pv 사용중일 때 pv 삭제 방지 (pv 삭제요청시 바로 삭제가 되지 않고 terminating 상태가 됨)

profile
올해는 진짜 블로그 써야지 (라고 매년 말하기)

0개의 댓글