[kubernetes] pod 생성 방식 run/create/apply에 대해서

pod 생성 방식 정리

run

  • 쉽게 파드 생성 가능
  • 단일 파드 1개 생성
  • yaml 파일을 사용한 파드 생성 불가능

create

  • 파드만 생성할 수는 없고 파드를 관리하는 deployment를 생성할 수 있음
  • yaml 파일을 사용한 오브젝트 생성 가능

apply

  • yaml 파일을 사용한 오브젝트 생성 가능

 

YAML 문법으로 object spec 파일을 작성하여 원하는 스펙과 상태를 저장한다.

# echo-hname.yaml
apiVersion: apps/v1 # API 버전
kind: Deployment # 오브젝트 종류
metadata:
  name: echo-hname
  labels:
    app: nginx
spec:
  replicas: 3 # 몇 개의 파드를 생성할지 결정
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: echo-hname
        image: sysnet4admin/echo-hname # 사용되는 이미지

 

[root@m-k8s ~]# kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
echo-hname-7894b67f-878m6   1/1     Running   0          14s
echo-hname-7894b67f-hx2cd   1/1     Running   0          14s
echo-hname-7894b67f-wtrvt   1/1     Running   0          14s
[root@m-k8s ~]# vi ~/_Book_k8sInfra/ch3/3.2.4/echo-hname.yaml
[root@m-k8s ~]# cat _Book_k8sInfra/ch3/3.2.4/echo-hname.yaml | grep replicas
  replicas: 6
[root@m-k8s ~]# kubectl create -f ~/_Book_k8sInfra/ch3/3.2.4/echo-hname.yaml
Error from server (AlreadyExists): error when creating "/root/_Book_k8sInfra/ch3/3.2.4/echo-hname.yaml": deployments.apps "echo-hname" already exists

pod를 6개로 늘리기 위해 yaml 파일을 수정하고 create명령을 사용하면 디플로이먼트가 이미 생성되어 있다는 에러가 발생한다.

 

[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.2.4/echo-hname.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
deployment.apps/echo-hname configured
[root@m-k8s ~]# kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
echo-hname-7894b67f-878m6   1/1     Running   0          3m42s
echo-hname-7894b67f-gc95g   1/1     Running   0          7s
echo-hname-7894b67f-hx2cd   1/1     Running   0          3m42s
echo-hname-7894b67f-t5j9r   1/1     Running   0          7s
echo-hname-7894b67f-vzsvv   1/1     Running   0          7s
echo-hname-7894b67f-wtrvt   1/1     Running   0          3m42s

apply 명령을 사용하면 변경 사항을 적용시킬 수 있다.

create 명령으로 오브젝트를 만든 뒤에 apply 명령을 사용하면 처음부터 apply로 생성한 것이 아니라는 경고가 발생한다.

작동에는 문제 없으나 일관성에 문제가 생길 수 있기 때문에 변경 사항이 발생할 가능성이 있는 오브젝트는 처음부터 apply를 사용하는 것이 좋다.

create는 언제 쓸까?
일회성으로 오브젝트를 생성할 때는 create를 사용하는 것이 편리하다. 변경이 생길 가능성이 있다면 apply를 사용한다.