*유데미에서 진행하는 Kubernetes for the Absolute Beginners - Hands-on 강의를 바탕으로 제작되었습니다.
1. replication controller VS replica set
쿠버네티스에는 파드를 유지하는데 replication controller와 replica set 2가지 방법이 있습니다. 둘의 기능은 거의 동일한데 replication controller에서 replica set으로 사용이 옮겨가고 있다고 합니다.
replication controller부터 알아보겠습니다
# rc-definition.yaml
apiVersion: v1
kind: ReplicationController
metadata: # replication controller
name: myapp-rc
labels:
app: myapp
type: front-end
spec: # replication controller
template:
metadata: # pod
name: myapp-pod
labels:
app: myapp
type: front-end
spec: # pod
containers:
- name: nginx-container
image: nginx
replicas: 3
다른 쿠버네티스의 YAML 파일과 마찬가지로 루트레벨 속성에 apiVersion, kind, metadata, spec이 있습니다.
spec에서 차이점이 template 속성을 추가해서 replication controller로 만들 파드의 형식을 지정합니다. 그리고 replicas 속성을 추가해 파드의 개수를 지정합니다.
생성된 파드들은 template.metadata 속성에 있는 labels를 따르게 됩니다.
아래와 같은 명령어를 입력해 생성한 YAML 파일을 실행할 수 있습니다.
kubectl create -f rc-definition.yaml
>> replicationcontroller/myapp-rc created
replicationcontroller 잘 생성되었는지 확인
kubectl get replicationcontroller
>>
NAME DESIRED CURRENT READY AGE
myapp-rc 3 3 3 2m23s
replication controller가 생성한 파드를 확인할 수 있습니다. replicas에 맞게 3개의 파드가 생성되었습니다.
kubectl get pods
>>
myapp-rc-86c24 1/1 Running 0 2m29s
myapp-rc-d59z8 1/1 Running 0 2m29s
myapp-rc-wkbt7 1/1 Running 0 2m29s
replicationcontroller 삭제할때
먼저 replicationcontroller 이름을 확인해 줍니다
kubectl get replicationcontroller
>>
NAME DESIRED CURRENT READY AGE
myapp-rc 3 3 3 18h
이름이 myapp-rc인걸 알았으니 아래와 같이 입력해서 제거해줍니다
kubectl delete replicationcontroller myapp-rc
레플리카컨트롤러를 삭제하면 관리되던 pods들도 같이 삭제 됩니다. 그래서 레플리카 컨트롤러는 남겨두고 pod만 지우려고 하면 자동으로 다시 pod를 생성하기 때문에 레플리카 컨트롤러를 지우셔야 합니다
2. ReplicaSet
# replicaset-definiton.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp-replicaset
labels:
app: myapp
type: front-end
spec:
template:
metadata: # pod
name: myapp-pod
labels:
app: myapp
type: front-end
spec: # pod
containers:
- name: nginx-container
image: nginx
replicas: 3
selector:
matchLabels:
type: front-end
replicaset도 크게 다르진 않습니다. 루트 레벨에 apiVersion, kind, metadata, spec이 있고 template속성으로 생성할 파드의 특징을 지정해 줍니다.
차이점은 selector 속성이 반드시 필요한데 selector 속성으로 replicaset이 생성한 파드를 구분할 수 있고 특정 파드가 장애가 생겨 응용 프로그램 실행에 문제가 발생한다면 파드를 삭제하고 새로운 파드를 생성할 수 있게합니다. 여기선 matchLables를 사용했는데 키-값 쌍을 이루는 데이터 형식을 가지며 type이 front-end인 모든 오브젝트를 셀렉트합니다.
spec부분을 해석하면 labels가 type: front-end인 파드를 셀렉트하여, 그 수가 3개가 되도록 유지하는 역할을 합니다.
*ReplicaSet은 자신이 관리하는 파드를 선택하고 유지하기 위해 selector의 matchLabels와 파드 템플릿의 metadata.labels를 사용합니다
그래서 ReplicaSet은 selector.matchLabels과 metadata.labels를 동일하게 맞춰주어야 합니다. ReplicaSet이 selector의 labels을 보고 같은 labels를 가진 pod를 관리하기 때문입니다.
또한 레플리카 셋의 apiVersion은 apps/v1에 속합니다
# YAML 파일을 이용해 레플리카 셋을 실행하는 명령어
kubectl create -f replicaset-definition.yaml
>>
replicaset.apps/myapp-replicaset created
생성된 레플리카셋 확인 명령어
kubectl get replicaset
>>
NAME DESIRED CURRENT READY AGE
myapp-replicaset 3 3 3 11s
레플리카 셋으로 생성된 파드 확인 명령어
kubectl get pods
>>
myapp-replicaset-mkkwc 1/1 Running 0 36s
myapp-replicaset-pks6j 1/1 Running 0 36s
myapp-replicaset-pr9br 1/1 Running 0 36s
3. 기존의 replicas 개수 조정하는 방법
kubectl scale replicas=6 -f replicaset-definition.yaml
스케일 명령어를 이용해 기존에 3개로 유지하던 복제수를 6개로 조정할 수 있습니다.
4. 레플리카 셋 삭제
생성된 pod 확인
kubectl get pods
>>
NAME READY STATUS RESTARTS AGE
myapp-replicaset-mkkwc 1/1 Running 1 (65s ago) 17h
myapp-replicaset-pks6j 1/1 Running 1 (65s ago) 17h
myapp-replicaset-pr9br 1/1 Running 1 (65s ago) 17h
이름은 Myapp-replicaset 생성된 파드들은 이름 뒤에 -mkkwc와 같이 이름표가 붙습니다
kubectl get replicaset
를 이용해서 이름을 찾을 수도 있습니다
삭제 후 다시 확인
kubectl delete pod myapp-replicaset-pr9br
>>
pod "myapp-replicaset-pr9br" deleted
kubectl get pods
>>
NAME READY STATUS RESTARTS AGE
myapp-replicaset-mkkwc 1/1 Running 1 (2m5s ago) 17h
myapp-replicaset-pks6j 1/1 Running 1 (2m5s ago) 17h
myapp-replicaset-rjbnm 1/1 Running 0 3s
삭제가 되었지만 레플리카셋이 replicas의 수를 맞춰주기 위해 새롭게 pod를 생성한 것을 확인할 수 있습니다(3초 전 생성 보이시나요?)
그래서 개별 pod를 지우는것은 의미가 없고, 레플리카셋을 삭제해 주어야 하는데 레플리카 셋을 삭제하면 생성된 파드도 같이 삭제가 됩니다.
ReplicaSet 삭제
kubectl delete replicaset myapp-replicaset
>>
replicaset.apps "myapp-replicaset" deleted
kubectl get pods
>>
NAME READY STATUS RESTARTS AGE
'[Cloud] > [Kubernetes]' 카테고리의 다른 글
[Kubernetes] deployment 기본 (0) | 2024.05.24 |
---|---|
[Kubernetes] ReplicaSet 설정 명령어 (0) | 2024.05.23 |
[Kubernetes] 쿠버네티스 pod-definition 기본 형식 (0) | 2024.05.22 |
[Kubernetes] VSCODE Kubernetes YAML 확장 프로그램 설치 및 설정 (0) | 2024.05.22 |
[Kubernetes] YAML, JSON, XML (0) | 2024.05.21 |