DevOps:leehi9817

[Kubernetes]Controller(ReplicaSet, Deployment) 본문

Solution Architect/Kubernetes

[Kubernetes]Controller(ReplicaSet, Deployment)

leehi9817 2023. 5. 31. 10:28

Controller

Cluster의 Pod들을 관찰하여 관리자가 선언한 Pod의 개수를 보장해주는 기능을 수행

  1. Auto Healing: Pod 또는 Node에 문제가 생겼을 경우 자동으로 복구 (ex: ReplicaSet)
  2. Software Update: Pod를 업데이트 및 롤백하는 기능 (ex: Deployment)
  3. Auto Scaling: Pod의 리소스가 부족할 때 Pod을 추가적으로 생성
  4. Job: 일시적인 작업을 위해 필요한 순간에만 Pod을 만들었다가 삭제할 수 있는 기능

Replica Set

Pod의 숫자를 보장해주는 Controller

# vi replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-replicaset
spec:
  replicas: 3 # desired state (kube-controller-manager)
  selector:
    matchLabels:
      app: nginx-replicaset

  template:
    metadata:
      name: nginx-replicaset
      labels:
        app: nginx-replicaset
    spec:
      containers:
      - name: nginx-replicaset-container
        image: nginx
        ports:
        - containerPort: 80
       
# kubectl apply -f replicaset.yaml
# kubectl get replicasets.apps -o wide
# kubectl describe replicasets.apps nginx-replicaset
# kubectl edit replicasets.apps nginx-replicaset
# kubectl scale replicaset nginx-replicaset --replicas 3

 

  • ReplicaSet은 3개의 Replicas로 구성 (template에 정의한 Pod가 3개 배포됨) 
  • spec.selector(선택자)를 통해 nginx-replicaset이라는 Labels을 가지고 있는 Pod들의 개수를 보장
  • Pod의 개수가 보장되기 때문에 관리자가 원하는 애플리케이션을 안정적으로 배포할 수 있음
  • 하지만 추후 해당 애플리케이션을 업그레이드하여 배포해야하는 경우가 생기게 되는데 Replica Set은 업데이트에 관한 기능을 제공하지 않음 → Deployment를 사용하여 해결

Deployment

Pod와 ReplicaSet에 대한 선언적 업데이트를 제공

ReplicaSet이 지원하지 못했던 업데이트에 관한 기능을 함께 지원(V1, V2, V3)

# vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-deployment

  template:
    metadata:
      name: nginx-deployment
      labels:
        app: nginx-deployment
    spec:
      containers:
      - name: nginx-deployment-container
        image: nginx
        ports:
        - containerPort: 80

# kubectl apply -f deployment.yaml
# kubectl get deployments.apps -o wide
# kubectl describe deployments.apps nginx-deployment
# kubectl edit deployments.apps nginx-deployment
  • Deployment는 3개의 Replicas로 구성 (template에 정의한 Pod가 3개 배포됨) 
  • spec.selector(선택자)를 통해 nginx-deployment라는 Labels을 가지고 있는 Pod들의 개수를 보장
  • Pod의 개수가 보장되기 때문에 관리자가 원하는 애플리케이션을 안정적으로 배포할 수 있음
  • 다양한 방법으로 업데이트를 지원
Comments