728x90
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를 사용한다.
728x90