kubernetes 클러스터에서 Pod를 관리 하는 컨트롤러로 Deplotment와 Replcaset이라는 컨트롤러가 있습니다.
그중에 먼저 Rplicaset에 대해서 살펴 봅시다.
Replicaset은 Replica controller의 개선된 버전으로 주요 역활은 아래와 같습니다.
- Label값을 이용해 관리할 대상 Pod를 선택
- 선택된 Pod들의 운영 Pod수량 조절
예를 들면 Cluster내의 수십개의 Pod중에 Label selector값을 이용해서 대상 Pod를 선택한 후에 지속적인 모니터링을 하면서 .Pod에 장애가 발생시 신규 Pod를 생성하고 장애 발생한 Pod를 삭제를 하면서 서비스를 유지해 주는 기능을 합니다.
그럼 test디렉토리 하위에 replcaset 디렉토리를 만들고 yaml파일을 생성후에 아래 내용을 파일에 입력 하고 저장후에 배포를 실행해 보겠습니다.
root@master-VirtualBox:~/test# mkdir replicaset
root@master-VirtualBox:~/test# cd replicaset/
root@master-VirtualBox:~/test# mkdir replicaset
root@master-VirtualBox:~/test# cd replicaset/
root@master-VirtualBox:~/test/replicaset# vi replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet ==> 배포될 Object를 정의
metadata:
name: my-nginx
labels:
app: nginx ==> 대상 pod들의 label값
spec:
replicas: 3 ==> 해당 label내에서 유지할 Pod의 갯수
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.10
|
이제 배포를 하고 배포된 replicaset의 정보를 조회하고, Pod의 정보를 조회를 해보겠습니다.
root@master-VirtualBox:~/test/replicaset# kubectl apply -f replicaset.yaml
replicaset.apps/my-nginx created
root@master-VirtualBox:~/test/replicaset# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
my-nginx 3 3 0 32s
root@master-VirtualBox:~/test/replicaset# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-gblrg 1/1 Running 0 67s
my-nginx-k2thq 1/1 Running 0 67s
my-nginx-nfz4k 1/1 Running 0 67s
|
위의 yaml에 설정된 정보와 같이 3개의 Pod들이 배포가 되었고 모두 정상 상태임을 확인할 수 있습니다.
replicaset의 동작 방법에 대해서 좀더 자세히 살펴 보겠습니다. Node1의 Pod는 Replicaset의 Label의 값과 다르고. Pod B는 Label이 같다고 가정을 한 상황에서, Node 1이 장애가 발생을 하면. Replicaset에 의해 Pod B는 Node 2에서 재 생성되고 운영이 되지만 Pod A는 장애복구가 되지 않습니다.
출처: 쿠버네티스 인 액션
replcaset의 동작 방식을 순서도 형식으로 살펴 보면 아래 그림과 같습니다.
- Label과 동일한 값을 가지는 Pod를 찾아 taget list에 등록
- YAML파일의 복제본 Pod수와 운영 중인 Pod의 수를 비교
- 운영 되는 Pod의 숫자가 적으면 부족분 생성
- 운영 되는 Pod의 숫자가 많으면 초과분 삭제
'쿠버네티스' 카테고리의 다른 글
[클라우드] 6. Kubernetes Service 배포 (37) | 2022.09.03 |
---|---|
[클라우드] 5. Kubernetes Deployment 배포 (1) | 2022.08.31 |
[클라우드] 3.Kuberdnetes Pod 배포하기 (4) | 2022.08.28 |
[클라우드] 2. Kubernetes namespace (3) | 2022.08.27 |
[클라우드] 1. 쿠버네티스 설치 (2) | 2022.08.27 |