Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

전공공부

[K8S - CKA] Relication Controller & ReplicaSet 본문

Study/K8S

[K8S - CKA] Relication Controller & ReplicaSet

monitor 2023. 8. 20. 16:37

1. ReplicaSet


정의 : Pod 하나가 Fail이 되어서 내려가도 다른 인스턴스가 실행 시켜서 Fail 상태에서 벗어 날 수 있게 하는 것

동작 : 실패 상태가 되면 새로 POD를 배포한다. 이는 고 가용성을 보장한다.

정리 : POD가 Fail이 되어도 새로 살려서 POD를 배포 할 수 있게 하여서 고 가용성을 보장하는 것 

Load Balancing & Scaling


Node를 거쳐서 ReplicationController가 구성된 걸 볼 수 있다.

Replication Controller, ReplicaSet Node를 넘어서 복제 할 수 있음을 보여준다. (Scale Up 지원이 가능)

 

Replication Controller와 ReplicaSet과 다르다.

 

하지만, Replication Controller이 ReplicaSet의 사실상 이전 버전이므로 Replication Controller의 정의된 것은 모두 ReplicaSet에서 쓸 수 있다.

YML


1. Replication Controller

 

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        
 ---
# Pod.yaml
 
apiVersion: v1
kind: POD
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

 

정의 부분은 사실 공식문서를 참고해서 작성하기 때문에 의미가 없고, 중요하게 생각해야 할 부분은 spec.template 부분의 하단에 POD의 정의 중 kind, apiVersion를 제외 하부의 값을 그대로 가져오면 된다.

 

이렇게 구성하면 Replication Controller의 정의가 부모가 되고 Pod 부분이 Child 부분이 될 것입니다.

 

그리고, replicas의 갯수를 지정해야 하기때문에 replicas: 3 이라고 spec.replicas로 지정합니다.

 

k create -f ~.yml #으로 rc 만들 수 있고
k get rc #배포 된지 확인 가능
k describe rc <replicationControllerName> #각 RC 성질 검색 가능

 

2. ReplicaSet

 

Replication Controller와 모두 같고 apiVersion 부분만 다르다. (v1 -> apps/v1)

Replication Controller와 주요 다른점은 selector를 하나 더 붙여서 어떤 포드에 붙일지 정할수 있다.

 

아래 예시로 필요한 이유를 살펴보

 

 

Labels and Selectors


ReplicaSet의 역할은 모니터하다가 포드가 실패하면 새로 배포하는 것이다.

그런데 포드가 수백 개 있다면 봐야 할 포드가 너무 많을 것이다.

그래서, selector를 붙여서 어떤 포드를 볼 지 labels로 지정해버리면 리소스 낭비가 없을 것이다.

Scale


어떻게 ReplicaSet을 업데이트 해서 스케일 아웃을 할 수 있을까?

위에서 정의한 yml 파일을 다시 수정하여

k replace --force -f ~.yml 

을 쓰면 된다.

 

또는, Command 라인에서 바로 변경하는 방법으로

 k scale --replicas=6 replicaset

 

이렇게 할 수 있다.

 

그런데, 당연하지만 실제 yaml 파일을 수정해두지 않으면 파일을 변경하지 않았기 때문에 추후에 배포시에는 replica가 3으로 배포가 될 것이다.

'Study > K8S' 카테고리의 다른 글

[K8S - CKA] Imperative 접근 방식 vs. Declarative 접근 방식  (0) 2023.08.22
[K8S - CKA] Deployment  (0) 2023.08.20
[K8S - CKA] Kube Scheduler  (0) 2023.08.15
[K8S - CKA] K8S Controller Manager  (0) 2023.08.15
[K8S - CKA] kube-apiserver  (0) 2023.08.13