Devops/Kubernetes

[Kubernetes] YAML 파일로 컨테이너 배포하기

keyhong-DE 2023. 11. 12. 15:25

YAML 기반 구성 파일

쿠버네티스는 YAML 파일을 pod, 복제본, 배포, 서비스 등의 개체 생성을 위한 입력으로 사용한다.

YAML 기반 구성 파일 작성하기 

쿠버네티스 정의 파일은 항상 4개의 상위 레벨(root 레벨) 필드(속성)를 필수적으로 포함한다.

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
      app: myapp
      type: front-end
spec:
   containers:
     - name: nginx-container
       image: nginx

apiVersion

개체를 생성할 때 사용하는 쿠버네티스 API 버전. 만들려는 게 무엇이냐에 따라 올바른 API 버전을 사용해야 한다.

Kind Version
POD v1
Service v1
ReplicaSet apps/v1
Deployment apps/v1

kind

만들려는 개체 유형

metadata

이름이나 라벨과 같은 개체에 대한 데이터. 앞서 apiVersion이나 kind가 String 값으로 명시된 것과 달리 metadata는 Dictionary 형태로 정의하기 때문에 metadata 하위의 모든 것은 의도된 것이며 이름과 라벨은 metadata의 하위 집합체이다. 따라서 sibling (형제, 이름과 라벨의 level)은 부모(meta) 데이터의 공백보다는 많아야 하며, 두 slibing 개체 앞의 공백(" ")의 개수가 같아야 한다. 

 

나중에 수 백개의 프런트엔드와 백엔드 애플리케이션이 생기면 type으로 필터링이 가능하다.

# 잘못된 parent-child level
metadata:
name: myapp-pod
labels:
    app: myapp
        
# 잘못된 sibling level
metadata:
  name: myapp-pod
    labels:
        app: myapp
        
# 올바른 level
metadata:
  name: myapp-pod
  labels:
      app: myapp

Spec

생성하려는 개체에 따라 추가 정보를 제공하는 곳. container라는 List/Array 프로퍼티를 추가하여 여러 컨테이너를 넣을 수 있다. 그 하위에 dash(-)를 사용하여 컨테이너 List의 첫번째 항목부터 name과 image를 넣을 수 있다. 

YAML 기반 구성 파일 시작하기

pod 시작하기

kubectl create -f pod-definition.yml

전체 pod 목록 보기

kubectl get pods

kubectl get pods

"-o wide" 옵션을 주면 pod가 설치된 node도 확인 할 수 있다. 

kubectl get pods -o wide

특정 pod 세부 정보 보기

kubectl describe pod myapp-pod

kubectl describe pod <pod name>