본문 바로가기
Linux&Ubuntu/Docker&kuber

controller종류와 Replication controller

by Vittorio_Lee 2023. 9. 7.
728x90
반응형
SMALL

controller란 

pod의 개수를 보장 

순서)
1.쿠버야 나 nignx 웹서버를 3개 실행해줘 
2.kubectl create deployment webui --image=nginx --replicas=3
3.API가 ETCD 로 정보를 받아온다.
4.API가 scheduler 에 물오보고 어디로 생성할지 확인하다 
5.API가 Controller에게 너가 컨테이너 3개를 잘 관리 해라 
6.혹시라도 하나가 문제가 발생되면 api에게 전달하여 하나더 생성해라 라고 말하고 다시 3개가 되면 관리 한다. 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

  1. Replication Controller (RC):
    • 기능: 지정된 파드의 복제본 수를 유지하고, 파드의 장애 시 다른 노드에 파드를 재시작합니다. 오래된 버전으로, 대부분의 경우 ReplicaSet 또는 Deployment를 사용하는 것이 좋습니다.
  2. ReplicaSet:
    • 기능: Replication Controller와 유사하지만 더 유연한 셀렉터와 매칭하여 파드를 관리할 수 있으며, 롤링 업데이트 및 롤백을 지원합니다.
  3. Deployment:
    • 기능: 파드 배포를 관리하며, 업데이트와 롤백을 관리하기 위한 높은 수준의 추상화를 제공합니다. 사용자에게 롤링 업데이트 및 롤백을 쉽게 수행할 수 있는 기능을 제공합니다.
  4. StatefulSet:
    • 기능: 스테이트풀 애플리케이션을 위해 설계되었으며, 각 파드에 고유한 식별자와 영구 스토리지를 할당하여 안정적인 순서를 유지합니다.
  5. DaemonSet:
    • 기능: 모든 노드 또는 특정 노드 세트에 파드를 배포하기 위해 사용되며, 모든 노드에서 특정 작업을 실행해야 할 때 유용합니다.
  6. Job:
    • 기능: 일회성 또는 일련의 작업을 수행하는 파드를 관리합니다. 성공 및 실패를 기록하며, 작업이 완료될 때까지 대기하거나 실행할 수 있습니다.
  7. CronJob:
    • 기능: 스케줄에 따라 반복적인 작업을 실행하는 Job을 관리합니다. 주기적인 작업을 예약하고 실행할 수 있습니다.
  8. Horizontal Pod Autoscaler (HPA):
    • 기능: 파드 리소스 사용량에 따라 자동으로 파드 수를 조절하여 스케일 인/아웃을 수행합니다.
  9. Namespace:
    • 기능: 클러스터 내의 리소스를 분리하기 위해 네임스페이스를 사용하며, 리소스를 그룹화하고 격리된 환경을 제공합니다.
  10. Service Account:
    • 기능: 파드에서 클러스터 리소스에 접근할 수 있는 인증 정보를 제공하며, 리소스에 대한 권한을 관리합니다.
  11. Network Policies:
    • 기능: 파드 간 통신을 제어하기 위한 정책을 정의하며, 보안 및 네트워크 분리를 구현하는 데 사용됩니다.
  12. Custom Controller:
    • 기능: 사용자 정의 컨트롤러를 작성하여 특수한 요구 사항에 따라 리소스를 관리할 수 있습니다.

                                                                                                                                                                          *참조 chat-gtp

--------------------------------------------------------------------------------------------------------------------------------------------------------------

1.Replication controller 
ex)kubectl create rc-exam --image=nginx --replicas=3 --selector=app=webui
- 요구하는 pod의 개수를 보장하여 파드 집합의 실행을 항상 안정적으로 유지하는 것을 목표
 -요구하는 pod 개수가 부족하면 template 를 이용해 pod 를 추가 
 -요구하는 pod 수 보다 많으면 최근에 생성된 pod를 삭제

- 기본구성
 -selector
 -replicas
 -template

# vi rc-nginx.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-nginx
spec:
  replicas: 3
  selector:
    app: webui
  template:
    metadata:
      name: nginx-pod
      labels:
        app: webui
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.14
# kubectl create -f rc-nginx.yaml 
replicationcontroller/rc-nginx created     

 

Every 2.0s: kubectl get pods -o wide                                                                     master: Thu Sep  7 13:59:27 2023

NAME             READY   STATUS    RESTARTS   AGE    IP             NODE      NOMINATED NODE   READINESS GATES
rc-nginx-kncv5   1/1     Running   0          1m   10.101.1.137   worker2              
rc-nginx-qztmx   1/1     Running   0          1m   10.101.1.81    worker1              
rc-nginx-wg994   1/1     Running   0          1m   10.101.1.138   worker2              
# kubectl get replicationcontrollers
NAME       DESIRED   CURRENT   READY   AGE
rc-nginx   3         3         3       129m

 

# kubectl describe rc rc-nginx
Name:         rc-nginx
Namespace:    vittorio
Selector:     app=webui
Labels:       app=webui
Annotations:  
Replicas:     3 current / 3 desired
Pods Status:  3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=webui
  Containers:
   nginx-container:
    Image:        nginx:1.14
    Port:         
    Host Port:    
    Environment:  
    Mounts:       
  Volumes:        
Events:           
# kubectl run redis --image=redis --labels=app=webui --dry-run -o yaml > redis.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: webui
  name: redis
spec:
  containers:
  - image: redis
    name: redis

 

# kubectl create -f redis.yaml

 

Every 2.0s: kubectl get pods -o wide                                                                     master: Thu Sep  7 14:06:55 2023

NAME             READY   STATUS        RESTARTS   AGE    IP             NODE      NOMINATED NODE   READINESS GATES
rc-nginx-kncv5   1/1     Running       0          135m   10.101.1.137   worker2              
rc-nginx-qztmx   1/1     Running       0          135m   10.101.1.81    worker1              
rc-nginx-wg994   1/1     Running       0          135m   10.101.1.138   worker2              
redis            0/1     Terminating   0          2s              worker1              실패

* app: webui 같기 때문 

# kubectl edit rc rc-nginx
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-nginx
spec: 
  replicas: 3    >>>> 4  로 변경
Every 2.0s: kubectl get pods -o wide                                                                     master: Thu Sep  7 14:13:15 2023

NAME             READY   STATUS    RESTARTS   AGE    IP             NODE      NOMINATED NODE   READINESS GATES
rc-nginx-kncv5   1/1     Running   0          142m   10.101.1.137   worker2              
rc-nginx-nqprr   1/1     Running   0          2s     10.101.1.82    worker1              
rc-nginx-qztmx   1/1     Running   0          142m   10.101.1.81    worker1              
rc-nginx-wg994   1/1     Running   0          142m   10.101.1.138   worker2              
# kubectl scale rc rc-nginx --replicas=2

scale 명령어는 축소 명령어 
가장 최근에 생긴 파드들 부터 사라짐 

 

# kubectl scale rc rc-nginx --replicas=2
replicationcontroller/rc-nginx scaled

Every 2.0s: kubectl get pods -o wide                                                                     master: Thu Sep  7 14:14:18 2023

NAME             READY   STATUS    RESTARTS   AGE    IP             NODE      NOMINATED NODE   READINESS GATES
rc-nginx-qztmx   1/1     Running   0          143m   10.101.1.81    worker1              
rc-nginx-wg994   1/1     Running   0          143m   10.101.1.138   worker2              

 

# kubectl edit rc rc-nginx


spec:
  replicas: 2
  selector:
    app: webui
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: webui
      name: nginx-pod
    spec:
      containers:
      - image: nginx:1.14 >>>> 1.15 로 변경 

kubectl describe pod 해당 pod 조회 시 변경은 안됩니다. 

하지만 해당 파드를 삭제하고 controller 를 통해 자동생성이 된다면 변경될 수있습니다.

# kubectl delete pod rc-nginx-qztmx
pod "rc-nginx-qztmx" deleted

#kubectl delete pod rc-nginx-wg994
pod "rc-nginx-wg994" deleted

pod 삭제시 controller로 인해 자동생성 된다 
다시 생성된 파드를 보면 1.15로 변경 되어 있다. 

# kubectl describe pod rc-nginx-8694b << 새로생긴 pod

Containers:
  nginx-container:
    Container ID:   cri-o://cf5ad01fe8bf62faa1a26be098a7515a087858a5e982dceaef69b11bd482c1c2
    Image:          nginx:1.15

완전히 삭제

# kubectl delete rc rc-nginx 

728x90
반응형
LIST

'Linux&Ubuntu > Docker&kuber' 카테고리의 다른 글

Deloyment 사용하기  (0) 2023.09.08
ReplicaSet 사용하기  (0) 2023.09.08
pod 환경변수, 패턴의 종류 3가지  (0) 2023.09.07
pod에 Resource 할당하기 CPU/Memory requests Limit  (0) 2023.09.06
static pod 만들기  (0) 2023.09.06