본문 바로가기

DevOps/쿠버네티스(Kubernetes)

스펙을 지정해 오브젝트 생성하기(.yaml)

kubectl create deployment 명령으로 디플로이먼트를 생성했지만 한개의 파드만 만들어졌다. 디플로이먼트를 생성하면서 한꺼번에 여러개의 파드를 만들 순 없을까? create 에서는 replicas 옵션을 사용할 수 없고, scale은 이미 만들어진 디플로이먼트에서만 사용할 수 있다. 이런 설정을 적용하려면 필요한 내용을 파일로 작성해야한다. 이때 작성하는 파일을 오브젝트 스펙이라고 한다. 오브젝트 스펙은 일반적으로 야믈 문법으로 작성한다.

3개의 nginx파드를 디플로이먼트 오브젝트로 만들어보자. 명령어로는 3개의 파드를 가진 디플로이먼트를 만들 수 없으므로 오브젝트 스펙을 작성해 디플로이먼트를 만든다.

 

 

 

스펙을 지정해 오브젝트 생성하기

# echo.yaml

apiVersion: apps/v1  # api버전
kind: Deployment     # 오브젝트 종류
metadata:
  name: echo-ldh
  labels:
    app: nginx
spec:
  replicas: 3        # 몇개의 파드를 생성할지 결정
  selector:          # 셀렉터의 레이블 지정
    matchLabels:
      app: nginx
  template:  
    metadata:
      labels:          # 템플릿의 레이블 지정
        app: nginx
    spec:              # 템플릿에서 사용할 컨테이너 이미지 지정
      containers:
      - name: echo-name
        image: sysnet4admin/echo-hname   # 사용되는 이미지

apiVersion은 오브젝트를 포함하는 API버전을 의미한다. 일반적으로 알파(alpha)와 베타(beta) 버전은 안정적이지 않다고 보지만, 그만큼 풍부한 기능을 갖고 있기도 합니다. 여기서 사용하는 apps/v1 은 여러 종류의 kind(오브젝트)를 가지고 있는데, 그중에서 Deployment를 선택해 레플리카셋을 생성한다. 레플리카셋은 몇개의 파드를 생성할지 replicas로 결정한다. 이미지는 sysnet4admin/echo-hname을 사용한다. 쿠버네티스는 API 버전마다 포함되는 오브젝트(kind)도 다르고 요구하는 내용도 다르다.

 

 

 

1. echo-ldh.yaml 파일을 이용해 디플로이먼트 생성

# deployment 생성
$ kubectl create -f echo-ldh.yaml

# 생성 된 파드 확인
$ kubectl get pods

현재 디플로이먼트는 파드 3개를 생성하도록 replicas에 정의되어 있다. -f 는 filename의 약어이다.

 

 

 

2. replicas 수정

# sed를 이용하여 replicas 수정
$ sed -i 's/replicas: 3/replicas: 6/' echo-ldh.yaml

# echo-ldh.yaml 파일 확인
$ $ cat echo-ldh.yaml

파일에서 replicas의 값을 3에서 6으로 변경한다. -i(—in-place) 는 변경한 내용을 현재 파일에 바로 적용하겠다는 의미이다.

 

 

 

3. 변경된 내용 적용

이미 존재한다는 에러메세지가 나오며 아무 일도 일어나지 않는다.

 

 

apply로 오브젝트 생성하고 관리하기

run은 파드를 간단하게 생성하는 매우 편리한 방법이다. 하지만 run은 단일파드만 생성 가능하다. 따라서 run을 모든 상황에 적용하기 어렵다. 그렇다고 create로 디플로이먼트를 생성하면 앞서 확인한 것처럼 파일의 변경사항을 작동할 수 없다는 단점이 있다. 이런 경우를 위해 쿠버네티스는 apply 명령어를 제공한다.

 

 

  • echo-ldh.yaml 파일을 kubectl apply 명령으로 적용

오브젝트를 처음부터 apply로 생성한것이 아니어서 경고가 뜬다. 경고가 떠도 작동에는 문제가 없지만 일관성에는 문제가 생길 수 있다. 명령창등에 직접 애드혹(ad-hoc, 일회적 사용)으로 create를 사용하고 이처럼 변경 사항이 발생할 가능성이 있는 오브젝트는 처음부터 apply로 생성하는것이 좋다.

 

 

 

 

 

 

 

출처:

"컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 조훈,심근우,문성주 지음/길벗출판사" 책을 기반으로 실습한 내용입니다.