본문 바로가기
DevOps/Kubernates

[CKA] 28-35 Replica Controller, ReplicaSet, Deployment, Labels and Selectors

by BenKangKang 2023. 3. 30.

Certified Kubernetes Administrator (CKA) with Practice Tests 정리 내용입니다.

28 Practice Test - Solution (Optional)


29 ReplicaSet

Kubernetes Controller

  • 쿠버네티스의 두뇌이다.
  • 쿠버네티스 개체를 모니터링하는 프로세스이다.

Replica Controller

  • 레플리카 컨트롤러는 클러스터 내에서 파드 여러개 띄울수 있도록 도와주며. 이를 통해 high availability 를 제공한다.
  • 레플리카 컨트롤러는 desired count의 팟이 배포되는 것을 보장한다

  • 레플리카 컨트롤러를 사용하면 여러개의 노드로 팟을 부하 분산 할 수 있다, 팟이 균형있게 로드가 되도록 확장을 도와준다.

Difference between ReplicaSet and Replication Controller

  • 둘 다 같은 목적을 갖지만 같지 않다.
  • 레플리카 컨트롤러가 이전 기술이며, 북제 세트가 권장된다

ReplicaController 만드는 방법

apiVersion: v1
    kind: ReplicationController
    metadata:
      name: myapp-rc
      labels:
        app: myapp
        type: front-end
    spec:
     template:
        metadata:
          name: myapp-pod
          labels:
            app: myapp
            type: front-end
        spec:
         containers:
         - name: nginx-container
           image: nginx
     replicas: 3
  • replicas 를 통해 복제본 수를 설정한다.
  • selector가 필수가 아님.

ReplicaSet 만드는 방법

apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: myapp-replicaset
      labels:
        app: myapp
        type: front-end
    spec:
     template:
        metadata:
          name: myapp-pod
          labels:
            app: myapp
            type: front-end
        spec:
         containers:
         - name: nginx-container
           image: nginx
     replicas: 3
     selector:
       matchLabels:
        type: front-end
  • 레플리카 컨트롤러와 달리 selector가 필수다.
    • template에 팟 지정했는데 셀렉터 지정하는 이유는, 레플리카 셋에서 지정하지 않은 팟도 관리하기 위함이다.

  • 레플리카 셋은 모니터링하고, 파드를 유지 시켜준다

Labels and Selectors

  • 클러스터에 수백 개의 팟이 있을 것이다. 우리는 labels을 필터로 사용한다.
    • 즉 selector 에 matchLabels 에 label 을 선언하면, 어떤 Pod 를 모니터링 할 지 알 수 있게 됨
  • 이미 Pod 가 전부 생성되어 있는 상황에 template 을 선언해야 할까?
    • → Yes!
    • Pod를 새로 생성할 때 필요한 정보가 Template 에 존재해야하기 때문.

  • 스케일업 하는 여러가지 방법
    1. 파일 복제본 수를 변경
    2. kubectl scale 커맨드를 사용

commands

$ kubectl create -f replicaset-definition.yaml
$ kubectl get replicaset
$ kubectl delete replicaset myapp-replicaset
$ kubectl replace -f replicaset-definition.yaml
$ kubectl scale -replicas=6 myapp-replicaset

30. Practice Test - ReplicaSets


31. Practice Test - ReplicaSets - Solution


32. Deployments

  • 우리가 사용하는 이미지들은 계속 업그레이드될 것이다. 이때 한 번에 업그레이드 할 경우 중단이 발생할 수 있다. 디플로이먼트는 롤링 업데이틀르 지원한다.
  • 만약 업데이트 된 내용에 문제가 생겨 적용된 버전을 전부 롤아웃 해야하는 경우에도 Deployment 를 활용할 수 있다.
  • deployment>replicaset>pod
    • Deployment은 ReplicaSet 보다 상위 개념이라 리플리카셋의 기본 기능들을 포함한다.
  • 배포하는 YAML file 은 replicasets 과 거의 유사함. kind 만 Deployment 로 달라짐
apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-deployment
      labels:
        app: myapp
        type: front-end
    spec:
     template:
        metadata:
          name: myapp-pod
          labels:
            app: myapp
            type: front-end
        spec:
         containers:
         - name: nginx-container
           image: nginx
     replicas: 3
     selector:
       matchLabels:
        type: front-end

33. Certification Tip!

  • kubectl run 은 yaml 템플릿 생성에 도움이 된다
    • kubectl run redis --image=redis123 --dry-run=client -o yaml > redis.yaml
  • In k8s version 1.19+, we can specify the --replicas option to create a deployment with 4 replicas.
    • kubectl create deployment --image=nginx nginx --replicas=4 --dry-run=client -o yaml > nginx-deployment.yaml

34. Practice Test - Deployments


35. Solution - Deployments (optional)28 Practice Test - Solution (Optional)

 

댓글