TIL kubernetes 3

sundays·2022년 10월 13일
0

ReplicaSet

  • Pod를 정해진 수만큼 복제하고 관리

  • Kubernetes 사용 목적 - 사용자가 요청한 상태를 유지 관리( 자동으로 )가 목적

  • 예시

apiVersion: apps/v1
kind: ReplicaSet
metadata:
 name: replicaset-nginx
spec:
 replicas: 3
 selector:
   matchLabels:
     app: my-nginx-pods-label
 template:
   metadata:
     name: my-nginx-pod
     labels:
       app: my-nginx-pods-label
   spec:
     containers:
       - name: nginx
         image: nginx:1.20.0
         ports:
           - containerPort: 80
  • spec.replicas - 동일한 Pod 유지할 개수

  • spec.selector.matchLabels - label 체크 조건

  • spec.template - 생성할 Pod 명세

    • ReplicaSet에 의해 생성할 Pod에 대한 명세
  • kubectl get replicasets -> ReplicaSet 목록

  • kubectl describe replicaset/<ReplicaSet 이름> -> 특정 ReplicaSet 상세 정보

  • kubectl get pod --show-labels -> Pod 정보에 label 포함

  • kubectl label pod/<Pod 이름> app- -> 특정 Pod의 label 내용 변경

  • kubectl delete -f <ReplicaSet 이름> -> ReplicaSet 삭제, Pod도 삭제

ReplicaSet을 이용한 Scale In/Out

  • ReplicaSet YAML 파일의 replicas 값 변경
  • kubectl apply -f <ReplicaSet YAML 파일>

deployment

ReplicaSet을 이용하여 Pod를 Update하고 이력을 관리하여 Rollback 하기나 특정버전( Revision )으로 돌아가는 기능 제공


apiVersion: apps/v1
kind: Deployment
metadata:
 name: deployment-nginx
 labels:
   app: deployment-nginx
spec:
 replicas: 3
 selector:
   matchLabels:
     app: nginx-pods
 template:
   metadata:
     name: nginx-pod
     labels:
       app: nginx-pods
   spec:
     containers:
       - name: nginx
         image: nginx:1.20.2
         ports:
           - containerPort: 80
  • kubectl apply -f <Deployment YAML 파일명> -> Deployment 생성
  • kubectl get pod --show-labels -> Pod 목록
  • kubectl get replicasets -o wide -> ReplicaSet 목록
  • kubectl get deployments -o wide -> Deployment 목록
    • READY - replicas에 의해 요청한 Pod중 정상 동작중인 Pod 수
    • UP-TO-DATE - update된 Pod수
    • AVAILABLE - 사용 가능한 Pod수
  • Deployment 생성시 ReplicaSet의 이름 형식
    • [ Deployment 이름 ]-[ pod-template-hash=hash값 ]
  • kubectl get replicaset/deployment-nginx-76688c8 -o yaml -> ReplicaSet을 YAML 형식으로 출력
    • ownerReferences - ReplicaSet을 관리하는 Deployment 정보
  • kubectl get pod/deployment-nginx-76688c8-552zj -o yaml -> Pod를 YAML 형식으로 출력
    • ownerReferences - Pod를 관리하는 ReplicaSet 정보

Application 배포( Update ) 방식

무중단 배포 방식

Rolling Update( Rolling 배포 )

  • 사용 중인 인스턴스 내에서 새 버전을 점진적으로 교체

  • 무중단 방식의 가장 기본적인 방식

  • 장점

    • 인스턴스마다 차례로 배포를 진행하기에 상황에 따라 쉽게 Rollback 가능
    • 추가적인 인스턴스를 늘리지 않아도 된다.
    • 간편한 관리
  • 단점

    • 사용중인 인스턴스에 트래픽이 몰릴 수 있다.
    • 배포중 신버전과 구버전이 공존하므로 호환성 문제 발생 가능성있다.

Blue/Green Deployment

  • 운영중인 구버전과 동일한 신버전의 인스턴스를 구성한 후 Load Balancer를 통해 모든 트래픽을 한 번에 신버전 쪽으로 전환하는 방식

  • 장점

    • 구버전의 인스턴스가 그대로 남아있어서 손쉬운 Rollback 가능
    • 구버전의 환경을 다음 배포에 재 사용할 수 있다.
    • 운영환경에 영향을 주지않고 새 버전 테스트 가능
  • 단점

    • 시스템 자원이 두배로 필요
    • 새로운 환경에 대한 테스트가 전제되어야 한다.

Canary Release( Canary 배포 )

  • 옛날 광부들이 유독 가스 감지를 위해 Canary 새를 이용한 것을 유래로 한 것으로 잠재적 문제 상황을 미리 발견하는 방식

  • 신버전을 소수의 사용자에게 배포해서 문제가 없는지 확인한 후 점차 사용자를 늘려 배포하는 기법

  • Blue/Green Deployment와 유사한 면이 있지만 트래픽을 한 번에 바꾸는 것이 아니라 단계적으로 전환하기 때문에 부정적 영향 최소화하고 트래픽 양을 조절하여 Rollback할 수 있다.

  • 장점

    • 문제 상황을 빠르게 감지
    • A/B 테스트로 활용 가능
    • A/B 테스트 - 대조군과 실험군을 나누어서 특정 UI나 Algorithm 효과 비교 테스트 방법론
  • 단점

    • 네트워크 트래픽 제어 부담

Deployment를 이용한 Application 배포( Update )

  • Deployment는 ReplicatSet과 다르게 Application update 기능을 가지고 있다.

Recreate

  • 전체를 한번에 update
  • 기존 Pod를 삭제하고 새로운 Pod를 생성하여 update 수행
  • update 내용 변경
    • Deployment YAML 파일 수정
    • kubectl apply -f <Deployment YAML 파일명>
    • kubectl set 명령으로 update 내용 변경 방법
    • kubectl set <set 대상필드> <set 대상 필드를 갖고있는 Object> <변경 내용>
    • kubectl set image deployment/deployment-nginx nginx=nginx:1.22.0

RollingUpdate( default )

  • 점진적으로 Pod를 교체하면서 update 수행

  • 기존 Pod를 일부 제거하고 새롭게 Update된 Pod를 일부 배포하는 과정을 반복하는 방식

  • 점진적 배포과정 때문에 완료까지 시간이 더 걸리겠지만 일부의 Pod는 계속 running 상태를 유지하기 때문에 downtime이 발생하지 않는다.

  • Deployment YAML 파일에 추가 설정 내용

    • strategy.rollingUpdate.maxSurge

      • update시 최대 얼마만큼의 Pod를 더 생성할 수 있는지 설정
      • int( 정수 )값 또는 string 값으로 % 사용 가능
      • 최대 몇 개의 Pod를 추가 생성 할 수 있는지 결정
    • strategy.rollingUpdate.maxUnavailable

      • update시 최대 얼마만큼의 Pod가 unavailable 상태여도 되는지 정할 수 있는 설정
      • int( 정수 )값 또는 string 값으로 % 사용 가능
      • 최소 동작 Pod수 결정

Deployment Rollback

  • 새로운 애플리케이션을 배포하였다가 문제가 생겨 이전 버전으로 되돌리는 과정을 Rollback 이라 한다.

  • Deployment 는 Rollback 기능을 사용할 수 있다.

  • 배포 이력 확인

    • kubectl rollout history deployment/<Deployment 이름> -> Deployment 배포 이력 확인
    • kubectl rollout history deployment/<Deployment 이름> --revision=<revision 번호> -> Deployment revision 에 대한 배포 정보 확인
  • 이전 버전으로 Rollback

    • kubectl rollout undo deployment/<Deployment 이름> -> 이전 버전으로 Rollback
    • kubectl rollout undo deployment/<Deployment 이름> --to-revision=<revision 번호> -> 특정 revision 번호로 Rollback
profile
develop life

0개의 댓글