kubernetes

kubernetes controller - Replication Controller

mingming_96 2023. 9. 3. 14:54

https://judo0179.tistory.com/57

 

Replication Controller

   요구하는 Pod의 개수를 보장하며 파드 집합의 실행을 항상 안정적으로유지 하는 것을 목표 

       - 요구하는 Pod의 개수보다 부족하면 template를 이용해 Pod를 추가

       - 요구하는 Pod의 개수보다 많으면 최근에 생성된 Pod를 삭제

 

Replication Definition

apiVersion: v1
kind: ReplicationController
metadata:
  name: <ReplicationController_Name>
spec:
  replicas: <배포 개수>
  selector:
    key: value
  template:
    <Container template>

 

selector : Key : Value로 구성해 selector에 포함되는 파드를 관리

replicas : 배포 개수

template  : 컨테이너를 정의하는 template

 

webui 라벨을 갖는 nginx 웹서버를 3개 실행해줘!  

kubectl create rc-exam --image=nginx --replicas=3 --selector=app=webui

nginx-rc.yaml

apiVersion:
kind: ReplicationController
metadata:
  name: nginx-rc
spec:
  replicas: 3
  selector:
    app: webui
  template:
    metadata:
      name: nginx-pod
      labels:
        app: webui
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.14

ReplicationController의 selector label의 template의 lable에 포함되어 있어야 합니다.

 

작성한 manifest 파일 배포 

kubectl apply -f nginx-rc

ddddd

3개의 Pod가 실행중인 것을 확인할 수 있습니다. 

 

kubectl describe rc nginx-rc

 

redis 이미지의 파드 실행 ( app = webui 라벨을 가진 )

kubectl run redis --image=redis --dry-run --labels=app=webui -o yaml > redis.yaml
kubectl apply -f redis.yaml

실행되지 않고 바로 삭제됩니다. 해당 라벨을 갖는 Pod를 3개만 실행해주기 때문에 그 이상의 Pod는 바로 죽여버립니다.

 

 

ReplicationController 편집하기 

kubectl edit rc nginx-rc

replicas를 4로 바꾸고 저장해줍니다. Pod의 개수를 맞추기 위해 한개의 Pod를 추가 실행합니다. 

 

명령어로 스케일 조절하기 

kubectl scale rc nginx-rc --replicas=2

가장 최근 실행된 두개의 Pod를 삭제합니다.

 

Pod의 이미지 버전 수정하기 

kubectl edit rc nginx-rc
  selector:
    app: webui
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: webui
      name: nginx-pod
    spec:
      containers:
      - image: nginx:1.15  ### 1.14 ~> 1.15
        imagePullPolicy: IfNotPresent
        name: nginx-container
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

버전이 바뀐다고해서 Pods의 이미지가 변경되진 않습니다.   그러나 이후 생성되는 Pods는 1.15 버전으로 생성됩니다.

 

EXAMPLE 

다음 조건으로 ReplicationController를 사용하는 rc-lab.yaml 파일을 생성하고 동작시킵니다.

- lables(name: apache, app:main, rel:stable)를 가지는 httpd:2.2 버전의 Pod를 2개 운영합니다

rc name : rc-mainui

container: httpd:2.2

 

rc-lab.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-mainui
spec:
  replicas: 2
  selector:
    app: main
  template:
    metadata:
      name: apache-pod
      labels:
        app: main
        rel: stable
        name: apache
    spec:
      containers:
      - name: apache
        image: httpd:2.2

동작되는 httpd:2.2 버전의 컨테이너를 3개로 확장하는 명령을 적고 실행하세요 

kubectl scale rc rc-mainui --replicas=3