YAML Breakdown
쿠버네티스를 위한 YAML 해부
쿠비쿠바 연구회용으로 작성
1. YAML (야믈) 이란?
- YAML Ain’t Markup Language :
YAML은 마크 업 언어가 아닙니다.
- Yet Another Markup Language : 또 다른 마크 업 언어 (처음에는..)
- 특징
- Data Serialization Language
- 사람이 읽기 편함
- 애자일 랭귀지와 많이 쓰임 : 파이썬, 펄, 루비 등
- 데이터 타입 : 맵핑, 시퀀스, 스칼라
- 보통 설정 파일, 데이터 저장 용도로 많이 사용됨
- Kubernetes 오브젝트는 주로 .yaml 포맷을 사용해 표현됨
- JSON과 호환
2. 문법
확장자는 yaml 또는 yml을 사용합니다.
2-1. 블록 스타일
많이 사용되는 스타일로서, 가장 친숙한 형태입니다.
host: kor-2018 # key-value mapping. :뒤에 화이트 스페이스가 꼭 붙어야함
datacenter:
location: Seoul # Collection : 두개의 스페이스로 들여쓰기, 탭은 인식못함
cabinet: 13
roles:
- webserver # List : -를 사용
- database
2-2. 플로우 (Flow) 스타일
- JSON의 확장
- 긴줄을 합침
- 사람이 읽기 쉽지는 않음
host: "kor-2018"
datacenter: { location: Seoul, cabinet: 13 }
roles: [ webserver , database ]
3. 자료형
3-1. 맵핑
key-value로 위에서 설명
3-2. 시퀀스
배열 또는 리스트로 위에서 설명
3-3. 스칼라
3-3-1. 스트링 또는 숫자 표현
host: kor-2018
datacenter:
location: Seoul
cabinet: "13" # " 또는 '를 사용해, non-string 을 string 으로 변경가능
roles:
- webserver
- database
3-3-2. 멀티라인
를 사용 |
host: kor-2018
datacenter:
location: Seoul
cabinet: "13"
roles:
- webserver
- database
batchtime_sch: | # 여러 줄을 사용할 수 있다
2018-06-30 - calculate Q2
2018-12-31 - calculate Q4
대신 > 를 사용하면 뉴라인을 스페이스로 인식합니다. |
4. 구조 (Structure)
—를 사용하여 여러개의 문서를 하나의 파일에 작성 할 수 있습니다.
쿠버네티스 디플로이먼트
파일을 작성할 때 이렇게 많이 사용합니다.
# Korea Host 정보 <- # 를 이용해 주석사용
---
host: kor-2018
datacenter:
location: Seoul
cabinet: "13"
num: '1'
roles:
- webserver
- database
---
host: kor-2019
datacenter:
location: Seoul
cabinet: "13"
num: '2'
roles:
- webserver
- database
5. 태그
! 을 사용
- URI 셋팅
%TAG ! tag:hostdata:kor:
- 로컬 태그
%TAG ! tag:hostdata:kor:
---
host: kor-2018
datacenter:
location: !PHL Seoul # tag:hostdata:kor:PHL
cabinet: "13"
- 데이터형 셋팅
- seq - Sequence
- map - Map
- str - String
- int - Integer
- float - Floating-point decimal
- null - Null
- binary - Binary code
- omap - Ordered map
- set - Unordered set
cabinet: !!str 13
6. 앵커 (Anchors)
- 데이터 저장 및 재활용
- & 를 이용하여 저장
- * 를 이용하여 참조
# Korea Host 정보
---
host: kor-2018
datacenter:
location: &KOR Seoul # 저장 1
cabinet: !!str 13
num: !!str 1
roles: &host # 저장 2
- webserver
- database
---
host: kor-2019
datacenter:
location: *KOR # 참조 1
cabinet: "13"
num: '2'
roles: *host # 참조 2
7. 기타
비교 : YAML vs JSON vs XML
YAML
person:
firstname: Tom
lastname: Smith
year: 1982
favorites:
- tennis
- golf
JSON
{
"person": {
"firstname": "Tom",
"lastname": "Smith",
"year": 1982,
"favorites": ["tennis", "golf"]
}
}
XML
<person>
<firstname>Tom<firstname>
<lastname>Smith<lastname>
<year>1982<year>
<favorites>
<value>tennis</value>
<value>golf</value>
</favorites>
</person>