쿠버네티스 오브젝트를 생성할때 이 오브젝트가 어떤 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
쿠버네티스 시스템은 오브젝트의 spec 과 현재 status 의 차이에 지속적으로 대응하면서 동작한다
쿠버네티스 오브젝트를 동작시키려면 쿠버네티스 api 를 이용해야 함.
$ 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: 일치성, 집합성 기준요건으로 특정 레이블에대해서만 뭔가를 할수 있음
# 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
리소스를 완전히 삭제하기 전에 특정 조건이 충족될 때까지 대기하도록 지시하는 네임스페이스 키.
metadata.finalizers 매니페스트 파일 사용하여 종료자 지정.
ex) kubernetes.io/pv-protection : pod 에서 pv 사용중일 때 pv 삭제 방지 (pv 삭제요청시 바로 삭제가 되지 않고 terminating 상태가 됨)