kubernetes - controller

이장훈·2021년 11월 10일
0
  • replicationController
    replicaSet
    deployment
    daemonSet
    statefulSet
    job
    Cronjob

Controller란?

  • pod의 개수를 보장해줌

1. 기본 명령어

kubectl create deployment webui --image=nginx --replicas=3
kubectl create -f rc-nginx.yaml

kubectl get replicationcontrollers
kubectl get rc

kubectl describe rc-rcnginx

파드 삭제 시 replicationController가 하는 일은?
kubectl get pods
kubectl delete pod rc-nginx-XXX

API에서 etcd에 자료를 얻어와 schduler를 통해서 노드를 선정하고, controller를 통해서 배포함

2. Controller API 종류

daemonset
deployment - replicaset
stateful sets
cronjob - job :
replication controller : 가장 기본

3. replicationController(RC)

  • 요구하는 pod의 개수를 보장하며 파드 집합의 실행을 항상 안정적으로 유지하는 것이 목표
  • 요구하는 pod의 개수가 부족하면 template를 이용해 pod를 추가
  • 요구하는 pod 수보다 많으면 최근에 생성된 pod를 삭제함
  • 기본구성 : selector / replicas / template

4. pod template

  • rc의 경우는 반드시 replicas 만큼의 selector 방식 내용을 사용합니다. 이때 template의 내용을 제시작하는데, 이 template metadata에서는 label을 반드시 명시해야 해당 내용이 재시작됩니다.

5. 실습

1) rc 실습을 위한 nginx.yaml 파일 구동 (spec에 replicas / selector / template- label 까지 확인)

kubectl create -f rc-nginx.yaml

2) replicas 3개 동작 중 상태 확인

3) nginx curl로 확인

4) rc 확인

kubectl get rc(replicationcontrollers)
name / desired(요청) / current(현재 pod) / ready(작동중) / age(실행시간)

5) describe로 상태확인 이상없이 동작 중

6) rc 삭제

kubectl delete rc로 실시함.
pod 만 삭제할 경우 다시 rc가 동작해서 replicas 3을 유지시킴.

  • 팁 yaml 파일 생성하기

    kubectl run redis --image=redis --labels=app=webui --dry-run -o yaml > redis.yaml
    dry-run : 실행확인

7) rc의 라벨 보장 정책

redis이름의 pod에 label이 rc에 등록된 내용과 동일하면 자동으로 terminating 시킨다.

8) rc 수정

kubectl edit rc rc-nginx
spec의 replicas를 변경시 반영됨.(scale out이 가능)

8-1) 더빠른 rc 수정

kubectl scale rc rc-nginx --replicas=2

9) rc의 작동 우선순위

kubectl edit rc rc-nginx에서 nginx 버전을 1.14 -> 1.15로 변경해도 작동중인 pod에는 변화가 없다.
다만, 작동중인 pod가 죽고 새로운 pod가 생성될때 1.15로 반영되어 등장한다.
따라서 롤링업데이트는 되지 않는다.

현재 작동중인 pod는 아래와 같이 nginx 1.14 버전이다.

만약 이 1.14 pod를 지우게 된다면 rc에 의해서 1.15의 새로운 pod가 생성될 것이다.

kubectl describe pod rc-nginx-flwfl를 보면 nginx:1.15로 실행되는 것을 볼 수 있다.

  • describe 명령어 확인

** 추가문제
1. 다음 조건으로 replicationController를 사용하는 rc-lab.yaml 파일을 생성하고 동작합니다.

  • labels(name:apache, app:main, rel:stable)를 가지는 httpd:2.2 버전의 pod를 2개 운영합니다.
  • rc name: rc-mainui
  • contrainer : httpd:2.2
  • 현재 디렉토리에 rc-lab.yaml 파일이 생성되어야하고, 애플리케이션 동작은 파일을 이용해 실행합ㄴ디ㅏ.
  1. 동작되는 http:2.2 버전의 컨테이너를 3개로 확장하는 명령을 적고 실행하세요.
profile
개발자가 꿈입니다.

0개의 댓글