쿠버네티스 교육

05. Kube 교육 - YAML 기본 문법

Jerry_이정훈 2021. 6. 4. 16:37
728x90

실습

  • 기존 실행 중인 Deploy, POD를 YAML File 형태로 Export 하세요. 
  • k neat 사용해 보세요 
  • YAML 파일 이용하여 Busybox Deploy 배포 하세요.

Why YAML?

Kubernetes 에서는 모든 Object(pod, service, ConfigMap 등)가 Code로 관리 됩니다. 이 Code는 YAML File 형식으로 apply(적용), Export(추출) 가능합니다. 기존에는 System Engineer가 명령어로 Application 설치하고 네트워크/스토리지 연결 하였다면 Kube 환경에서는 그 모든 행위를 YAML File, 코드로 수행합니다.  

 

따라서 YAML(YAML 문법이겠죠)에 반드시 익숙해 져야 합니다. (system engineer 된 후 code란 대학교 이 후 손 놓은지 20년 이상 된 것 같은데, 다시 code라니…. code 싫어서 SE 했는데)

 

무엇보다 현재 설정된 상황을 code로 export 가능하다는 게 가장 편리합니다. 만약 기존 VM 환경이라면 어떻게 설정되었는지 일일이 다른 사람에게 물어보던지 매뉴얼을 찾던지 등이 필요하여 커뮤니케이션 Cost가 엄청 소요됩니다. 하지만, Kube 환경은 비교적 수월하게 yaml file로 export 하기만 하면 되니 훨씬 일이 줄어 듭니다. 

 

YAML 기본 문법

YAML 기본 문법은 저 보다는 다른 분들이 훨씬 더 잘 정리해 두었습니다. 여러 글들이 많지만 저는 김충섭님 글을 추천 드립니다.

YAML 기본 문법 참조 

https://subicura.com/k8s/prepare/yaml.html

 

YAML 문법

YAML 문법에 대해 전반적으로 알아봅니다.

subicura.com


네, 우리는 YAML Engineer 입니다.

YAML 문법이 처음에는 복잡해 보일 수 있습니다. 하지만 YAML 파일을 처음부터 새롭게 생성하는 것이 아닙니다. 기존 사용하고 있는 YAML 파일을 참조하여 기존 파일을 가져다가 자기가 필요한 부문만 수정해서 사용하니 크게 복잡하지 않습니다. 그리고 문법 관련 에러는 VS Code에서 자동으로 에러를 Highlight 해 주어 수정이 용이 합니다. 

 

저도 VS Code 사용하고 2칸 들여쓰기 정도만 지키면서 사용하는데 크게 어려움이 없습니다.


YAML Export

그럼, 실습으로 알아 보겠습니다. 

 

1. 실행 중인 Deployment Kube Object를 YAML 파일로 export 하세요.

[spkr@erdia22 junghoon2.github.io (spkn02:nginx)]$ k get deployments.apps
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
nginx        2/2     2            2           18h

[spkr@erdia22 junghoon2.github.io (spkn02:nginx)]$ k get deployments.apps nginx -o yaml | k neat > nginx-deploy.yml

이렇게 처음부터 만들지 않고 기존에 이미 실행 중인 Object를 가져다 사용할 수 있습니다. k get 명령어에 -o yaml를 추가 하면 kube object가 yaml file 형태로 export 됩니다. 이 때 k neat tool 사용하시면 좀 더 깔끔한(neat) 형태의  YAML 파일로 export 됩니다. (k neat tool은 이전 post 참조)

[spkr@erdia22 junghoon2.github.io (spkn02:nginx)]$ cat nginx-deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  labels:
    app: nginx
  name: nginx
  namespace: nginx
spec:
  progressDeadlineSeconds: 600
  replicas: 2
(생략)

현재 운영 중인 Deploy 상세 현황을 YAML 파일로 바로 확인 가능합니다. 위와 같이 Kube는 현재 운영 중인 모든 Object가 YAML 파일로 export 가능합니다. 따라서 현재 현황을 별도의 문서 등으로 관리하지 않아도 됩니다.

 

참고로, Kube 거의 모든 Object YAML 파일은 AKMS(apiVersion, kind, metadata, spec)를 포함합니다. 이 리스트는 들여 쓰기 첫번째 줄에 사용합니다.

 

Kube 공식 홈페이지를 참고 하시면 간단한 설명을 보실 수 있습니다.

요구되는 필드
생성하고자 하는 쿠버네티스 오브젝트에 대한 .yaml 파일 내, 다음 필드를 위한 값들을 설정해 줘야한다.

apiVersion - 이 오브젝트를 생성하기 위해 사용하고 있는 쿠버네티스 API 버전이 어떤 것인지
kind - 어떤 종류의 오브젝트를 생성하고자 하는지
metadata - 이름 문자열, UID, 그리고 선택적인 네임스페이스를 포함하여 오브젝트를 유일하게 구분지어 줄 데이터
spec - 오브젝트에 대해 어떤 상태를 의도하는지

POD YAML 파일 export 방법도 동일 합니다.

[spkr@erdia22 junghoon2.github.io (spkn02:nginx)]$ k get pod
NAME                          READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-rk4lj        1/1     Running   0          18h
nginx-6799fc88d8-zx4hv        1/1     Running   0          16m

[spkr@erdia22 junghoon2.github.io (spkn02:nginx)]$ k get pod -o yaml nginx-6799fc88d8-zx4hv |k neat > nginx-pod.yml

[spkr@erdia22 junghoon2.github.io (spkn02:nginx)]$ cat nginx-pod.yml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/podIP: 10.233.92.48/32
    cni.projectcalico.org/podIPs: 10.233.92.48/32
  labels:
    app: nginx
    pod-template-hash: 6799fc88d8
  name: nginx-6799fc88d8-zx4hv
  namespace: nginx
spec:
  containers:
(생략)

사용 사례

  • 다양한 YAML 파일 예제를 미리 사용 & 정리해 두고 필요한 경우 빠르게 Copy & Paste하여 사용하는게 중요합니다. (시간은 가장 중요한 자원입니다.) 아래 예제는 저 Directory(Github으로 관리합니다.)인데 Kube Object + OpenSource Tool 종류별로 약 70개 정도 되는 것 같습니다.

  • 파일 이름은 {이름}-{object}.yml 순으로 하시면 조회가 편리합니다. 예시 busybox-deploy.yml, loadbalancer-svc.yml

이상 간단히 YAML 파일에 대하여 알아 보았습니다. 

 

Kubernetes 컨설팅, 구축, 기술 지원 문의 : leejunghoon@spkr.co.kr 

반응형