본문 바로가기
[Kubernetes]

[k8s] YAML 기본 문법 및 k8s yaml 작성방법

by METAVERSE STORY 2022. 11. 23.
반응형

 

YAML 문법이란 무엇인가?

 

YAML XML, C, 파이썬, , RFC2822에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식이다. 2001년에 클라크 에반스가 고안했고, Ingy dot Net 및 Oren Ben-Kiki와 함께 디자인했다.

YAML이라는 이름은 "YAML은 마크업 언어가 아니다 (YAML Ain't Markup Language)” 라는 재귀적인 이름에서 유래되었다. 원래 YAML의 뜻은 “또 다른 마크업 언어 (Yet Another Markup Language)”였으나, YAML의 핵심은 문서 마크업이 아닌 데이터 중심에 있다는 것을 보여주기 위해 이름을 바꾸었다. 오늘날 XML과 JSON이 데이터 직렬화에 주로 쓰이기 시작하면서, 많은 사람들이 YAML을 '가벼운 마크업 언어'로 사용하려 하고 있다.

 

기본 문법

 

1. 들여쓰기

 

person:
  name: cloud	
  job: sysadmin
  skills: 
    - docker
    - k8s

들여쓰기는 기본적으로 2칸 또는 4칸을 지원한다.

2칸 들여쓰기를 추천한다. 

 

2. Data 정의

 

apiVersion: v1
kind: Pod
metadata:
  name: echo
  labels:
    type: app

데이터는 key: value 형식으로 정의한다. 

k8s 경우 kind에 Pod, Services, namespace 등 다양한 value가 들어갈 수 있다. 

 

3. 배열 정의

 

person:
  name: cloud	
  job: sysadmin
  skills: 
    - docker
    - k8s

배열은 -로 표기한다. 

 

 

4. 주석

 

# comment
person:
  name: cloud	
  job: sysadmin
  skills: 
    - docker
    - k8s

주석은 #로 표시한다.

 

 

5. 참/거짓, 숫자 표현

study_hard: yes
give_up: no
hello: True
world: TRUE
manual: false

참, 거짓은 true/false,  yes/no를 지원한다. 

 

# number
version: 1.2

# string
version: "1.2"

따옴표 없이 사용하면 number, 따옴표를 사용하면 string이다.

 

 

6. 줄 바꿈

comment_line_break: |
  Hello my name is wook.
  Im developer.


comment_single_line: >
  Hello world
  my first yml syntax.

|는 줄바꿈을 포함하고 , >는 줄바꿈을 무시한다.

 

 7.  띄어쓰기

# error (not key-value, string)
key:value

# ok
key: value

key value 사이에는 반드시 빈칸이 필요하다.

 

8. 문자열 따옴표

# error
windows_drive: c:

# ok
windows_drive: "c:"
windows_drive: 'c:'

대부분의 문자열을 따옴표 없이 사용할 수 있지만 :가 들어가는 경우 반드시 따옴표가 필요하다. 

 

 

 

 

k8s yaml 작성 방법

 

apiVersion: v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.20.2

위 Yaml 파일을 보면 Deployment에 대한 yaml 파일임을 알 수 있다. 이를 하나씩 분석 해 보자.

 

1. apiVersion

이 오브젝트를 생성하기 위해 사용할 쿠버네티스 API 버전을 명시한다. 특정 k8s object를 사용하기 위해 어떤 API를 사용해야 하는지 공식문서에 나와있다. 

 

Kind apiVersion
CertificateSigningRequest certificates.k8s.io/v1beta1
ClusterRoleBinding rbac.authorization.k8s.io/v1
ClusterRole rbac.authorization.k8s.io/v1
ComponentStatus v1
ConfigMap v1
ControllerRevision apps/v1
CronJob batch/v1beta1
DaemonSet extensions/v1beta1
Deployment extensions/v1beta1
Endpoints v1
Event v1
HorizontalPodAutoscaler autoscaling/v1
Ingress extensions/v1beta1
Job batch/v1
LimitRange v1
Namespace v1
NetworkPolicy extensions/v1beta1
Node v1
PersistentVolumeClaim v1
PersistentVolume v1
PodDisruptionBudget policy/v1beta1
Pod v1
PodSecurityPolicy extensions/v1beta1
PodTemplate v1
ReplicaSet extensions/v1beta1
ReplicationController v1
ResourceQuota v1
RoleBinding rbac.authorization.k8s.io/v1
Role rbac.authorization.k8s.io/v1
Secret v1
ServiceAccount v1
Service v1
StatefulSet apps/v1

 

 

2. kind

어떤 종류의 오브젝트를 생성하고자 하는지. 생성할 k8s object 타입을 지정한다 (ex: Service, Pod, Deployment...)

 

3. metadata

오브젝트에 이름을 부여하는 것이다. 오브젝트를 유일하게 구분지어 줄 데이터이다. 

  • name: 동일한 namespace 상에서 유일한 값
  • labels: 특정 k8s object만 나열하거나 검색할 때 유용하게 쓰이는 key-value 쌍
  • spec: 생성할 오브젝트의 구체적인 내용을 정의하는 spec. spec에 대한 포맷은 object 종류마다 다르다.  
              자주 사용되는 spec 항목들을 살펴보자
    • contianers: pod에는 1개 이상의 container 포함 가능, containers에서 원하는 만큼 container 정의해서 추가 가능
    • image: pull 받을 Docker 이미지 주소
    • replicas: 원하는 pod의 개수
    • selector: controller가 어떤 pod를 감시해야하는지
    • template: 새 pod를 런칭하는데 사용하는 템플릿selectors의 값이 template의 labels과 일치해야 관리되는 pod를 
                      제대로 선택

 

4. 자주 사용되는 Object

  • Deployment
    • 코드배포를 세밀하게 제어할 수 있는 오브젝트. pod 복제, 배포 일시중지, 재개 및 롤백 가능 
  • Service
    • k8s에 다양한 어플리케이션을 올리고 어플리케이션간 통신이 필요한 경우 Service로 오픈하여 외부에 오픈 및 다른 어플리케이션과 통신에 활용
  • Ingress
    • 클러스터 내 서비스에 대한 외부 접근을 관리하는 오브젝트, 일반적으로 HTTP를 관리
  • Job
    • 배치 오브젝트, 주기적으로 스케쥴링 된 태스크를 수행할 때 사용

 

 

 

출처

YAML 문법 | 쿠버네티스 안내서 (subicura.com)

 

YAML 문법

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

subicura.com

[k8s] kubernetes resource template - yaml 파일 작성법 · MOONGCHI (berrrrr.github.io)

 

[k8s] kubernetes resource template - yaml 파일 작성법

우리가 k8s 환경에 배포할때 작성하는 kubernetes resource 템플릿파일.yaml 을 작성하는 방법에 대해 알아보자.

berrrrr.github.io

 

반응형

댓글