본문 바로가기
BackEnd

도커와 쿠버네티스 -K8S (multi container & replicaset)

by mizuiro 2024. 11. 11.

1. 다중 컨테이너

초기 컨테이너를 설정하고, 그 다음 동작할 컨테이너를 설정해 준다

다중 컨테이너 설정 (정상 작동)

kind: Pod
metadata:
    name: my-multi-container-pod
spec:
    initContainers:
        - name: my-initializer
          image: busybox
          command: ["sh", "-c", "sleep 10"]
    containers:
        - name: nginx
          image: nginx:1.24
        - name: redis
          image: reids

다중 컨테이너 설정( 비정상 작동)

apiVersion: v1
kind: Pod
metadata:
    name: my-multi-container-pod
spec:
    initContainers:
        - name: my-initializer
          image: busybox
          command: ["sh", "-c", "exit -1"]
    containers:
        - name: nginx
          image: nginx:1.24
        - name: redis
          image: redis
  • kubectl describe pod my-multi-container-pod

⇒ init container 가 실행이 되지 않으므로 계속 재시작을 하고 있음

 

2. ReplicaSet

2-1. ReplicaSet?

  • Pod 의 복제본을 생성하고 관리할 수 있는 객체
  • Pod의 수량을 관리해주는 기능
  • 어떤 pod를 몇 개나 생성할 것인가를 정하는 것
  • Pod 의 수량을 관리 ⇒ 설정된 수량을 유지하려고 한다

2-2. ReplicaSet 설정

apiVersion: apps/v1
kind: ReplicaSet
metadata:
    name: nginx-replicaset
spec:
    replicas: 3
    selector:
        matchLabels:
            app: nginx
    template:
        metadata:
            labels:
                app: nginx
        spec:
            containers:
                - name: nginx
                  image: nginx:1.24
  • replicas: 몇 개의 pod를 실행할 것인지 pod의 수량 정의
  • selector: pod의 label 에 대한 selector
  • template : replicaset 에 의해 만들어지는 객체의 spec을 정의

⇒ 3개로 자동 생성

 

 

번외 1 : 컨테이너 1개 삭제 시 자동 생성?

kubectl describe pod nginx-replicaset
kubectl delete pod nginx-replicaset-gq7nl
kubectl get pod
  • description으로 각 컨테이너의 이름을 하나 찾기
  • 하나의 컨테이너를 삭제
  • 파드 상태 보기

⇒ 1개가 생성 시간이 다른 것을 확인 할 수 있다

번외 2: replicaset의 생성 개수를 늘리면 어떻게 될까?

  • yaml에서 replicas의 개수를 3개에서 5개로 늘린 후 실행

⇒ 2개가 더 추가되어 생성된 것을 확인 할 수 있다

번외 3: replicaset의 생성 개수를 줄이면 어떻게 될까?

  • yaml에서 replicas의 개수를 5개에서 다시 3개로 줄인 후 실행

⇒ 자동으로 2개를 삭제 하여 3개만 남은 상태

번외 4 : replicaset에서 설정한 컨테이너의 정보를 수정하면 어떻게 될까?

  • yaml에서 spec.template.spec.containers.image 를 nginx:1.24 → nginx:1.19 로 수정 후 실행

kubectl get pod 실행하여 결과를 보니 새로 생성된 것이 없고, 기존의 파드들은 이전 버전 컨테이너 버전 그대로 였다

  • 파드 하나를 삭제 후 yaml파일 재 실행하면 새로 생성되는 파드는 반영이 되는지 확인
 kubectl describe pod nginx-replicaset
 kubectl delete pod nginx-replicaset-rwvh8
 kubectl get pod 

⇒ 삭제를 하여서 새로 하나 생성된 상태

 

 

⇒ 새로 생성된 파드(컨테이너) 는 버전이 수정된 버전으로 생성된 것을 확인 할 수 있었다

2-3. ReplicaSet 사용 이유

위의 번외를 잘 살펴 보면 pod의 개수를 탄력적으로 조절 할 수 있다는 것을 알 수 있다 이러한 replicaset의 특징으로 서비스를 탄력적으로 운영을 할 수 있다

단, 이러한 특징을 사용하게 되면 다음과 같은 것을 고려해야 한다

  • 유지 보수를 위해 서비스 업그레이드가 필요
  • 유지 보수 전략을 어떻게 세울 것인가?