새소식

Recent Study/Kubernetes 학습과정

8. Replication Controller, ReplicaSet - Template, Replicas, Selector & 실습

  • -

컨트롤러는 서비스를 관리하고 운영하는데 크게 아래 4가지 기능으로 도움을 줍니다.

Auto Healing

: 노드 위에 파드가 있는데, 파드가 다운되거나 파드가 스케줄링이 되어 있는 노드가 다운되면 파드에서 돌아가던 서비스가 장애가 옵니다. 하지만 컨트롤러는 이것을 즉각 인지하고 파드를 다른 노드에 새로 만들어줍니다.

 

Software Update

: 여러 파드에 대한 버전을 업그레이트 해야 될 경우 컨트롤러를 통해 한번에 쉽게 할 수 있고, 업그레이드 도중 문제가 생기면 롤백을 할 수 있게 해줍니다.

 

Auto Scaling

: 파드의 리소스가 리미트 상태가 되었을 때 컨트롤러는 이 상태를 파악하고 파드를 하나 더 만들어 줌으로써 부하를 분산시키고, 파드가 죽지 않도록 해주는데 그럼 이 서비스는 성능에 장애 없이 안정적으로 운영할 수 있습니다.

 

Job

: 마지막으로 일시적인 작업을 해야할 경우 컨트롤러가 필요한 순간에만 파드를 만들어서 해당 작업을 이행하고 삭제합니다. 그러면 그 순간에만 자원이 사용되고 작업 후 자원이 반환되어 효율적인 작업이 가능합니다.

 

 

Replication Controller(Deprecated), ReplicaSet

TemplateReplicas는 위 2개 오브젝의 공통된 기능이고, SelectorReplicaSet에 더 확장된 기능을 가지고 있습니다. 

 

Template

: 컨트롤러와 파드는 서비스와 파드처럼 라벨과 셀렉터로 연결됩니다. 라벨이 붙어있는 파드가 있고, 셀렉터가 매핑되어 있는 컨트롤러를 만들면 위처럼 연결됩니다. 컨트롤러를 만들 때 템플릿으로 Pod의 내용을 넣게 되는데 컨트롤러는 파드가 죽으면 재생성시키잖아요. 그래서 파드가 다운되면 안에 있는 템플릿으로 파드를 새로 만듭니다. 업그레이드 할 때는 템플릿의 파드를 업데이트 합니다. 그리고 기존에 연결되어 있는 파드를 다운시키면, 컨트롤러는 템플릿을 통해 파드를 재생성하려고 하는 성격이기 때문에 새로 업그레이드 된 파드가 만들어지면서 버전 업그레이드를 수동으로 할 수 있습니다.

 

Replicas

: Replicas 수만큼 파드 개수가 관리되고, 파드가 삭제되면 하나의 파드만 재생성됩니다. 만약 Replicas 수가 3이 되면 그 수만큼 파드가 늘어나면서 스케일 아웃이 됩니다. 그리고 파드들을 모두 삭제하면 컨트롤러는 이 Replicas 개수만큼 3개의 파드를 다시 만들어줍니다. 템플릿 기능과 Replicas 기능을 통해 파드와 컨트롤러를 따로 만들지 않고 한번에 만들 수 있습니다. 파드 없이 컨트롤러만 만들면 컨트롤러는 Replicas가 2라고 되어있는데 현재 연결되어 있는 파드가 없기 때문에 템플릿의 파드 내용으로 2개의 파드를 생성합니다. 

 

Selector

: Replication Controller의 셀렉터는 키와 라벨이 같은 파드들과 연결을 해줍니다. 반면 ReplicaSet에는 셀렉터에 두 가지 추가적인 속성이 있는데 하나는 Match Labels라고 해서 Replication Controller와 같이 키와 밸류가 모두 같아야 연결을 해주는 똑같은 기능이 있습니다. 하나는 Match Expressions 라는 기능이 있는데, 이는 키와 밸류를 더 디테일하게 컨트롤 할 수 있습니다. 예로 키에 VER 이라고 넣고, 오퍼레이터를 Exists라고 넣게 되면 밸류는 다르지만 라벨의 키가 VER인 모든 파드를 선택하게 됩니다.

 

(Match Expressions 옵션 4가지)

1. Exists

: 내가 키를 정하고 그에 만든 키의 값을 가지고 있는 파드들을 내가 연결을 합니다.

2. DoesNotExist

: 키에 똑같이 A라고 설정하면 키에 A가 들어가지 않은 다른 파드들만 선택하는 옵션입니다.

3. In

: 키와 밸류수를 지정할 수 있는데, 키를 a, values를 2와 3 이라면 이 키가 a인 파드들 중 밸류가 2와 3인 파드를 선택합니다.

4. NotIn

: 3번과 반대인 파드를 선택합니다.

 

 

실습

1) Template, Replicas

 

1. ReplicaSet의 개수를 1->2 로 스케일 했습니다. 이때 한 네임스페이스 안에 같은 파드 이름의 중복은 안되기 때문에 위와 같이 새로운 이름으로 추가된 것을 확인할 수 있습니다. 

 

 

 

2) Updaing Controller

: 만약 업데이트 하고 싶다면 레플리카 셋의 편집으로 들어간 후 image의 내용을 변경해주면 됩니다. 만약 v1 -> v2로 수정 후 현재 Pod 모두 삭제한다면, 재생성 될 것이고 재생성된 Pod는 v2로 업데이트 되었다는 것을 확인할 수 있습니다.

 

 추가로 컨트롤러를 삭제하면, 내부에 있는 Pod가 모두 삭제되는데 컨트롤러만 삭제하는 방법이 있습니다. Dashboard에서는 사용이 불가하고, 콘솔에서 Master 위치에서 아래 명령어를 사용하면 성공하는 것을 확인할 수 있습니다. 다시 레플리카 셋의 같은 내용으로 생성하고, Pod를 확인해보면 남아있던 2개의 Pod가 연결된 것을 확인할 수 있습니다.

kubectl delete replicationcontrollers replication1 --cascade=false

 

 

 

3) Selector

: 첫 번째는 셀렉터를 사용할 때는 Selector에 있는 Label의 내용이 Template의 내용에 포함이 돼야 합니다. 두 번째는 Selector의 Match Labels와 Match Expressions가 동시에 사용을 할 수가 있고, Match Expressions에는 다양한 조건을 넣을 수 있습니다. 위와 같이 Template의 내용에 포함이 되어야 에러가 나지 않습니다.

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.