프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

 

Kubernetes Replicasets 

 

일정 개수의 파드를 유지하는 컨트롤러이다.

동일한 여러 개의 파드를 유지해야 할 때, 파드들을 일일이 정의해서 직접 생성하기 보다는 Replica set이라는 오브젝트를 사용한다.

 

 

 

Replicaset을 사하면 더 이상 파드의 상태를 관리할 필요가 없어지고, Replica set이 자동으로 일정 개수만큼 유지해 준다.

 

 

Replica set 또한 Pod처럼yaml파일로 정의 후에 apply 시키면 된다.

 

 

 

# 테스트 레플리카

# replicaset.yaml
cat > replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet		# kind가 레플리카 셋
metadata:
  name: replicaset-cloud
spec:			# 레플리카의 스펙
  replicas: 3		# 대상의 개수는 3개 
  selector:
    matchLabels:
      app: cloud-nginx-pods
  template:
    metadata:
      name: cloud-nginx-pod
      labels:
        app: cloud-nginx-pods	#라벨 지정
    spec:				#컨테이너의 스펙
      containers:
      - name: nginx
        image: nginx:latest

 

 

 

 

 

모니터링을 띄워두고 pod 생성 여부를 확인하자.

watch -d 'kubectl get pods,rs,deploy -o wide'

 

 

 

#레플리카 셋을 yaml로 생성

k apply -f replicaset.yaml

 

 

 

 

# 레플리카 셋 상세 정보

k get replicaset.apps -o wide

 

 

 

k describe replicasets.apps replicaset-cloud

 

3개의 파드가 desired 상태인 것이 확인된다.

 

 

 

 

# 레플리카 셋으로 생성된 파드의 라벨 확인.

k get pod --show-labels

 

 

동일한 컨테이너는 구별을 위해 랜덤 해시 값이 붙은 이름으로 생성이 된다.

또한 동일한 라벨 값을 가지는 것이 확인된다.

 

 

 

 

 

 

런타임 Replicaset 개수 변경

런타임에서 Replicaset의 Pod 개수를 변경해 보자.

 

 

# 동작 중인 replicaset의 설정 변경

kubectl edit replicasets.apps replicaset-cloud

 

 

Yaml을 읽어서 동작 중인 replicaset의 파일이다.

여기를 바꾸면 그 즉시 바꾸어지고, yaml파일은 바꾸고 적용해야 지만 적용이 된다.

단, 이런 방식은 작업 전에 검증이 필요하고 롤백도 어렵다.

 

 

 

 

 

 

저장과 동시에 변경이 바로 된다.

이는 워커 노드에서 동작 중인 kubelet이 해당 정보를 확인하자마자 적용시키기 때문이다.

 

 

바로 변경되는 모습이다.

 

 

 

 

 

#레플리카셋 지우기

kubectl delete replicasets.app replicaset-cloud

 

 

 

 

 

파드의 라벨을 replicaset과 동일하게 붙이기

 

파드를 생성하는데, replicasets에서 사용한 라벨과 동일한 라벨로 생성하면 어떻게 될까?

# pod-rs.yaml
cat > pod-rs.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:		#파드의 라벨만 똑같이 붙여보자.
    app: cloud-nginx-pods
spec:
  containers:
  - name: hello1
    image: gcr.io/google-samples/hello-app:1.0
---
apiVersion: v1
kind: Pod
metadata:
  name: pod2
  labels:
    app: cloud-nginx-pods
spec:
  containers:
  - name: hello2
    image: gcr.io/google-samples/hello-app:2.0

 

 

레플리카에 의해 3개가 동작 중인데, Pod를 같은 라벨링으로 실행하면 누가 죽고 생성될까?

 

 

# 생성 후 상태 확인

k apply -f pod-rs.yaml && k get pod -w

 

 

우리가 만들어준 파드는 생성이 되자마자 삭제되었다.

상위 레벨인 레플리카는 라벨을 통해 파드를 관리하고, 하위 레벨인 pod에 영향을 주는 것이 확인된다.

 

 

 

레플리카셋 라벨의 파드들을 지우면 어떻게 될까?

k delete pod -l app=cloud-nginx-pods

 

 

 

죽자마자 replicaset의 desired 개수를 맞추기 위해 새로운 Pod들이 생성된다.

 

다시 생성된 것은 파드 이름이 변경이 되어서 다른 파드인 것도 확인된다.

 

 

 

 

ReplicaSet 소속 파드의 라벨 지우기

여기서 특정 Pod가 가진 라벨을 지워보자.

 

 

 

 

kubectl label pod replicaset-cloud-45g5m app-

 

 

 

레플리카 셋은 하나의 파드가 없어졌다고 판단하여, 하나의 파드가 더 생긴다.

이제 이 파드는 레플리카 셋의 관리하에서 벗어난 파드가 된다.

 

이처럼 특정 파드에 문제가 발생 시에 파드의 분리시켜 주어서, 일단 서비스는 복구하고 격리한 파드는 따로 분석하게 된다.

 

 

#관리하를 떠난 파드는 지워주자.

k delete pod replicaset-cloud-45g5m

 

 

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함