Pod는 언제든지 삭제, 생성될 수 있는 리소스.
레플리카셋으로 파드를 생성하면 레플리카셋에 속해있는 파드가 삭제되도 자동으로 재생성 됨.
apache 레플리카셋 생성.
# rep-apache.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rep-apache
labels:
replica: apache
spec:
replicas: 3
template:
metadata:
name: httpd
labels:
app: httpd
spec:
containers:
- name: apache
image: httpd
imagePullPolicy: Never
ports:
- containerPort: 80
selector:
matchLabels:
app: httpd
# replicas: 레플리카셋에 만들 파드의 갯수. 워커노드에 맞춰 자동으로 분산해서 생성한다.
# selector: template에 입력한 라벨을 입력해서 레플리카셋과 파드간 매칭한다.
생성된 레플리카셋과 파드 조회

여기서 파드를 삭제하고 재생성 과정 확인.
kubectl get pod,rs
kubectl delete pod rep-apache-7d8zn
kubectl get pod,rs
rep-apache-7d8zn 파드를 삭제하면 레플리카셋이 자동으로 rep-apache-zmhtr 파드를 생성했다.

레플리카셋을 삭제하려면 레플리카셋 자체를 지워야 한다.
kubectl delete rs rep-apache
# dep-nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep-nginx
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: webserver
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
selector:
matchLabels:
app: nginx
# 파일의 내용이 레플리카셋과 크게 다르지는 않다. kind만 Deployment로 바뀐것 뿐.
kubectl get deploy,rs,pod

kubectl delete rs dep-nginx-69cb5cf5b9
kubectl get deploy,rs,pod

kubectl set image deployment/dep-nginx webserver=nginx:1.16
# kubectl set image deployment/<DEPLOYMENT명> <CONTAINER명>=<업데이트할이미지>
# 실행하고 확인결과 새로운 파드를 먼저 생성하고 이전파드를 삭제하는 롤링업데이트가 정상적으로 진행되었다.
# 레플리카셋도 새로 실행되고 이전 레플리카셋은 리비전 정보로 남겨둔다.

kubectl set image deployment/dep-nginx webserver=nginx:1.2.3
# nginx:1.23으로 업데이트 해야하는걸 1.2.3으로 잘못 입력했을때를 가정한다.

kubectl rollout undo deployment/dep-nginx

- 디플로이먼트의 롤아웃 히스토리 조회.
revision이 표시되는걸 확인이 가능하다.
# --to-revision 옵션으로 롤백할 리비젼의 선택이 가능. kubectl rollout undo deployment/dep-nginx --to-revision=3