들어가며:
YAML 이란?
YAML 요소
YAML 문법
YAML을 이용한 쿠버네티스 오브젝트
- kind에 따른 apiVersion 확인 법
끝마치며: 참고
- 오브젝트 리소스 문서 확인 명령
- vim 에디터에서 YAML 파일 작성 시 인덴트, 하이라이팅, 들여쓰기 등 기능을 추가하여 효율적으로 작성하는 법
- nano 에디터에서 YAML 파일 작성 시 효율적으로 작성하는 법
들어가며:
k8s 오브젝트는 k8s 시스템에서 정보를 담고 있는 개체입니다. 이런 오브젝트는 YAML 문법으로 정의됩니다.
YAML 이란?
YAML은 XML, C, Python, Perl, RFC2822 에서 정의된 개념을 기반으로 만들어진 사람이 읽고 쓰기 쉽게 데이터를 정의하는 양식입니다. 2001년 클라크 에반스에 의해 고안됐습니다.
YAML 이라는 이름은 YAML ain't Markup Language 라는 뜻을 가지고 있습니다. 과거에는 Another Markup Language 의 의미였으나, YAML의 핵심은 문서 마크업이 아닌 데이터 중심에 있다는 것을 보여주기 위해 이름을 바꾸었습니다.
YAML 요소
YAML은 모든 데이터를 스칼라, 리스트, 해시로 데이터를 표현합니다.
- 스칼라/스트링
banana
"banana"
'banana'
I am a boy
스칼라는 단순 간단한 문자 또는 문자열입니다. 보통 아무 표시를 하지 않아도 됩니다. 쌍/홀 따음표로 둘러쌓아 사용해도 동일합니다.
- 리스트/어레이
- Seoul
- Tokyo
- Osaka
하이픈으로 시작해야 하며 한 줄에 하나의 요소를 표현합니다.
- 해시/딕셔너리
name: Jaden Park
age: 26
- 해시의 리스트
- name: Jaden Park
age: 26
- name: Mary Sarah
age: 26
- 리스트의 해시
man:
- Jaden Park
- John Jones
woman:
- Mary Sarah
- Sunny Susan
YAML 문법
YAML의 문자열은 UTF-8, UTF-16의 유니코드 문자 집합을 사용합니다.
공백 문자를 이용하여 들여 쓰기로 계층구조를 구분합니다. 이때 탭은 절때 사용하지 않도록 합니다.
시작은 하이픈3개 (---), 끝은 마침표 3개(...) 로 사용합니다. 하이픈 3개는 시작할 때 삽입하는 것이 일반적입니다.
카멜표기법을 따르는 경우가 많습니다.
YAML을 이용한 쿠버네티스 오브젝트
쿠버네티스는 클러스터의 상태를 나타내기 위해 오브젝트 개체를 정의하여 사용합니다. 쿠버네티스에서 오브젝트를 생성할 때, 오브젝트에 대한 기본적인 정보와 함께 의도한 상태를 기술한 오브젝트 스펙(spec)을 제시합니다. 오브젝트를 생성하기 위해 우리는 YAML 혹은 JSON을 사용하며 일반적으로 YAML이 편리해 많이 사용합니다.
다음은 파드 오브젝트를 기술한 간단한 YAML 파일 예제 입니다.
apiVersion: v1
kind: Pod
metadata:
name: myweb-pod
labels:
app: myweb
type: frontend
spec:
containers:
- name: nginx-container
image: nginx
모든 오브젝트 정의 시 필수적으로 요구되는 필드
- apiVersion: 오브젝트를 생성하기 위한 API 버전.
- 오브젝트 API 버전은 kind 의 종류에 따라 다릅니다.
- kind: 오브젝트의 종류
- 예: pod, services, replicaset ...
- metadata: name, UID, namespace 등을 포함하는 기본적인 정보
- spec: 오브젝트의 상태 정의
- spec 내의 정의할 요소는 정의하고자 하는 오브젝트의 종류에 따라 다릅니다.
kind 에 따른 apiVersion 확인하는 법
쿠버네티스 api 규칙
쿠버네티스의 모든 구성요소는 API 서버를 통해 API로 메시지를 주고 받습니다. 쿠버네티스는 리소스에 대한 표현을 쉽게 하기 위해 /api/v1 또는 /apis/extensions/v1beta1 과 같이 각각 다른 API 경로에서 복수의 API 버전을 지원합니다.
같은 종류의 리소스라고 하더라도 API 버전이 다른 경우는 안전성이나 기술 지원의 수준이 다르다는 것을 암시합니다.
// 클러스터에서 지원되는 API 버전 확인
kubectl api-versions
//클러스터에서 지원되는 API 리소스 확인
kubectl api-resources
주로 사용하는 리소스 분류
리소스 | 그룹 | api |
---|---|---|
configmaps | core | v1 |
endpoints | core | v1 |
limitranges | core | v1 |
namespaces | core | v1 |
nodes | core | v1 |
persistentvolumeclaims | core | v1 |
persistentvolumes | core | v1 |
pods | core | v1 |
replicationcontrollers | core | v1 |
resourcequotas | core | v1 |
secrets | core | v1 |
serviceaccounts | core | v1 |
services | core | v1 |
daemonsets | apps | apps/v1 |
deployments | apps | apps/v1 |
replicasets | apps | apps/v1 |
statefulsets | apps | apps/v1 |
horizontalpodautoscalers | autoscaling | autoscaling/v1 autoscaling/v2beta1 autoscaling/v2beta2 |
cronjobs | batch | batch/v1beta1 batch/v1 |
jobs | batch | batch/v1beta1 batch/v1 |
certificatesigningrequests | certificates.k8s.io | certificates.k8s.io/v1 certificates.k8s.io/v1beta1 |
ingresses | extensions | extensions/v1beta1 |
clusterrolebindings | rbac.authorization.k8s.io | rbac.authorization.k8s.io/v1beta1 rbac.authorization.k8s.io/v1 |
clusterroles | rbac.authorization.k8s.io | rbac.authorization.k8s.io/v1beta1 rbac.authorization.k8s.io/v1 |
rolebindings | rbac.authorization.k8s.io | rbac.authorization.k8s.io/v1beta1 rbac.authorization.k8s.io/v1 |
roles | rbac.authorization.k8s.io | rbac.authorization.k8s.io/v1beta1 rbac.authorization.k8s.io/v1 |
storageclasses | storage.k8s.io | storage.k8s.io/v1 storage.k8s.io/v1beta1 |
끝마치며: 참고
오브젝트 리소스 문서 확인 명령
익숙하지 않을 때는 아래와 같이 찾아보며 작성하는 것을 권장합니다.
kubectl explain <resource>
kubectl explain pod
kubectl explain pod.spec
kubectl explain pod.spec.containers
kubectl explain pod.spec.containers.name
kubectl explain pod.spec --recursive
vim 에디터에서 YAML 파일 작성 시 인덴트, 하이라이팅, 들여쓰기 등 기능을 추가하여 효율적으로 작성하는 법
~/.vimrc 파일에 아래와 같이 작성하면 됩니다.
syntax on
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab autoindent
nano 에디터에서 YAML 파일 작성 시 효율적으로 작성하는 법
위 경로에 아래와 같은 문서를 입력해주면 됩니다.
sudo cat /usr/share/nano/yaml.nanorc
# Supports `YAML` files
syntax "YAML" "\.ya?ml$"
header "^(---|===)" "%YAML"
## Keys
color magenta "^\s*[\$A-Za-z0-9_-]+\:"
color brightmagenta "^\s*@[\$A-Za-z0-9_-]+\:"
## Values
color white ":\s.+$"
## Booleans
icolor brightcyan " (y|yes|n|no|true|false|on|off)$"
## Numbers
color brightred " [[:digit:]]+(\.[[:digit:]]+)?"
## Arrays
color red "\[" "\]" ":\s+[|>]" "^\s*- "
## Reserved
color green "(^| )!!(binary|bool|float|int|map|null|omap|seq|set|str) "
## Comments
color brightwhite "#.*$"
## Errors
color ,red ":\w.+$"
color ,red ":'.+$"
color ,red ":".+$"
color ,red "\s+$"
## Non closed quote
color ,red "['\"][^['\"]]*$"
## Closed quotes
color yellow "['\"].*['\"]"
## Equal sign
color brightgreen ":( |$)"
'Kubernetes > 03. k8s 오브젝트 기본 및 관리' 카테고리의 다른 글
[쿠버네티스] k8s 오브젝트의 일반적인 구성 종류 (0) | 2021.06.16 |
---|---|
[쿠버네티스] 명령형 커맨드를 사용한 애플리케이션 실행 (0) | 2021.06.16 |
[쿠버네티스] 오브젝트 관리 방법 (명령형 커맨드, 명령형 오브젝트 구성, 선언형 오브젝트 구성) (0) | 2021.06.16 |