본문 바로가기

⭐ Kubernetes & EKS/k8s (쿠버네티스)

쿠버네티스 YAML configuration 파일 설명 및 YAML 문법 검사 사이트

728x90
반응형

# 쿠버네티스의 YAML 설정 파일에 대해서 알아보자.

- Deployment란?
디플로이먼트는 간단하게 말해서 pod + 리플리카 셋 입니다.
리플리카 셋은 파드의 수를 수시로 체크하고 상태를 유지해주는 오브젝트 입니다.
디플로이 먼트를 생성할때는 기본적으로 create, apply를 사용합니다.

- Configuration 파일의 3가지 구성요소?

1. metadata : 리소스의 라벨, 이름 등을 지정함
2. specificaion : 각 컴포넌트에 대한 상세 설명 및 어떤 오브젝트 종류인지에 내용을 설명
3. status : 쿠버네티스가 자동으로 생성, 자신의 원하는 상태가 되도록 현재 상태를 나타냄

- 예를 들어 spec에 replicas가 2라고 명시되어 있지만 현재 상태는 status에는 1개로 명시 되어 있다면, 목표 상태로 맞추기 위해 replicas를 하나 더 생성하게 된다.

- apiVersion은 스크립트를 실행하기 위한 쿠버네티스 API 버전을 명시하고 Kind는 리소스의 종류를 명시한다. (POD, Service, ReplicaSet, Deployment)

[ Labels & Selectors ]
Labels : Pod와 같은 오브젝트에 첨부된 키와 값의 쌍이다. 오브젝트의 특성을 식별하는데 있어 사용자에게 중요하지만, 시스템에 직접적인 의미는 없다.
Selectors : Label을 기반으로 오브젝트를 어떻게 선택하는지에 대한 방법의 표현이다.

- 예를 들어 하나의 오브젝트에 Key-Value로 Label을 지정하고, Selector로 env: dev인걸 선택하면, env가 dev인 것들만 나오게 된다는 뜻이다. 

- 예제를 통해서 자세히 알아보자.

예제1) nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata: # 3가지 필수 구성요소중 하나
  name: nginx-deployment # 해당 이름으로 디플로이 먼트가 생성됨.
  labels:
    app: nginx
spec: # 3가지 필수 구성요서중 하나 specification, 나머지 하나는 status
  replicas: 3 # 3개의 리플리카 pod를 생성한다.
  selector: # 디플로이먼트가 관리할 파드를 찾는 방법을 정의, matchLabels이 nginx인 파드를 디플로이먼트가 관리한다.
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx # 파드는 .metadata.labels 필드를 사용 app: nginx 라는 레이블을 붙인다.
    spec:
      containers:
      - name: nginx # 컨테이너 1개를 생성, .spec.template.spec.containers[0].name 필드를 사용해서 nginx 라는 이름을 붙인다.
        image: nginx:1.14.2 # 파드가 도커 허브의 nginx 1.14.2 버전 이미지를 실행하는 nginx 컨테이너 1개를 실행하는 것을 나타낸다.
        ports:
        - containerPort: 80
  • .metadata.name 필드에 따라 nginx-deployment 이름으로 디플로이먼트가 생성된다.
  • .spec.replicas 필드에 따라 디플로이먼트는 3개의 레플리카 파드를 생성한다.
  • .spec.selector 필드는 디플로이먼트가 관리할 파드를 찾는 방법을 정의한다. 이 사례에서는 파드 템플릿에 정의된 레이블(app: nginx)을 선택한다. 그러나 파드 템플릿 자체의 규칙이 만족되는 한, 보다 정교한 선택 규칙의 적용이 가능하다.
  • template 필드에는 다음 하위 필드가 포함되어있다.
    • 파드는 .metadata.labels 필드를 사용해서 app: nginx 라는 레이블을 붙인다.
    • 파드 템플릿의 사양 또는 .template.spec 필드는 파드가 도커 허브의 nginx 1.14.2 버전 이미지를 실행하는 nginx 컨테이너 1개를 실행하는 것을 나타낸다.
    • 컨테이너 1개를 생성하고, .spec.template.spec.containers[0].name 필드를 사용해서 nginx 이름을 붙인다.
    • 추가로 .metadata.labels의 app은 향후 어느 리소스가 이 app 값을 디플로이먼트를 참고하려할때 필요한 값을 지정해주기 위한 것이고, .spec.selector.matchLabels의 app은 .spec.template.metadata.labels의 app을 참조하는 것이다.
      .spec.template.metadata.labels의 app을 지정해줌으로써 .selector.matchLabels에서 리소스를 찾을 수 있다.

- 아래 명령을 이용하여 yaml 파일로 명시한 방법으로 디플로이먼트를 생성한다.

kubectl apply -f nginx-deployment.yaml

예제2) tomcat-deployment.yaml

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: tomcat-deployment
spec:
  selector:
    matchLabels:
      app: tomcat
  replicas: 4
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:9.0
        ports:
        - containerPort: 8080
      nodeSelector: # nodeSelector는 이미지를 가져다가 설치할 때 노드의 SSD에 설치하라고 지정하는 selector이다.
        storageType: ssd

nginx 예제와 비슷하지만 nodeSelector는 이미지를 가져다가 설치할 때 노드의 SSD에 설치하라고 지정하는 selector이다.

마찬가지로 아래 명령을 이용하여 yaml 파일로 명시한 시방서로 디플로이먼트를 생성한다.

kubectl apply -f tomcat-deployment.yaml

- YAML 문법이 맞는지 검사하는 사이트

onlineyamltools.com/validate-yaml

 

Validate YAML - Online YAML Tools

Free, quick and easy online utility that validates YAML syntax right in your browser. There are no ads or downloads. Simply enter YAML and it will be checked for errors. Created by developers for developers.

onlineyamltools.com

- 끝 -

728x90
반응형