YAML 입문
YAML (YAML Ain't Markup Language)
YAML은 가독성이 뛰어난 데이터 직렬화 언어로 설정 파일을 기술할 때 많이 사용된다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latestapiVersion은 키이고, v1은 값이다.
pyhon 실습
import yaml ## 라이브러리 임포트
f = open("nginx-pod.yaml", "r+") ## 파일 열기
data = yaml.load(f) ## YAML 파일 읽어서 변수 data에 적재
print(data["apiVersion"])
print(data["Kind"])
print(data["metadata"]$ python ./yaml-reader.py
v1
Pod
{'name': 'nginx'}키와 값이 출력 되고 metadata의 경우 밑에 name 이 있다는 계층 구조를 표현한 것이다.
name 앞에 하이픈은 containers가 배열임을 의미하여 하이픈으로 시작하는 줄은 배열의 한 요소가 시작됨을 의미한다.
이어지는 하이픈이 없는 줄들은 하이픈이 있는 줄과 같은 요소에 포함된다.
containers:
- dog
- cat
- bird위 YAML을 읽으면 dog, cat, bird는 각각 containers라는 배열의 한 요소가 된다.
{'containers': ['dog', 'cat', 'bird']}>>> print data['containers'][2]
bird배열의 특정 요소에 접근하기 위해서 위와 같이 몇 번째 요소인지를 지정한다.
이에 반해 하이픈이 없는 경우에는 이전 요소에 포함된다.
containers:
- dog
cat
- bird앞의 예에서는 dog와 cat이 배열의 0번째 요소에 포함된다.
{'containers': ['dog cat', 'bird']}따라서 매니페스트에서 키 name과 image는 같은 배열의 요소다.
containers:
- name: nginx
image: nginx:latest>>> print data['spec']['containers'][0]
{'image': 'nginx:latest', 'name:'nginx'}위의 경우 containers 배열의 인덱스 0에 접근하면 위와 같이 2개의 키값 쌍이 출력된다.
하나의 파드에 2개 이상의 컨테이너를 배치하는 사이드카 패턴의 매니페스트에는 containers에 여러 개의 컨테이너를 정의한다.
spec:
containers:
- name: nginx ## 메인 컨테이너
image: nginx:latest
- name: color ## 사이드카 컨테이너
image: maho/c-cloner:0.1>>> print data["spec"]["containers"]
[{'image': 'nginx:latest', 'name': 'nginx'}, {'image': 'mahe/c-cloner:1.0', 'name': 'cloner'}]>>> import json
>>> print(json.dumps( data["spec"]["containers"], sort_keys=False, indent=4))
[
{
"image": "nginx:latest",
"name": "nginx"
},
{
"image": "mahe/c-cloner:1.0",
"name": "cloner"
}
]들여쓰기를 하면 위와 같다. 배열을 의미하는 [ ] 안에 {}가 2개 있음을 알 수 있다.
매니페스트 YAML 작성 포인트
1. 콜론( : )의 왼쪽은 키, 오른쪽은 값
"apiVersion: v1"에서 apiVersion이 키, v1이 값
"containers"의 경우 containers가 키고 그 밑에 이어지는 내용들이 값이 된다.
2. 들여쓰기로 복합적 데이터 구조를 표현한다.
키 metadata 밑에 name의 키와 값을 기술한다.
키 spec 밑에 containers, volumes 등의 키와 값을 기재한다.
3. 하이픈으로 시작하는 줄은 배열의 요소가 된다. 이어서 하이픈이 없는 줄은 윗 줄과 같은 배열의 요소로 취급된다.
YAML 의 구조
containers:
- name: nginx ## 첫 번째 요소 (메인 컨테이너)
image: nginx:latest
- name: color ## 두 번째 요소 (사이드카 컨테이너)
image: maho/c-cloner:0.1Last updated