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개만 만들기때문에 하나만 뜬다
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' #추가 보안서버를 사용안해서 추가하는 부분이다.
정상적으로 적용되면 파드들에 정보가 나온다
참고자료