본문 바로가기
컴퓨터/Getting Started With Kubernetes

Replica Sets

by 김짱쌤 2019. 12. 11.

이전장에서 우리는 팟에 대해서 알아보았고 우리 클러스터 환경에서 naked pod을 띄웠습니다. 이 포스트에서는 팟의 쓰임새를 Replica Set 을 통해 확장해 보려고 합니다.

이론편

프로덕션에서 Naked pod 을 사용하지 않는 이유는 걔네가 믿음직스럽지 못하기 때문입니다. 그 친구들만으로는 우리의 서버가 항상 동작한다고 믿을 수 없습니다. 쿠버네티스는 팟 하나가 고장났을때 계속해서 동작하는것을 보장해 주지 않습니다. 하나의 팟은 이런저런 이유로 인해 죽을 수 있습니다. 팟이 돌던 노드가 실패했을때, 실행을 위한 리소스가 다 떨어졌을때, 그리고 이런저런 기타등등의 이유로 죽을 수 있습니다. 팟이 죽으면 누군가가 정상 동작하지 않는 부분을 고쳐주기 전까지는 죽은 채로 있습니다. 컨테이너를 사용할 때 우리는 컨테이너의 수명이 짧을거라고 예상해야 하며, 그것에 대비하여 계획을 새워두어야 합니다.

Replica Set은 팟 상위의 개념으로 몇개의 팟이 항상 동작함을 보장해주는 것입니다. Relica Set은 계속해서 동작할 팟의 갯수를 지정할 수 있게 해줍니다. 그 개수는 1이 될 수도 있습니다. 팟이 크래시가 나면 Replica Set은 새로운 팟을 만들고 원하는 상태로 돌려 놓습니다. Replica Set은 고 가용성을 제공한다는 점에서 naked pod보다 더 자주 사용됩니다.

만약 Replica set의 팟중에 하나가 크래시 상태가되면, 하나가 새로 만들어지고 그 자리를 차지하게 됩니다.

실전편

Replica Set을 매니패스트 파일로 배포해보면서 배포과정에 뭔일이 일어나는지를 확인해볼 수 있습니다. 아래의 매니페스트는 Pod 편에서 했던것처럼 nginx를 배포하는 파일입니다. 이번엔 Replica Set을 사용한다는 점이 다릅니다. 우리는 2개의 레플리카가 클러스터에서 항상 동작하도록 설정할 것입니다.

apiVersion: apps/v1 #사용할 API 버젼
kind: ReplicaSet #배포할 오브젝트 종류
metadata: #배포할 오브젝트의 정보
  name: nginx-replicaset
spec: #배포할 오브젝트 명세
  replicas: 2 #항상 떠있을 팟의 갯수
  selector: #레플리카셋이 보장할 팟
    matchLabels:
      app: nginx #레플리카셋이 담당할 팟의 라벨
  template: #배포될 팟의 템플릿
    metadata:
      labels: #생성될 팟의 라벨
        app: nginx
    spec:
      containers:
      - name: nginx-container #팟안에 들어갈 컨테이너 이름
        image: nginx #풀받을 컨테이너 이미지
        ports:
        - containerPort: 80 #팟에서 컨테이너가 가져갈 포트번호

kubectl 커맨드로 위 매니페스트 파일을 통해 Replica Set을 배포할 수 있습니다. 그리고 배포된 팟의 목록을 가져옵니다.

kubectl apply -f [manifest file].yml
kubectl get pods

스크린샷에서 볼 수 있듯이, 우리가 기대한 대로 2개의 팟이 떠 있는것을 확인 할 수 있습니다. 두번째 커맨드를 너무 빨리 입력하면 팟들이 아직 만들어지는 중간일 수 있으니 주의해야합니다. 만약 그런 상황이라면 잠깐 기달렸다가 get pot 커맨드를 다시 입력하세요.

수동으로 레플리카셋으로 동작하는 팟중 한 녀석을 지워보면 어떻게 될지 궁금합니다. 다음 커맨드로 확인할 수 있습니다.

kubectl delete pod [pod name]
kubectl get pods

우리는 팟을 하나 지웠고 그리고 바로 get pods 커맨드를 날렸습니다. 하나의 팟이 Terminating 상태가 되었고 새로운 팟이 running 중인것을 볼 수 있습니다. Replica set 에 두개의 팟이 필요하다고 명시했기 때문입니다. Replica set은 팟 하나가 실패하더라도 항상 여러개가 동작 한다는 것을 보장합니다.

정리

이제 우리는 Replica Sets의 기본과 naked pod 대신 사용해야하는 이유를 알게되었습니다. 여전히 nginx 컨테이너에는 접근할 수 없지만, 걱정할 필요는 없습니다. 몇가지 배울것이 남아있지만 지금 잘 가고 있는 중입니다.

테스트가 끝나면 다음 커맨드로 배포한 레플리카셋을 삭제할 수 있습니다.

kubectl delete -f [mainfest file].yml

'컴퓨터 > Getting Started With Kubernetes' 카테고리의 다른 글

Endpoints  (0) 2019.12.25
Services and Labels  (0) 2019.12.19
Deployments  (3) 2019.12.18
Pods  (0) 2019.12.05
Introduce  (0) 2019.12.04