🐳 Container/K8S

[K8s] 쿠버네티스(Kubernetes) 컨트롤러 (1)

heywantodo 2023. 3. 27. 17:35
728x90
반응형

쿠버네티스 컨트롤러 (1)

쿠버네티스 컨트롤러

  • 쿠버네티스는 선언적 선언을 하면 그 선언에 클러스터 상태를 맞추고 감시하며 항상 제어
  • 쿠버네티스 Pod를 관리하는 역할을 함

 

컨트롤러

로보틱스와 자동화에서 컨트롤 루프 는 시스템 상태를 조절하는 종료되지 않는 루프이다. 컨트롤 루프의 예시: 실내 온도 조절기 사용자는 온도를 설정해서, 사용자가 의도한 상태 를 온도 조절

kubernetes.io

 

Replication Controller

Replication Controller

  • Pod가 항상 실행되도록 유지하는 Kubernetes Resource
  • 어떤 이유로든 Pod가 사라지면 누락된 Pod를 감지하고 대체 Pod를 만듦

 

Template

  • 필수 요소 세가지
    • Label Selector
    • Replica Count
    • Pod Template
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-nginx
spec:
  replicas: 3
  selector:
    app: web
  template:
    metadata:
      name: nginx-pod
      labels:
        app: web
    spec:
      containers:
      - image: nginx:1.14
        name: nginx

 

ReplicaSet

  • ReplicationController와 같은 역할을 하는 컨트롤러
  • ReplicationController보다 풍부한 Selector

Match Expression 연산자

  • in : Key와 Value를 지정하여  Key, Value가 일치하는 Pod만 연결
  • Notin : Key는 일치하고, Value는 일치하지 않는 Pod에 연결
  • Exists : Key에 맞는 Label의 Pod를 연결
  • DoesNotExist : Key와 다른 Label의 Pod를 연결
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs-nginx

spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
    matchExpressions:
      - { key: version, operator: In, values: ["1.14", "1.15"] }

  template:
    metadata:
      name: nginx-pod
      labels:
        app: web
        version: "1.14"

    spec:
      containers:
      - image: nginx:1.14
        name: nginx

 

Deployment

  • 서비스가 운영 중에 멈추지 않음
  • Rolling Update & Rolling Back
  • ReplicaSet을 이용해 Pod수를 유지
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx

spec:
  replicas: 3
  selector:
    matchLabels:
      app: web

  template:
    metadata:
      name: nginx-pod
      labels:
        app: web

    spec:
      containers:
      - image: nginx:1.14
        name: nginx-container

 

Rollig Update & Rolling Back

  • Command

Rolling Update

: nginx 1.14 -> 1.15로 update

kubectl set image deployment deploy-nginx nginx-container=nginx:1.15 --record
kubectl describe deployment deploy-nginx

상태 확인

kubectl rollout status deployment deploy-nginx
kubectl rollout history deployment deploy-nginx

이전 version으로 롤백

kubectl rollout undo deployment deploy-nginx
kubectl rollout history deployment deploy-nginx

 특정 시점 version으로 롤백

kubectl rollout undo deployment deploy-nginx --to-revision 5

pod (deployment) 삭제

kubectl delete deployments.apps deploy-nginx

 

  • Yaml (Annotation)

key-value를 통해 리소스 특성을 기록

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx-update
  annotations:
    kubernetes.io/change-cause: nginx version 1.14
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      name: nginx-pod
      labels:
        app: web
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.14

pod 실행

kubectl apply -f deploy-nginx-update.yaml

version 수정

vi deploy-nginx-update.yaml

~
spec:
	containers:
    - name: nginx-container
      image: nginx:1.15
      
~

update 확인

kubectl apply -f deply-nginx-update.yaml
kubectl rollout history deployment deploy-nginx-update
kubectl delete deployment deploy-nginx-update

 

728x90
반응형