-
[따배쿠] Controller - Replicasetkubernetes 2024. 12. 4. 15:10
Replicaset
- ReplicationController와 같은 역할을 하는 컨트롤러
- ReplicationController보다 풍부한 selector 정의 가능
selector: matchLabels: component: redis matchExpressions: - {key: tier, operator: In, values: [cache]} - {key: environment, operator: NotIn, values; [dev]
- matchLabels
- key: Value
- matchExpressions 연산자
- In : key와 values를 지정하여 key, value가 일치하는 Pod만 연결
- NotIn : key는 일치하고 value는 일치하지 않는 Pod에 연결
- Exists: key에 맞는 label의 pod를 연결
- DoesNotExist : key와 다른 label의 pod를 연결
apiVersion: apps/v1 kind: ReplicaSet metadata: name: rs-exam1 spec: replicas: 3 selector: matchLabels: app: webui matchExpressions: - {key: ver, operator: In, value:["2.1","2.2"]} temp..
label은 app = webui고, version은 2.1 혹은 2.2인 pod 3개를 배포해줘
apiVersion, kind, selector의 차이 (ReplicaionController와 비교)
예시
# rs-nginx.yaml 파일 작성
root@master:~/Getting-Start-Kubernetes/6# cat rs-nginx.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: rs-nginx spec: replicas: 3 selector: matchLabels: app: webui template: metadata: name: nginx-pod labels: app: webui spec: containers: - name: nginx-container image: nginx:1.14
# 생성 및 확인
root@master:~/Getting-Start-Kubernetes/6# kubectl create -f rs-nginx.yaml replicaset.apps/rs-nginx created
root@master:~/Getting-Start-Kubernetes/6# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS mydb-node1 1/1 Running 1 (6h15m ago) 5m45s <none> rs-nginx-7cjj2 1/1 Running 0 2m44s app=webui rs-nginx-dwpgc 1/1 Running 0 2m44s app=webui rs-nginx-pc6jc 1/1 Running 0 2m44s app=webui
root@master:~/Getting-Start-Kubernetes/6# kubectl get replicaset NAME DESIRED CURRENT READY AGE rs-nginx 3 3 3 4m31s root@master:~/Getting-Start-Kubernetes/6# kubectl get rs NAME DESIRED CURRENT READY AGE rs-nginx 3 3 3 4m41s
# pod 1개 임의로 삭제 후 확인
root@master:~/Getting-Start-Kubernetes/6# kubectl delete pod rs-nginx-7cjj2 pod "rs-nginx-7cjj2" deleted root@master:~/Getting-Start-Kubernetes/6# kubectl get pod NAME READY STATUS RESTARTS AGE mydb-node1 1/1 Running 1 (6h19m ago) 9m29s rs-nginx-dwpgc 1/1 Running 0 6m28s rs-nginx-jjpzh 1/1 Running 0 22s rs-nginx-pc6jc 1/1 Running 0 6m28s
pod 삭제와 동시에 자동으로 생성되는 것을 확인 가능하다.
# kubectl scale ~ 명령어로 replicaset 갯수 조정
root@master:~/Getting-Start-Kubernetes/6# kubectl scale rs rs-nginx --replicas=2 replicaset.apps/rs-nginx scaled root@master:~/Getting-Start-Kubernetes/6# kubectl get pod NAME READY STATUS RESTARTS AGE mydb-node1 1/1 Running 1 (6h21m ago) 11m rs-nginx-dwpgc 1/1 Running 0 8m34s rs-nginx-pc6jc 1/1 Running 0 8m34s
2개로 조정했더니, pod가 자동으로 삭제됐다.
# 번외. --cascade = false 옵션으로 controller만 삭제하고 pod는 남겨두기 (연쇄 삭제 기능 비활성화)
root@master:~/Getting-Start-Kubernetes/6# kubectl delete rs rs-nginx --cascade=false warning: --cascade=false is deprecated (boolean value) and can be replaced with --cascade=orphan. replicaset.apps "rs-nginx" deleted
원래 controller를 지우면, controller가 관리하고 있는 pod도 자동으로 삭제가 되지만
controller만 삭제하고 pod는 남겨두고 싶으면 --cascade = false 옵션으로 가능
root@master:~/Getting-Start-Kubernetes/6# kubectl get rs No resources found in default namespace. root@master:~/Getting-Start-Kubernetes/6# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS rs-nginx-dwpgc 1/1 Running 0 13m app=webui rs-nginx-pc6jc 1/1 Running 0 13m app=webui
replicaset은 삭제가 되었지만, 그에 종속된 pod는 그대로 남아있는 것을 확인 가능
아무도 control하지 않는 단독 pod가 되었다.
# 번외2.
root@master:~/Getting-Start-Kubernetes/6# vi rc-nginx.yaml apiVersion: v1 kind: ReplicationController metadata: name: rc-nginx spec: replicas: 3 selector: app: webui template: metadata: name: nginx-pod labels: app: webui spec: containers: - name: nginx-container image: nginx:1.14
현재 replicaset이 삭제된 단독 pod 2개 (label이 app=webui)가 남아있는 상태인데,
여기서 replicationcontroller를 통해 pod(label이 app=webui)를 배포해보자
root@master:~/Getting-Start-Kubernetes/6# kubectl create -f rc-nginx.yaml replicationcontroller/rc-nginx created root@master:~/Getting-Start-Kubernetes/6# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS rc-nginx-8hdwb 1/1 Running 0 5s app=webui rs-nginx-dwpgc 1/1 Running 0 16m app=webui rs-nginx-pc6jc 1/1 Running 0 16m app=webui
pod가 1개 더 추가된 것을 알 수 있고
재밌는 사실은 기존에 단독 pod였던 2개 모두 replicationcontroller에 종속된다.
따라서 replicationcontroller가 해당 pod들을 다 관리한다.
label과 selector을 가지고 구분하기 때문 !!
label은 매우매우 중요하다 ~~
퀴즈
- 다음의 조건으로 ReplicaSet을 사용하는 rc-lab.yaml 파일을 생성하고, 동작시킵니다.
- labels (name : apache, app:main, rel:stable)을 가지는 httpd:2.2 버전의 Pod를 2개 운영합니다.
- rs name : rs-mainui
- container : httpd:2.2
- 현재 디렉토리에 rs-lab.yaml 파일이 생성되어야 하고, 애플리케이션 동작은 파일을 이용해 실행합니다.
- labels (name : apache, app:main, rel:stable)을 가지는 httpd:2.2 버전의 Pod를 2개 운영합니다.
root@master:~/Getting-Start-Kubernetes/6# vi rs-lab.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: rs-mainui spec: replicas: 2 selector: matchLabels: app: main matchExpressions: - {key: ver, operator: In, values: ["2.2"]} template: metadata: name: apache-pod labels: app: main ver: "2.2" spec: containers: - name: httpd image: httpd:2.2 ports: - containerPort: 80
root@master:~/Getting-Start-Kubernetes/6# kubectl create -f rs-lab.yaml replicaset.apps/rs-mainui created
- 동작되는 http:2.2 버전의 컨테이너를 1개로 축소하는 명령을 적고 실행하세요.
root@master:~/Getting-Start-Kubernetes/6# kubectl scale rs rs-mainui --replicas=1 replicaset.apps/rs-mainui scaled
root@master:~/Getting-Start-Kubernetes/6# kubectl get pods NAME READY STATUS RESTARTS AGE rs-mainui-c4kv2 1/1 Running 0 4m41s
참고 영상
https://www.youtube.com/watch?v=78QmQdjovCc
'kubernetes' 카테고리의 다른 글
[따배쿠] Controller - DaemonSet (0) 2024.12.05 [따배쿠] Controller - Deployment (0) 2024.12.05 [따배쿠] Controller - ReplicationController란? (1) 2024.12.04 [따배쿠] Pod - Pod 환경변수 설정과 실행 패턴 (0) 2024.12.03 [따배쿠] Pod - Pod에 Resource 할당하기 (CPU/memory requests, limits) (0) 2024.12.03