쿠버네티스 작업을 한다는 것은 각 기능을 구현하는 코드를 찾아서 작성하는 것을 의미한다. 쿠버네티스 코드를 작성하는 데는 주로 YAML파일을 사용하며 모든 쿠버네티스 리소스와 해당 옵션은 YAML 파일로 구현할 수 있다.
모든 쿠버네티스 오브젝트는 YAML 파일로 실행하고, 실행 중인 모든 오브젝트는 YAML 파일로 익스포트(export) 할 수 있다.
테스트를 위해 busybox 이미지를 사용하여 파드를 띄운다. busybox이미지는 1~5MB의 작은 용량에 많이 사용하는 유닉스 유틸리티(ping, nc, nslookup)을 포함하고 있어서 문제가 발생했을 때 디버깅 용도로 많이 사용한다.
# busybox 이미지로 busybox 이름의 파드 생성
$ kubectl run busybox --image=busybox
pod/busybox created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 0/1 CrashLoopBackOff 5 (66s ago) 4m9s
nginx 1/1 Running 0 131m
다른 파드와 다르게 계속 실행되는 프로세스가 없기 때문에 CrashLoopBackOff가 떴다. command 옵션으로 계속 실행되는 프로세스를 추가해야한다.
## 실행 중인 busybox 파드를 yaml 파일로 익스포트하기
$ kubectl get pod busybox -o yaml
...
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2024-10-13T13:48:10Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2024-10-13T13:48:10Z"
message: 'containers with unready status: [busybox]'
reason: ContainersNotReady
status: "False"
type: Ready
...
하지만 kube-neat플러그인은 익스포트된 yaml 파일에서 불필요한 정보를 제거한다.
## 플러그인 매니저인 krew를 이용하여 kube-neat 설치
$ kubectl krew install neat
$ kubectl get pod busybox -o yaml | k neat
apiVersion: v1
kind: Pod
metadata:
annotations: ...
익스포트한 busybox 파드의 YAML 파일을 busybox-pod.yml 이라는 이름으로 저장하고 이 파일에 command 옵션을 추가해보자.
$ kubectl get pod busybox -o yaml | k neat > busybox-pod.yml
yaml 파일에서 사용하는 배열(list) 데이터 타입은 '-'기호를 사용하고 위에서부터 순서대로 항목을 나열한다.
템플릿 파일은 쿠버네티스 공식 홈페이지에서 제공하고 있다.