# Deployment, ReplicaSet, Pod 정보 확인
kubectl get Deploy,rs,po
세가지 유형의 오브젝트를 모두 출력
순서는 다음과 같다.
deploy-nginx라는 이름의 Deployment를 생성한다.
Deployment는 자신의 이름을 따서 deploy-nginx-d894fc95c라는 이름의 ReplicaSet을 생성한다.
ReplicaSet은 자신의 이름을 따서 deploy-nginx-d894fc95c-djmms라는 이름의 Pod를 생성한다.
즉, Deployment는 ReplicaSet을 제어하고 ReplicaSet은 Pod를 제어한다.
ReplicaSet을 통해 Pod의 개수를 보장하고 Deployment를 통해 ReplicaSet 컨트롤러의 동작을 보장한다.
Pod를 삭제하면 ReplicaSet이 다시 생성해주고 ReplicaSet을 삭제하면 Deployment가 다시 생성하도록 운영된다.
Deployment Rolling Update & Roll Back(1)
Rolling Update 사용법
kubectl set image deployment <deploy_name><container_name>=<new_version_image>
RollBack 사용
kubectl rollout history deployment <deploy_name>
kubectl rollout undo deploy <deploy_name>
kubectl set 커맨드
kubectl set은 쿠버네티스 리소스의 특정 필드를 업데이트하는 데 사용되는 명령입니다. 이 명령을 사용하면 리소스의 특정 필드 값을 변경하거나 수정할 수 있습니다. kubectl set --help 명령
Rolling Update 동작과정
1. 기존 버전의 ReplicaSet으로 인해 ngnix:1.14컨테이너가 들어있는 파드 3개가 실행중이다. 2. 관리자가 버전 업데이트를 위해 명령어를 입력한다. 3. Deployment는 새로운 버전의 ReplicaSet을 생성하고 nginx:1.15컨테이너가 들어있는 파드 1개를 실행한다. 4. 기존 버전의 ReplicaSet의 replicas를 2로 변경한다. 5. 새로운 버전의 ReplicaSet의 replicas를 2로 변경한다. 6. 기존 버전의 ReplicaSet의 replicas를 1로 변경한다. 7. 새로운 버전의 ReplicaSet의 replicas를 3로 변경한다. 8. 기존 버전의 ReplicaSet을 제거한다.
'kubectl rollout [ pause / resume ]' 을 통해 업데이트를 일시정지하거나 재개할 수 있다.
# 업데이트 일시정지 및 재개
kubectl rollout pause deployment app-deploy
kubectl rollout resume deployment app-deploy
여러 버전으로 Rolling Update
다양한 버전으로 업데이트 해보고 여러 명령을 입력해보면서 각각의 결과를 확인해본다.
# 버전을 하나씩 증가시키며 결과 확인
kubectl set image deployment app-deploy web=nginx:1.24 --record
kubectl set image deployment app-deploy web=nginx:1.25 --record
kubectl rollout restart - 업데이트 재실행
Rolling Update 과정에 준하여 해당 리소스의 모든 파드를 재시작한다.
# Rolling Update 재실행
kubectl rollout restart deployment app-deploy
kubectl rollout history - 업데이트 기록 확인
업데이트의 했던 기록을 확인한다.
# 버전 업데이트 기록 확인
kubectl rollout history deployment app-deploy
업데이트 기록
kubectl rollout undo - Rollback
이전 업데이트로 되돌린다.
'--to-revision' 옵션을 사용하면 원하는 revision으로 되돌릴 수 있다.
# 바로 이전 단계로 Rollback
kubectl rollout undo deployment app-deploy
# 원하는 revision으로 Rollback -> 아래 명령은 1.23버전으로 이동
kubectl rollout undo deployment app-deploy --to-revision=2
아래는 revision=2로 롤백한 캡처화면이다.
REVISION을 보면 뒤로 롤백을 하기 전에는 버전 순서별로 1, 2, 3, 4 였지만
롤백한 이후에는 롤백 시점의 REVISION이 2에서 5로 변경되었고 2는 없어졌다.
방금 롤백을 했기에 현재는 1.23인데 여기서 --to-revision을 입력하지 않고 롤백을 하면 다시 1.25로 돌아간다.
아주 이전의 버전으로 롤백하기 위해 뒤에 --to-revision 을 입력하지 않고 계속 롤백 명령만 입력하면 두 버전에서만 왔다갔다 하는 상황이 벌어지니 과거로 돌아가고 싶으면 반드시 --to-revision 을 입력해서 원하는 revision으로 이동하자.
Deployment Rolling Update & Roll Back(2)
yaml파일에 추가적인 필드를 입력하여 Rolling Update하는 과정을 원하는 대로 커스터마이징 가능하다.
# kubectl apply 명령으로 yaml파일 실행
kubectl apply -f deploy-exam2.yaml
이번에는 처음과 다르게 create가 아닌 apply를 사용하여 yaml파일을 실행했다.
kubectl apply로 롤링 업데이트를 하는 것이 더 간단하며 많이 쓰인다.
더 알아보고 싶으면 아래를 참조.
kubectl create와 kubectl apply의 차이
kubectl create: 1. kubectl create 명령어는 주어진 YAML 또는 JSON 파일에서 새로운 쿠버네티스 오브젝트를 생성합니다. 2. 새로운 오브젝트를 생성할 때만 사용되며, 이미 존재하는 오브젝트에 대해서는 오류를 발생시킵니다. 3. 오브젝트를 생성할 때마다 kubectl create를 사용하면 오브젝트의 버전을 증가시키지 않고 오브젝트를 새로 만듭니다.
kubectl apply: 1. kubectl apply 명령어는 주어진 YAML 또는 JSON 파일에서 쿠버네티스 오브젝트를 생성하거나 업데이트합니다. 2. 오브젝트가 이미 존재하는 경우 해당 오브젝트를 업데이트하고, 없는 경우에는 새로운 오브젝트를 생성합니다. 3. kubectl apply는 오브젝트를 "원하는 상태"로 유지하도록 설계되었으며, 동일한 리소스를 여러 번 적용해도 동일한 상태가 유지됩니다.
일반적으로는 kubectl apply 를 사용하는 것이 더 유용하며, 특히 동일한 오브젝트를 여러 번 적용해야 할 때 유용합니다. kubectl apply 는 변경 사항만 적용하므로 현재 상태와 원하는 상태가 일치하면 아무 작업도 수행하지 않습니다.