본문 바로가기
K8s/Core Concept

[K8s] YAML 이란?

by okms1017 2024. 11. 12.
728x90

✍ Posted by Immersive Builder  Seong

 

YAML(YAML Ain't Markup Language)

YAML은 주로 설정 파일을 작성하거나 데이터를 직렬화하기 위해 사용하는 데이터 포맷입니다. 사람이 읽기 쉽고 구조가 단순하여 JSON 또는 XML과 같은 데이터 포맷을 대신하여 많이 사용합니다. 특히, 쿠버네티스 환경에서 운영 관리를 위해 기본으로 사용하는 데이터 포맷이기도 합니다. 

 

YAML 주요 특징

  • 가독성 : 들여쓰기와 간단한 구문으로 구성되어 사람이 읽기 쉽습니다.  
  • 데이터 구조 : 스칼라(scalar), 리스트(list), 딕셔너리(dictionary) 등의 데이터 구조를 지원하여 복잡한 데이터를 쉽게 표현합니다. 
  • 설정 파일 : 쿠버네티스, 앤서블, 도커 등 여러 환경에서 설정 파일의 기본 포맷으로 사용합니다. 확장자는 일반적으로 .yaml 또는 .yml 을 사용합니다. 
  • 데이터 포맷 변경 : YAML과 JSON 간에는 포맷 변경이 가능합니다. (YAML ↔ JSON)

 

YAML 기본 문법

Key-Value

YAML의 데이터는 키-값 쌍으로 Key: Value 형식으로 작성합니다. 키와 값은 콜론(:)으로 구분하며, 콜론 뒤에 반드시 공백이 있어야 합니다. 

 

   
        apiVersion: v1
        kind: Pod
 

 

들여쓰기

YAML 파일은 계층적 구조를 가지며 들여쓰기를 통해 계층을 표현합니다. 보통 공백 2칸 또는 탭(Tab)으로 들여쓰기를 작성합니다. 아래의 예시에서 name과 namespace는 metadata의 하위 계층이 됩니다. 

 


        metadata:
          name: busybox
          namespace: default
 

 

리스트

리스트는 동일한 유형의 데이터들을 순서대로 배열한 자료형입니다. 리스트의 항목은 - (dash) 기호로 구분되며 동일한 공백 수를 가지고 정렬됩니다. 아래는 컨테이너 기동 시 순차적으로 실행되는 명령어가 배열 형식으로 작성된 예시입니다. 

 

 
       containers
          command:
            - "/bin/sh"
            - "-c"
            - "sleep inf"
 

 

딕셔너리

딕셔너리는 서로 다른 속성들을 그룹화하여 하나의 객체로 나타낸 자료형입니다. 각 속성들은 앞에 동일한 공백 수를 가지고 정렬됩니다. 속성 간에는 순서가 없으며, 동일한 키-값을 가지는 속성이라면 위치와 관계 없이 동일한 객체로 인식됩니다. 또한 리스트와 조합하여 리스트 내 딕셔너리, 딕셔너리 내 딕셔너리 등으로 사용할 수 있습니다. 아래의 예시는 리스트 내 딕셔너리를 표현한 것입니다. toleration 리스트에 2개의 항목이 존재하고 각 항목은 딕셔너리 자료형으로 구성되어 있습니다. 

 

 
      tolerations:
        - effect: NoExecute
          key: node.kubernetes.io/not-ready
          operator: Exists
          tolerationSeconds: 300
        - effect: NoExecute
          key: node.kubernetes.io/unreachable
          operator: Exists
          tolerationSeconds: 300
 

 

주석

주석은 문장 앞에 # 기호를 붙여 표현합니다. 주석 처리된 문장은 설정에 영향을 주지 않습니다. 

 


        # 서비스 배포 예제입니다
        apiVersion: v1
        kind: Service
        metadata:
          name: svc-v1
        spec:
          ports:
            - name: web-port
              port: 9001
              targetPort: 8080
          selector:
            app: svc-v1
 

 

다중 설정 파일

하나의 YAML 파일 내에 다수의 설정 파일을 작성할 수 있습니다. 각 설정 파일은 --- 표시로 구분합니다.

아래 예시는 특정 어플리케이션 배포를 위해 필요한 쿠버네티스 객체들을 담고 있는 YAML 파일입니다.   

 


        apiVersion: networking.k8s.io/v1
        kind: Ingress
        metadata:
          name: ingress-canary-v1
        spec: #이하 생략
        ---
        apiVersion: v1
        kind: Service
        metadata:
          name: svc-v1
        spec: # 이하 생략
        ---
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: dp-v1
        spec: # 이하 생략
 

 

 

728x90

'K8s > Core Concept' 카테고리의 다른 글

[K8s] Readiness Probes 란?  (0) 2024.11.23
[K8s] 소프트웨어 배포 전략(Software Deployment Strategies)  (0) 2024.11.19
[K8s] CoreDNS 란?  (0) 2024.11.16
[K8s] Helm 이란?  (1) 2024.11.14
[K8s] JSON Path  (0) 2024.11.13