k8s를 공부를 하다보면 Deployment만 생성했음에도 Replicaset이 생성되고 이에 대해 pod가 생성된다.
나는 Deployment만 생성했는데, 어떻게해서 Replicaset도 생성이 되는걸까? 이를 알기 위해서는 이들의 역할을 알아야한다.
Pod란?
Pod는 k8s의 가장 작은 구성요소이다. 쉽게 말하자면 하나 이상의 Container를 보유하고 있는 리소스이다.
Container = Application, Pod = Server라고 생각하면 쉽다. 즉, Container를 관리한다고 보면 된다.
Pod는 1개의 Container로 구성될 수도 있지만, 다수의 Container로 구성할 수 있기에 이를 관리할 필요가 있다.
Replicaset란?
Label을 통해서 Replicaset에서 지정된 수의 Pod를 항상 생성하는 역할을 한다.
예를들어) role = web의 Label을 가지고 있는 Replicaset을 생성하면 Controller가 먼저 role=web의 pod 개수를 검색하고, 지정된 수를 벗어나는 경우 Replicaset에서 지정한 수를 확인하여 pod를 동일한 개수로 맞춰준다.
즉, Relicaset은 pod를 관리하는 역할이다!!
그렇다면 Deployment란?
Deployment는 Replicaset을 관리하는 역할을 한다. Replicaset을 관리하여 Image, name 등 업데이트가 발생할 경우, 이를 Replicaset에 업데이트하고 업데이트 된 Replicaset은 다시 Pod를 수정한다.
그리고 이는 Repplicaser version으로 관리한다.
그렇다면 실제 실습을 해보자!!
1. 먼저 임의의 Deployment를 생성한다.
- Deployment만 생성했음에도 replicaset과 pod가 생성됬다.
2. Deployment(Pod image)를 수정한다.
- 아래와 같이 deployment는 그대로 존재하지만, Replicaset이 새로 생겼고, 기존 Pod는 삭제되고 변경된 Image에 맞는 Pod가 생성된다.
Deployment의 history를 보면 아래와 같이 REVISION 1, 2가 생겨난것을 알 수 있다.
그리고 각각의 Deployment 설정은 rollout history로 확인할 수 있으며, --revision 옵션으로 각 버전별 설정을 볼 수 있다.
3. Deployment 롤백을 해보자!!
- 롤백은 아래 명렁어로 가능하며, 내가 지정한 특정 revision으로 수정이 가능하다.
kubectl rollout undo deployment/test1 --to-revision=1
그리고 롤백을 하면, 일시적으로 test1의 pod는 6개가 되는것을 확인할 수 있다. 이는 기존 busybox의 pod는 Terminating으로 삭제되며, 새로운 nginx의 pod가 Running이 되기때문이다.
새로 생성된 pod를 보면 본래 revision=1일때의 Image로 복원되었음을 알 수 있다!!
Replicaset에서도 보면 현재 배포중인 Replicaset이 Deployment의 revision=3 으로 배포되는것을 알 수 있다!!
롤백한 다음에 Deployment의 History를 살펴보면, REVISION과 각 정보가 변경되었음을 알 수 있다.
Deployment와 Replicaset을 보면 언뜻보기에는 비슷하지만, Deployment가 더 상위에 있는 개념이라고 보면 된다.
물론 Deployment를 수정하지 않고, 직접 Replicaset을 수정해서도 반영할 수 있다. 하지만 이런 경우에는 Deployment에서 버전 관리가 안되기 때문에 롤백하기가 매우 어려운 문제가 있다.
k8s를 잘 이용하기 위해서는 Replicaset을 버전 관리할 수 있는 Deployment를 이용하는것이 좋다!!!
'기술 이모저모 > [K8s] Kubernetes' 카테고리의 다른 글
[k8s] Kubernetes Namespace란? 개념정리 (0) | 2022.10.02 |
---|---|
[k8s] Service 개념 및 Type 정리 (0) | 2022.09.18 |
[k8s] kubernetes ReplicaSet/ReplicationController 기본개념 (0) | 2022.08.26 |
[k8s] kubernetes kube-proxy, pod 기본 개념 (0) | 2022.08.26 |
[k8s] kubernetes 구조는 어떻게 될까? (0) | 2022.08.20 |