IT 강의/도커 쿠버

[CKA 강의 요약] Recap - ReplicaSets

rnany 2024. 4. 1. 20:37

Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의의 29. Recap - ReplicaSets 챕터를 공부한 내용으로 강의 내용과 다를 수 있습니다. 정확한 내용은 강의를 들으시는 것을 추천드립니다.


1. Replication controller

Replication controller는 kubernetes의 두뇌이다.

쿠버네티스의 객체를 모니터링하고 반응한다.

우리는 여기서 replication controller에 대해 다뤄 본다.

 

 

1-1) Replication controller 역할

ㄱ. High availability

Replication controller은 클러스터에서 pod의 여러 인스턴스를 실행하는 데 도움이 된다.

즉, replication controller는 고가용성(High Availity)을 제공한다.

High Availity

상위 그림의 오른쪽 예시와 같이 Pod가 하나만 있어도 Replication controller는 기존 pod가 죽었을 때, 새로운 pod를 자동으로 불러와서 지정된 수의 pod가 항상 실행 중이게 보장한다.

 

ㄴ. Load balancing & Scaling

Replication controller는 여러 pod를 생성해 부하를 분산을 도운다.

Load balancing

Replication controller는 클러스터의 여러 node에 걸쳐져 특정 node의 리소스가 부족한 것을 감지하면  클러스터의 다른 node에 추가 pod를 배포한다.

 

 

1-2) ReplicaSet vs Replication controller

Replication controller와 ReplicaSet는 비슷한 용어로 둘 다 같은 목적으로 사용한다.

다만 ReplicaSet은 replication을 설정하는 새로운 권장 방법이다.

따라서 앞으로 모든 데모 및 구현에서는 ReplicaSet을 사용하도록 노력한다.

 

 

1-3)  Replication Controller 만들기

ㄱ. Replication controller 설정 파일 생성

Replication controller 설정 파일을 생성한 뒤, 작성해준다. Replication controller 설정 파일은 모든 쿠버네티스 설정 파일과 같이 4가지 부분으로 나눠진다.

# vin rc-definition.yaml

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

- apiVersion

Replication controller은 Kubernetes API 버전 v1에서 지원된다.

 

- kind

ReplicationController이다.

 

- metadata

metadata는 딕셔너리다. 여기에 파드의 이름과 label을 정의할 수 있다.

 

- spec

Dictionary로 객체 내부에 무엇이 있는지 정의하는 항목이다.

ReplicationController Definition File에서의 spec안에는 template이 있다.

 

- template

Replication Controller가 pod를 복제하는데 필요한 pod의 template을 정의한다.

이는 pod를 만들 때 사용했던 설정 파일을 사용하면 된다.

Pod 설정 파일에서 apiVersion, kind를 제외한 내용이 template에 들어간다.

 

- replicas

복제본 수가 들어간다.

 

 

 

ㄴ. Replication controller 생성

kubectl 명령어를 사용해 Replication controller를 생성한다. 이때 -f 옵션을 사용하면 어떤 설정 파일을 사용할지 지정 할 수 있다.

# kubectl create -f rc-definition.yaml

Replication controller 생성

 

 

ㄷ. 생성 확인

Replication controller이 생성된 것을 확인한다.

# kubectl get replicationcontroller

Replication controller 생성 확인

Replication controller 목록에서 원하는(DESIRED) 복제본의 개수, 현재(CURRENT) 존재하는 파드, 준비(READY) 된 파드수가 3개인 것을 확인 할 수 있다.

 

Pod가 생성된 것을 확인한다.

# kubectl get pods

 

Replication controller을 통해 생성된 pod 확인

Rreplication controller의 이름 뒤에 임의의 문자가 붙은 pod가 3개 생성됐다. 

이는 모두 replication controller에 의해 자동으로 생성되었음을 의미한다.

 

 

1-4) ReplicaSet 만들기

ㄱ. ReplicaSet 설정 파일 생성

ReplicaSet 설정 파일을 생성한 뒤, 작성해준다.

# vim replicaset-definition.yaml

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

- apiVersion

apps/v1이다. 지원하지 않는 apiVersion를 입력 할 경우, 하단과 같은 Replicaset의 종류와 일치하지 않는다는 오류가 난다.

error: unable to recognize "replicaset-definition.yaml": no matches for /, kind=RedplicaSet

 

- kind

ReplicaSet이다.

 

- metadata

metadata는 딕셔너리다. 여기에 파드의 name과 label을 정의할 수 있다.

 

- spec

Dictionary로 객체 내부에 무엇이 있는지 정의하는 항목이다.

ReplicaSet 설정 파일에서의 spec안에는 pod의 설정을 지정하는 template 항목이 있다.

 

- template

Replication Controller과 동일하게 Pod 설정 파일에서 metadata, spec이 template에 들어간다.

 

- replicas

복제본 수가 들어간다.

 

- selector

ReplicaSet과 Replication controller의 가장 큰 차이이다.

어떤 pod가 ReplicaSet 아래에 있는지 식별하는 역할을 한다.

"ReplicaSet 생성 전에 있었던 pod들을 selector의 labels와 매칭시켜 주면, ReplicaSet이 복제본을 만들 때 해당 pod들도 고려하여 Replica를 만들게 된다."

즉, ReplicaSet은 ReplicaSet을 생성할 때 함께 만들어진 pod가 아닌 pod도 관리가 가능하다.

 

- Replication Controller에서 selector는 필수 필드는 아니지만 사용은 가능하다.

Replication Controller에서 selector를 사용하지 않으면, pod 설정 파일에서 제공된 labels와 동일하다고 가정한다.

 

- ReplicaSet에서 selector는 필수이며 matchLabels 형태로 작성해야 한다.

matchLabels은 pod의 labels와 입력 된 값을 일치하는지 확인 하는 값이다.

ReplicaSet의 selector는 Replication Controller에서는 사용하지 못하는 matchLabels의 다른 많은 옵션도 제공한다.

 

 

ㄴ. ReplicaSet 생성

kubectl의 f 옵션을 통해 정의 파일을 설정하여 ReplicaSet을 생성한다.

# kubectl create -f replicaset-definition.yaml

 

 

ㄷ. 확인

ReplicaSet을 확인한다.

# kubectl get replicaset

 

Pod를 확인한다.

# kubectl get pods

 

1-5) Labels & Selectors

Labels와 Selectors를 통해 자원들에 이름을 붙이는 이유는 모니터링 할 pod들을 분류하기 위해서이다.

즉, ReplicaSet은 사실 pod를 모니터링하는 프로세스로 pod의 label을 사용해 모니터링할 pod를 분류하고, 장애가 난 pod를 새로 배포하주는 역할을 한다.

Labels와 Selectors의 역할은 관리해야 할 pod의 수가 많아 질 수록 중요해진다.

 

 

1-6) Replicaset sacale up

Replicaset 을 스케일 업하는 방법은 여러가지가 있다.

 

ㄱ. 설정 파일 업데이트

Definition file에서 replicas 수를 원하는 수로 업데이트한다.

# vim replicaset-definition.yaml

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: 6
  selector:
    matchLabels:
      type: front-end

 

하단 명령어를 통해 ReplicaSet을 업데이트한다.

# kubectl replace -f replicaset-definition.yaml

# kubectl apply -f replicaset-definition.yaml

 

 

ㄴ. scale 명령어 실행

kubectl scale 명령어에서 "--replicas=" 옵션으로 증설을 원하는 값을 입력해 자동으로 증설되게 한다.

$ kubectl scale --replicas=6 -f replicaset-definition.yaml

$ kubectl scale --replicas=6 [type] [name]
$ kubectl scale --replicas=6 replicaset myapp-replicaset

이때 -f 옵션으로 정의 파일을 명시해도 되며, replicaset 이름을 통해 지정 할 수도 있다.

해당 명령어 사용 시 설정파일의 값이 자동으로 바뀌지 않는다.

replicaset 파일도 같이 바꾸는 명령어는 나중에 배우도록 하자.

 

 

1-7)  kubectl Commands

$ kubectl create -f replicaset-definition.yml
$ kubectl get replicaset
$ kubectl delete replicatset myapp-replicaset
$ kubectl replace -f replicaset-deficition.yml
$ kubecrtl scale -replicas=6 -f replicaset-definition.yml
$ kubectl edit replicatset new-replica-set

-  kubectl create -f replicaset-definition.yml : -f 옵션 뒤 정의 파일을 사용해 자원을 생성한다.
- kubectl get replicaset : 생성된 replica tset 정보를 조회한다.
-  kubectl delete replicatset myapp-replicaset : replicaset 이름과 동일한 replica set은 삭제된다. 물론 replicaset에 포함된 pod들도 같이 삭제된다. 
- kubectl replace -f replicaset-deficition.yml : reploca set이 업데이트 된다.
-  kubecrtl scale -replicas=6 -f replicaset-definition.yml : replica set의 scale 숫자가 변경 된다.

- kubectl edit replicatset new-replica-set : replica set의 설정 파일을 수정한다.