클라우드 엔지니어/클라우드 캠프과정

쿠버네티스 컨트롤러 ( ReplicaSet , Deployment )

해아's 2022. 10. 19. 19:23
Controller
	쿠버네티스에서 컨트롤러는 클러스터 의 상태를 관찰 한 다음, 필요한 경우에 생성 또는 변경을 요청
	각 컨트롤러는 현재 클러스터 상태를 의도한 상태에 가깝게 제어
	말 그대로 파드를 제어하는 제어자

  1) 컨트롤러의 기능
    (1) Auto Healing
	컨트롤러에서 지정한 수의 파드를 유지하는 기능
	특정 노드에서 파드가 다운되거나 특정 노드 자체가 다운되면 다운 된 노드를 다른 곳에서 실


    (2) Software Update
	v1의 파드들이 실행되고 있을 때 새로운 버전의 파드가 배포되면 이전 버전으 파드들을 새로운 버전의 파드로 변경
	버전을 다시 되돌리는 것도 가능

    (3) Job
	한 번만 수행되어야 하는 작업이 있을 때 파드를 생성해서 작업을 수행 후 파드를 삭제
	반복작업으로도 가능

    (4) AutoScale
	HPA, VPA, CA

 

 

 

 

 

 

파드제어하는 녀석

파드를 제어힐수 있는 기능이

 

1. 오토힐 : 지정한 파드수를 유지함

   - (파드가 오류나서 종료될경우 계속실행 , 노드가 죽을경우 다른노드에서 실행하여 복구)

2. 소프트웨어업데이트:

  - 파드의 버전업그레이드할떄 사용함

3. 잡:

4. 오토스케일: 컨트롤러에서 기본제공은 HPA

HPA: 파드의 수  (인해전술)

VPA: 파드의 리밋을 늘림(영웅레벨업?)

CA:

 

replicaset : 매치레이블로 키벨류형태로 접근하는데

matchExpressions 로 할수도있다.

 

템플릿안에 생성할 파드정보를 입력

파드 바로 삭제하는 설정 추가

ReplicaSet ( Auto Healing )

 

실습

파드와 레플리카 생성하기

#레플리카셋
---
#기본파드 만들기
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    type: web
spec:
  containers:
  - name: container
    image: yoskr/yos_node:0.1
    ports:
    - containerPort: 8000
  terminationGracePeriodSeconds: 0

---
#레플리카셋 컨트롤러 만들기
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replica1
spec:
  replicas: 2
  selector:
    matchLabels:
      type: web
  template:
    metadata:
      labels:
        type: web
    spec:
      containers:
      - name: container
        image: yoskr/yos_node:0.1
      terminationGracePeriodSeconds: 0

결과

레플리카셋에 들어가서 수를 조절할수도있다.

 

 

 

 

Deployment  배포기능이라고 보면된다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-1
spec:
  selector:
    matchLabels:
      type: app
  replicas: 2
  strategy: 
  #생성방식 pec.strategy 는 이전 파드를 새로운 파드로 대체하는 전략을 명시한다. 
  #.spec.strategy.type 은 "재생성" 또는 "롤링업데이트"가 될 수 있다. "롤링업데이트"가 기본값이다
    type: Recreate
  revisionHistoryLimit: 1 #버전관리 몇개까지 할것인가 지금은 1개 버전까지
  template: #레플리카셋이 관리할 파드
    metadata:
      labels:
        type: app
    spec:
      containers:
      - name: container
        image: kubetm/app:v1
      terminationGracePeriodSeconds: 10

결과: 자동으로 생성되며 버전을 바꿀경우 두개가 동시에 꺼지고 새로생김

Recreate 방식

 

RollingUpdate 방식은

 

기존파드를 둔채 버전바뀐파드를 실행하여 순차적으로 꺼짐

 

우리는 히스토리 리비전은 1개만 만들기때문에 하나만 뜬다

  revisionHistoryLimit: 1 #버전관리 몇개까지 할것인가 지금은 1개 버전까지 이녀석은 데쉬보드에서 지원안한다.

kubectl rollout history deployment deployment-1

 

이전버전으로 돌아가기

kubectl rollout undo deployment deployment-1 --to-revision=2

 

 

 

      [1] 현재 업데이트 내역 확인
	kubectl rollout history deployment 디플로이먼트이름

      [2] 현재 업데이트 내역 확인
	kubectl rollout undo deployment 디플로이먼트이름 --to-revision=위에서 확인한 숫자

 

롤링업데이트와 리크레이트 방식의 차이를 쉽게알아보면아래와 같다

 

리크레이트 방식 1을 출력하는 서버에서 2를 출력하는 서버로

롤링업데이트방식 2을 출력하는 서버에서 1를 출력하는 서버로

 

리크레이트
파드를 지우고 새로생성
장점 : 자원부담이 적음
단점 : 중간에 다운타임이 있다

롤링업데이트
파드를 순차적으로 실행 삭제 실행삭제
장점 : 다운타임이없다
단점 : 자원부담이 있다.

블루/그린방식
- 레플리카셋을 바꾸는 방식이며
레플리카셋을 블루(현재)와 그린(바꿀버전)으로 생성하여
서비스에서 블루로 지정되어있는 곳을 그린으로 바꾸는 방법이다
서비스단에서 바꾸므로 다운타임이 생기지 않는다.

 

 

 

 

Deployment 

 - HPA (오토 스케일링)

오토스케일링은 자원사용량이 많아졌을떄 자동으로 파드를 추가하는 방식이므로

파드의 자원을 체크 수집하는 서버를 추가해야한다. (매트릭서버)

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.0/components.yaml

수정을 해야한다

            - '--kubelet-insecure-tls' #추가 보안서버를 사용안해서 추가하는 부분이다.

 

 

정상적으로 적용되면 파드들에 정보가 나온다

파드들의 메모리및 CPU사용량

 

 

 

참고자료

더보기

 

728x90
반응형