* Controller: K8s object들을 모니터링하는, K8s의 뇌
그 중에서도, 오늘은 Replication Controller에 대해 정리할 예정이다.
1. Replication이란?
Replica가 무엇이고, 왜 replication controller가 필요할까?
1) High Availability
이전 공부했던 것 처럼, 우리 app이 single로 돌아가고 있는데, 문제가 발생하면 access가 중단된다.
그래서 하나 이상의 instance or POD를 구성하는데,
이때 Replication controller가 multiple한 instance의 구동(running)을 돕는다.
- 그럼, multiple한 instance 구성이 아니면 Replica는 필요 없을까?
=> No. single pod가 fail되면, replication controller는 자동으로 new pod를 생성한다.
따라서, replicaion controller는 항상 pod가 예상했던 수 만큼 running 되고 있는지 감시하고 있다.
2) Load Balancing & Scaling
- 또다른 목적은, load 분산을 위한 multiple POD를 생성할 때 필요하다.
유저 수가 늘거나 리소스가 부족할 때, pod를 동일 클러스터 내 다른 노드로까지 확장한다.
수요가 떨어질 때는 pod 또한 감설한다.
2. Replication Controller VS Replica Set
둘 다 동일한 목적을 갖고 있으나, 같은 것은 아니다.
Replication Controller는 과거 기술 버전으로, 현재는 Replicat Set에 대체됐다.
현재로서는 Replica Set이 replication setup을 위한 방법으로 추천된다!
1) ReplicationController YAML
: 현재는 사용하지 않으니 패스하도록 하자.
크게 달라지는 것은, spec 밑에 "template", "replicas" 라는 key가 생긴다.
2) ReplicaSet YAML
Replication controller와 구성은 거의 비슷하지만, 아래와 같이 변경된 사항들이 있다.
- apiVersion: v1 -> apps/v1 으로 변경
- kind: Replication controller -> ReplicaSet 으로 변경
- spec: 에 "selector" 개념 추가
. selector: 어떤 레이블에 속한 파드를 관리할지에 대한 설정
-> 이걸 왜 설정해야 하냐면, ReplicaSet은, ReplicaSet이 생성하지 않은 pod에 대해서도 관리하기 때문이다.
이전에 생성했던 pod(우측 yaml) YAML에서는 labels에 tier:Front-end를 정의해줬었다.
따라서, ReplicaSet에 selector로 해당 labels를 정의해주면,
이 pods에 대해 모니터링이 되면서 pod가 죽었는지, 수(replicas: 3)가 제대로 떠 있는지 모니터링 가능하다.
3) 'template' key는 왜 필요할까?
현재 관리되고 있는 pod 중에 한 개가 죽어서 'replicas=3'을 만족시키지 못할 경우,
동일한 pod를 띄워주기 위함이다. Replicaset은 항상 pod들을 감시하고, desired number of PODs가 유지되게 해주며, 'template' 섹션은 필수다.
4) Replicaset을 Scale하는 방법
: 기존 replicas 값을 3 -> 6으로 변경하고 싶다면?
4-1) replicaset-definition.yaml에서 값을 수정한다.
# kubectl replace -f replicaset-definition.yaml
4-2) kubectl scale 명령을 사용한다. *단, 파일이 변경되진 않고 임시로 변경되는 것임!
# kubectl scale --replicas=6 -f replicaset-definition.yaml
# kubectl scale --replicas=6 [TYPE] [NAME] // ex. kubectl scale --replicas=6 replicaset myapp-replicaset
3. Command 정리
# kubectl create -f replicaset-definition.yaml // 생성
# kubectl get replicaset // 조회
# kubectl delete replicaset myapp-relicaset (이와 연관된 모든 pod도 삭제됨)
# kubectl replace -f replicaset-definition.yaml // replace/update를 위한 cmd
# kubectl scale -replicas=6 -f replicaset-definition.yaml // 파일을 수정하지않고 설정 변경
출처)
자료의 기반은 모두 Udemy의 'Kubernetes for the Absolute Beginners - Hands-on' Course 입니다!
'직장생활 > Kubernetes(K8s), Docker' 카테고리의 다른 글
Kubernetes 왕초보 강의 7: Networking in Kubernetes (ft. Udemy) (0) | 2021.10.07 |
---|---|
Kubernetes 왕초보 강의 6-3: Deployments (ft. Udemy) (0) | 2021.10.06 |
Kubernetes 왕초보 강의 6-1: PODs with YAML (ft. Udemy) (0) | 2021.10.06 |
Kubernetes 왕초보 강의 5: YAML Introduction (ft. Udemy) (0) | 2021.10.05 |
Kubernetes 왕초보 강의 4: Pods (ft. Udemy, K8s) (0) | 2021.10.05 |