호돌찌의 AI 연구소
article thumbnail

 

1. Intro

YAML(야밀)은 데이터 직렬화(서비스 간에 Data를 전송할 때 쓰이는 포맷으로 변환하는 작업)에 쓰이는 어떠한 포맷 또는 양식 중 하나를 일컫는 말입니다. XML, JSON과 비슷한 포맷의 형태라고 생각하시면 됩니다.

보통 쿠버네티스 마스터에게 요청을 보낼 때, 쿠버네티스 manifests, docker compose, ansible playbook, github action workflow 명세에 사용됩니다.

 

2. 특징

가독성이 뛰어납니다. 사람이 읽기 쉽도록 디자인이 되어 있는 것이 YAML입니다. JSON도 나름 읽기 편한데, YAML은 더 읽기 편하다고 볼 수 있습니다. 줄 바꿈과 들여쓰기(Tab, Space)에 조금 strict 한 편인 것도 유의하시면 될 것 같습니다. 

- YAML 포맷


apiVersion: v1
kind: Pod
metadata:
  name: example
spec:
  containers:
    - name: busybox
      image: busybox:1.25

- JSON 포맷

{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {
    "name": "example"
  },
  "spec": {
    "containers": [
      {
        "name": "busybox",
        "image": "busybox:1.25"
      }
    ]
  }
}

 

 

 

 

 

 

 

 

 

3. 문법

1) Key Value 형태로 작성합니다. Key 다음에 Key-Value 형태 자체가 Value로 들어갈 수 있는 Recursive 한 성격도 가지고 있습니다. 

apiVersion: v1
kind: Pod
metadata:
  name: example
spec:
  containers:
    - name: busybox
      image: busybox:1.25

 

2) # 을 이용하여 주석을 다시면 됩니다.

 

3) 자료형

- 문자형은 그냥 작성하고, 따옴표로 감싸도 됩니다. 하지만 숫자를 문자열로 감싸고 싶을 때에는 "를 이용하여야하고 yes, y, true 등의 예약어와 겹치거나 특수 문자에 대해서는 "를 사용하여야 합니다.

- 정수형, float, boolean은 다른 프로그래밍 언어와 같습니다. 

 

4) List

- 를 이용하여 List를 명시하거나 python처럼 대괄호를 이용하여 입력해도 됩니다. 

# 리스트 사용 예 1
examples:
  - ex_one: 1
  - ex_two: 2

# 리스트 사용 예 2
examples: ["1", "2", "3"]

# list 의 원소는 어떤 자료형이든 가능하다!
spec:
  containers:
    - name: busybox
      image: busybox:1.25
    - name: ubuntu
      image: ubuntu
      commands:
        - sleep
        - 3600
    - name: python
      image: python:3.9

 

5) 여러 YAML을 하나의 YAML로!

--- 구분선을 통해 하나의 yaml 파일에 여러 개의 yaml document 작성이 가능합니다. 아래는 3개의 yaml document로 인식합니다. 

apiVersion: v1
kind: Pod
metadata:
  name: one
---
apiVersion: v1
kind: Service
metadata:
  name: two
---
apiVersion: v1
kind: Deployment
metadata:
  name: three

 

6) 예시

pod의 명세를 작성한 yaml의 예시는 아래처럼 작성할 수 있습니다. 

# key-value pairs
apiVersion: v1
kind: Pod
metadata:
  name: example
  labels:
    hello: bye
spec:
  containers:
    # list
    - name: busybox
      image: busybox:1.25
      # list
      ports:
      - containerPort: 80
    - name: another-container
      image: curlimages/curl

 

7) 정리

이렇게 배운 것을 바탕으로 쿠버네티스에서, 어떤 pod 또는 리소스를 생성하고 싶을 때에는 이러한 형태로 desired state를 yaml or json 파일로 작성합니다. 그 이후 큐브 api 서버에게 해당 yaml 파일을 담아 선언형 인터페이스로 요청이 가능합니다. minikube(1.25.1), kubectl이 설치를 본인 환경에서 해주시길 바랍니다. 

 

이제부터 쿠버네티스의 대표적인 리소스들(POD, Deployment, Service, PVC)에 대해 다룰 예정입니다. 다음 글은 POD 관련 글로 찾아뵙겠습니다. 

 

 


https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

 


profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!