[Kubernetes] Replication Controller (레플리케이션 컨트롤러)

2023. 2. 11. 23:57·Cloud Engineering/Kubernetes ⚙️
목차
  1. Replication Controller
  2. ReplicationController Manifest File 예시 
  3. 레플리케이션 컨트롤러 상세정보 확인 명령어 
  4. 레플리케이션 컨트롤러 목록과 상태를 확인하는 명령어 
  5. Pod 수평 스케일링 
  6. 1. 명령어로 스케일링하기 
  7.  
  8. 2. 오브젝트 수정하여 스케일링하기 
  9.  
  10. 3. 오브젝트 파일 (Manifest File)을 수정하여 스케일링하기 
  11. Replication Controller 삭제하기 
  12.  
728x90

Replication Controller

쿠버네티스의 컨트롤러는 파드 복제본 (replicas)들의 숫자를 보장해주는 역할을 한다. 레플레케이션 컨트롤러는 이용가능한 상태의 pod을 원하는 수 만큼으로 관리해 주는데, pod가 원하는 수 보다 많은 경우 줄여주고, 원하는 수 보다 적은 경우 자동으로 늘려준다. 

레플리케이션 컨트롤러를 구성하는데 필요한 요소는 레이블 셀렉터, 파드 템플릿, 복제본의 수가 있다. 

레이블 셀렉터는 key :value 형식으로 설정되며, 생성 및 관리를 할 파드에 대해 지정하는 것이다. 

파드 템플릿은 파드를 어떤식으로 구성할 것인지 설정 내용에 대한 것이다. 이 파드 템플릿과 동일하게 복제본들이 만들어 진다. 

복제본의 수는 지정해 주지 않으면 디폴트 값이 1 이며, 지정해 주면 지정한 수대로 pod의 수가 유지 된다. 

 

ReplicationController Manifest File 예시 

rc.yaml 

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이 3개 생성되었다. 

 

생성된 pod들의 레이블 정보를 확인해보면 app=nginx로 설정이 되어있다. 

vagrant@kube-control1:~/work/mj$ kubectl get pods --show-labels
NAME          READY   STATUS    RESTARTS   AGE     LABELS
nginx-c28r4   1/1     Running   0          8m31s   app=nginx
nginx-dswl8   1/1     Running   0          8m31s   app=nginx
nginx-gghs2   1/1     Running   0          8m31s   app=nginx

 

레플리케이션 컨트롤러 상세정보 확인 명령어 

vagrant@kube-control1:~/work/mj$ kubectl describe replicationcontrollers/nginx

kubectl describe 명령어로 생성한 레플리케이션 컨트롤러의 상세 정보를 확인한다. 

Selector 가 app=nginx 레이블로 설정되었다.
Replicas 는 현재 총 3개이고 원하는 개수가 3 (desired)이다. 

 

레플리케이션 컨트롤러 목록과 상태를 확인하는 명령어 

vagrant@kube-control1:~/work/mj$ kubectl get replicationcontrollers
NAME    DESIRED   CURRENT   READY   AGE
nginx   3         3         3       6m27s

 

Pod 수평 스케일링 

1. 명령어로 스케일링하기 

$ kubectl scale replicationcontroller NAME --replicas=REPLICAS_NUMBER
$ kubectl scale replicationcontroller nginx --replicas=4

스케일링 되어 pod이 하나 더 늘어난 것을 확인할 수 있다. 

레플리케이션 컨트롤러의 정보를 확인해보면 DESIRED 값이 4로 변경되었다. 

vagrant@kube-control1:~/work/mj$ kubectl get replicationcontroller nginx
NAME    DESIRED   CURRENT   READY   AGE
nginx   4         4         4       14m

 

2. 오브젝트 수정하여 스케일링하기 

$ kubectl edit replicationcontroller NAME

$ kubectl edit replicationcontroller nginx

위의 명령어를 입력하면 vim editor에서 내용을 수정할 수 있다. 

spec 필드의 replicas 필드의 값을 4에서 5로 수정후 :wq 로 저장해준다. 

pod 개수가 5개로 스케일링 되었다. 

vagrant@kube-control1:~/work/mj$ kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
nginx-5frd4   1/1     Running   0          7m20s
nginx-c28r4   1/1     Running   0          18m
nginx-dswl8   1/1     Running   0          18m
nginx-g8mfd   1/1     Running   0          9s
nginx-gghs2   1/1     Running   0          18m

 

3. 오브젝트 파일 (Manifest File)을 수정하여 스케일링하기 

레플리케이션 컨트롤러를 생성하기 위해 작성한 오브젝트 파일을 vi/vim editor로 편집하고 변경된 사항을 적용시킨다.

편집하지 않고 기존의 복제본 개수 3개였던 설정파일을 다시 적용시켜보기로 한다. 

기존 설정파일 

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

 

replace -f 로 오브젝트 설정파일대로 레플리케이션 컨트롤러를 업데이트 해준다. 

vagrant@kube-control1:~/work/mj$ kubectl replace -f rc.yaml
replicationcontroller/nginx replaced

 

pod 의 목록을 확인하면 다음과 같다. 신기한 점은, pod 개수가 줄어드는 스케일링이 될때 삭제되는 pod은 최신에 생성된 순으로 먼저 삭제가 된다는 것이다 !

vagrant@kube-control1:~/work/mj$ kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
nginx-c28r4   1/1     Running   0          25m
nginx-dswl8   1/1     Running   0          25m
nginx-gghs2   1/1     Running   0          25m

 

Replication Controller 삭제하기 

$ kubectl delete replicationcontroller NAME

vagrant@kube-control1:~/work/mj$ kubectl delete replicationcontroller nginx
replicationcontroller "nginx" deleted

 

레플리케이션 컨트롤러를 삭제하면 레플리케이션 컨트롤러에 의해 생성된 pod들이 모두 삭제가 된다. 

vagrant@kube-control1:~/work/mj$ kubectl get pods
No resources found in default namespace.

 

자료 출처 

https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/

 

ReplicationController

Note: A Deployment that configures a ReplicaSet is now the recommended way to set up replication. A ReplicationController ensures that a specified number of pod replicas are running at any one time. In other words, a ReplicationController makes sure that a

kubernetes.io

 

728x90

'Cloud Engineering > Kubernetes ⚙️' 카테고리의 다른 글

[Kubernetes] Jobs (잡)과 CronJob  (0) 2023.02.13
[Kubernetes] DaemonSet (데몬셋)  (0) 2023.02.13
[Kubernetes] 컨테이너 프로브 (Container Probe)  (0) 2023.02.11
[Kubernetes] Pod Lifecycle (Pod의 생명주기) 와 컨테이너의 상태  (0) 2023.02.11
[Kubernetes] Namespace 생성, 삭제, 확인하기  (0) 2023.02.09
  1. Replication Controller
  2. ReplicationController Manifest File 예시 
  3. 레플리케이션 컨트롤러 상세정보 확인 명령어 
  4. 레플리케이션 컨트롤러 목록과 상태를 확인하는 명령어 
  5. Pod 수평 스케일링 
  6. 1. 명령어로 스케일링하기 
  7.  
  8. 2. 오브젝트 수정하여 스케일링하기 
  9.  
  10. 3. 오브젝트 파일 (Manifest File)을 수정하여 스케일링하기 
  11. Replication Controller 삭제하기 
  12.  
'Cloud Engineering/Kubernetes ⚙️' 카테고리의 다른 글
  • [Kubernetes] Jobs (잡)과 CronJob
  • [Kubernetes] DaemonSet (데몬셋)
  • [Kubernetes] 컨테이너 프로브 (Container Probe)
  • [Kubernetes] Pod Lifecycle (Pod의 생명주기) 와 컨테이너의 상태
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • 데이터브릭스
  • 카카오코딩테스트
  • 백준
  • EC2
  • dfs
  • 쿠버네티스
  • 스파크
  • linux
  • 빅데이터
  • Kubernetes
  • Swift
  • python
  • 데이터엔지니어
  • 백트래킹
  • 클라우드
  • docker
  • AWS
  • ansible
  • 데이터엔지니어링
  • 운영체제
  • 리눅스
  • 파이썬
  • Databricks
  • 코딩테스트
  • SPARK
  • Leetcode
  • 프로그래머스
  • dp
  • BFS
  • 알고리즘

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[Kubernetes] Replication Controller (레플리케이션 컨트롤러)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.