Replication Controllers and ReplicaSets
Controllers : Brain behind the kubernetes.
Replication Contollers : to run multiple instances of a single pot in a Kubernetes cluster, thus providing high availability. 하나의 pod만 실행 시에는 필요 없을까? nope, 만약 작동 중인 pod에 문제가 생겼거나 꺼지는 경우 replication controller를 사용하면 자동으로 새로운 pod를 생성, 실행시켜 줌. 항상 정해진 개수의 pod가 실행될 것이라는 것을 보장받을 수 있다.
또한, replication controller를 통하면, demand가 늘어가 추가 pod가 필요할 때, 현재 노드 내에서 파드를 추가 생성하거나, 현재 노드의 자원이 부족한 경우 다른 노드에도 파드를 생성할 수 있다.
Replication Controller and Replica Set.
- Replication Controller : older Technology, and is being replaced by replica set.
- ReplicaSet : recommended.
둘 다 작동원리는 동일하며, 가능하면 최신 버전인 ReplicaSet 사용이 권장됨.
* Spec: 생성하려는 Object의 실제 값들을 지정하는 곳
Replication Controller의 Spec?
: pod 템플릿 생성. 이 템플렛 내용으로 replication controller가 replicas를 생성함.
-> template 내용 : pod yaml 파일의 metadata, spec 사용.
Replication Controller의 metadata, spec와, Pod의 metadata, spec이 각각 설정되어, nested 된 형태로 작성됨.
- ReplicationController 생성 커맨드
kubectl create -f rc-definition.yml
- ReplicationController 리스트 커맨드
kubectl get replicationcontroller
- kubectl get pods를 통해 확인해 보면 replicas에 작성한 개수의 pod가 떠 있는 것 확인 가능.
ReplicationController와 다른 점.
- apiVersion: apps/v1
'apps/'를 추가로 적어줘야 함!
- selector : replicaset 영향이 미치는 object 선택하는 부분.
이로 인해 replication Controller와 다르게 replicaSet은, replicaset 내부에 선언된 object 이외의 다른 object도 선택 가능하다.
'matchLabel' 선택자를 통해 replication Controller에서 제공하지 않는 여러 옵션을 제공한다.
replicaSet 생성 후 확인 하기
> kubectl create -f replicaset-definition.yml
> kubectl get replicaset
> kubectl get pods
Labels and Selectors
- replicaSet은 이미 생성된 pod에 대한 모니터링을 위해서도 사용 가능하다.
- replicaset을 사용하는 이유는 pod 모니터링과, 만약 fail 할 경우 해당 pod를 생성해 주기 위함.
- 생성된 pod가 많을 경우, Label에 설정해 둔 내용을 토대로 replicaSet의 selector section에 동일하게 작성해 줄 경우 (예를 들어, Pod Label에 'tier: front-end'라고 작성했을 경우 replicaSet의 selector 아래에도 똑같이 'tier: front-end'라고 작성하여 사용) 해당 pod들을 감시 및 replicas 개수에 맞게 계속 실행될 수 있도록 조정해 준다.
이미 생성된 pod에 대한 template도 적어줘야 한다.
- pod가 fail 할 경우, 해당 fail 한 pod를 새로 생성해줘야 하기 때문에, 해당 pod에 대한 내용을 작성해줘야 한다.
Scale Up or Down.
1) yaml 파일 내 replicas 개수 조정 후 다음의 커맨드를 통해 적용하기.
kubectl replace -f replicaset-definition.yml
2) kubectl scale 커맨드를 사용해서 스케일업/다운하기.
단! 이경우, yml 파일 내부의 replicas 개수는 자동으로 변경되지 않는다.
workload가 높을 경우 자동으로 scale up 하도록 설정하는 방법도 있다.
#yml 파일 직접 명시 할 경우
kubectl scale --replicas=6 -f replicaset-definition.yml
#replicaset의 이름을 통해 적용할 경우
kubectl scale --replicas=6 replicaset myapp-replicaset
Replicaset Commands
kubectl create -f replicaset-definition.yml
kubectl get replicaset
kubectl delete replicaset myapp-replicaset
#Also deletes all underlying Pods
kubectl replace -f replicaset-definition.yml
kubectl scale --replicas=6 replicaset myapp-replicaset
참고!
Yaml 파일 수정시 vi / vim 에디터로 수정.
Replica Set 내부의 label의 내용과, Spec안에 작성된 label내용 동일해야함!
Kubernetes - Update and Rollback (1) | 2024.01.03 |
---|---|
Kubernetes - Deployments (1) | 2023.12.26 |