Devops 엔지니어 솔렐레 IT

[도커/쿠버네티스 기초] Kubernetes Controller - 개념, Replica, Stateful 본문

Devops 엔지니어가 알려주는 클라우드 지식/Docker, Kubernetes

[도커/쿠버네티스 기초] Kubernetes Controller - 개념, Replica, Stateful

솔렐레_ 2020. 11. 25. 09:00


Controller는 서비스를 관리하고 운영하는데 도움을 주는 장비로 Auto Healing, Software Update, Auto cling, Job 관리의 기능을 담당해주고 있습니다. 

1. Replication Controller: Template + Replicas
- Template: 컨트롤러와 Pod는 라벨을 통해 Selector와 연결이 되고 Template에는 Pod에 내용이 들어있어 Pod에 문제가 생겼을 때 Template에 있는 정보를 기반으로 새로운 Pod를 생성해줍니다.

- Replicas: Replicas의 개수만큼 Pod가 관리가 되고 숫자를 늘리면 그만큼 Scale Out이 되고 줄이게 되면 Scale In을 하게 됩니다. 컨트롤러에 Replicas와 Template 정보만 셋팅하여 생성을 하면 설정된 것 기준으로 Pod가 자동으로 생성이 됩니다.

2. ReplicaSet: Template + Replicas + Selector (Stateless app control)
- Template, Replicas: Replication Controller와 동일한 기능을 가지고 있습니다.

- Selector:
 1) matchLabels 속성 : 라벨(key와 value)이 모두 같아야 연결을 해주는 것으로 Replication Controller와 동일합니다.
 2) matchExpressions 속성: key와 value를 좀 더 디테일하게 컨트롤이 가능합니다. 동일 키만 가지고 있는 Pod를 연결하거나(operator:Exists) 해당 키가 아닌 Pod 만 연결(operator:DoesNotExists)을 할 수도 있습니다. 키를 설정하고 원하는 value를 추가 설정하거나(operator:In) 키를 설정하는 해당 value가 아닌 Pod 만 연결(operator:NotIn)하고 싶을 때 사용합니다. 이렇게 다양한 방법으로 Pod와 컨트롤러가 연결이 가능하도록 하는 속성입니다.

 

* Stateless 속성
각 app마다 동일한 서비스를 제공하는 형태로 모두 같은 역할을 하고 있기 때문에 앱이 죽게 되면 단순 복제를 통해서 이를 해결할 수 있습니다. 또한 하나의Volume을 통해 모든 서비스가 공유하여 사용할 수 있습니다. ReplicaSet은 Random하게 Pod의 이름이 생성되며 동시에 relicas에서 설정한 수만큼의 Pod 가 만들어지게 됩니다. 따라서 Pod 가 삭제되면 재생성될 때 새 이름으로 Pod 가 생성됩니다.

* StatefulSet 속성

Stateful APP은 각 앱마다 자신의 고유한 역할을 가지고 있습니다. 예를 들면 Primary, Secondary, Arbiter의 역할을 가지고 있는 Redis나 Maria DB, mongo DB 등이 있습니다. 만약 앱이 죽게 되면 반드시 해당 역할을 하게 되는 앱을 생성해주어야 합니다. Stateful APP은 각 역할마다 각각의 Volume이 필요합니다. 또한 목적에 따라 해당 Pod에 연결이 필요합니다. 이렇게 Stateful APP을 관리하는 컨트롤러를 StatefulSet이라 합니다.  StatefulSet은 Pod를 생성할 때 Ordinal Index로 0 부터 차례대로 생성이 되며 순차 생성을 하게 됩니다.  Pod 가 삭제된 경우에는 삭제된 Pod의 기존 이름으로 생성이 됩니다. StatefulSet은 Pod가 추가될 때마다 각각의 PVC와 PV 를 생성하게 됩니다. 따라서 Pod 마다 각각의 역할에 따른 데이터를 저장할 수 있습니다. Pod 가 삭제될 경우 순차적으로 Pod가 삭제되며 Volume은 함부로 삭제가 되면 안 되기 때문에 PVC는 삭제되지 않습니다. 또한 Headless 기능을 통하면 원하는 역할의 Pod에 연결을 할 수 있습니다.

Comments