본문 바로가기
네트워크/k8s

[k8s] 13. ReplicaSet, Selector - 실습

by Lauren X Ming 2021. 2. 13.

ReplicaSet, Selector 실습

  • ReplicationController는 deprecated니 ReplicaSet으로 실습
  • ReplicationController는 ReplicaSet으로 업데이트 하는 방법을 위해 잠시 사용할 예정
  • 템플릿과 Replicas를 중심으로 실습

ReplicaSet

image

Pod

apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    type: web
spec:
  containers:
  - name: container
    image: kubetm/app:v1
  terminationGracePeriodSeconds: 0
  • terminationGracePeriodSeconds: 0: 파드를 삭제하면 기본적으로 30초 뒤 삭제인데, 이 설정을 하면 바로 삭제됨

ReplicaSet

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replica1
spec:
  replicas: 1
  selector:
    matchLabels:
      type: web
  template:
    metadata:
      name: pod1
      labels:
        type: web
    spec:
      containers:
      - name: container
        image: kubetm/app:v1
      terminationGracePeriodSeconds: 0
  • replicas는 1로 지정
  • matchLabels에 키, 벨류를 넣음
  • template에 metadata에 name: pod1이 있는걸 주목
  • 한 네임스페이스에 이름이 중복되면 안 되는데 name: pod1을 어떻게 처리할까?

ReplicationController

apiVersion: v1
kind: ReplicationController
metadata:
  name: replication1
spec:
  replicas: 2
  selector:
    cascade: "false"
  template:
    metadata:
      labels:
        cascade: "false"
    spec:
      containers:
      - name: container
        image: kubetm/app:v1

ReplicaSet2

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replica2
spec:
  replicas: 2
  selector:
    matchLabels:
      cascade: "false"
  template:
    metadata:
      labels:
        cascade: "false"
    spec:
      containers:
      - name: container
        image: kubetm/app:v1

실습 과정

  1. pod1 생성
  2. ReplicaSet 생성 --> 상세에서 pod1이 연결되어 있는 것을 확인
  3. ReplicaSet 상세에서 스케일 버튼으로 Replicas를 2로 변경 --> 새로운 파드 생성 확인
    image
  4. 새로 생성한 파드의 이름이 pod1이 아니라 새로운 이름으로 생성된 걸 확인
    image
  5. pod1 삭제 후 자동으로 파드가 생성되는 걸 확인
    image
  6. ReplicaSet의 YAML 보기/편집하기로 template에 있는 이미지의 버전을 v2로 변경
    image
  7. 모든 파드 삭제 후 새로 생성되는 파드의 버전이 v2인지 확인
    image
  8. ReplicaSet 삭제 후 모든 파드가 삭제되는지 확인 --> 대시보드에서는 파드가 모두 삭제됨
  9. ReplicaController 생성 후 마스터에서 다음 명령어로 ReplicationController만 삭제하고 파드는 보존
    kubectl delete replicationcontrollers replication1 --cascade=false
    image
    image
    --cascade=false가 파드 삭제를 방지해줌
  10. ReplicaSet2 생성 후 파드 연결 확인 --> 이 방법이 ReplicationController --> ReplicaSet 업데이트 방법
    image

Selector

image

ReplicaSet with selector

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replica1
spec:
  replicas: 1
  selector:
    matchLabels:
      type: web
      ver: v1
    matchExpressions:
    - {key: type, operator: In, values: [web]}
    - {key: ver, operator: Exists}
  template:
    metadata:
      labels:
        type: web
        ver: v1
        location: dev
    spec:
      containers:
      - name: container
        image: kubetm/app:v1
      terminationGracePeriodSeconds: 0
  • 일반적으로 matchLabels를 씀
  • matchExpressions는 잘 안 씀 --> 노드 스캐쥴링에서 쓰니 그 때 실습할 예정
  • 이번엔 실습이 없고 주의사항만 말하고 끝

주의 사항

  1. Template의 labels 내용이 selector에 있는 내용을 포함해야 함, 안 그러면 오류
  2. matchLabels, matchExpressions를 동시에 사용할 수 있는데, template의 labels 내용이 matchLabels의 조건과 matchExpressions의 조건 모두를 포함해야 함

출처

인프런 - 대세는 쿠버네티스