3-7. 무중단 배포를 위한 오브젝트, Deployment

황인권·2025년 2월 14일

Kubernetes

목록 보기
25/37

롤링 배포 전략?

  • 롤링 배포란 무중단 배포를 구현하기 위한 배포 전략 중 하나
  • 한 번에 N개의 서버(Pod)를 업데이트하면 어떻게 될까?
    • 모든 Pod를 내린 후 새로운 버전의 Pod를 띄우면, 잠깐의 Down-time(유저들이 서비스에 접속할 수 없는 상태)가 생긴다.
  • Pod를 하나씩 순차적으로 교체하는데, 다음으로 교체할 Pod는 이전에 교체한 Pod가 정상 작동하는 이후에 교체를 한다면 Down-time을 최소화할 수 있다.

Deployment 오브젝트는 롤링 배포를 가능하게 해준다.

  • 롤링 배포를 일일이 하면 매우 번거롭다.
  • 여태까지 그래왔든, 당연히 쿠버네티스에는 배포를 위한 오브젝트도 있다. 그것이 바로 Deployment
    • Deployment 안에 정의된 ReplicaSet의 스펙을 수정하면, 자동으로 롤링 배포가 이루어진다.

Deployment 오브젝트 만들어보기

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-deployment
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      containers:
      - name: sample-app
        image: nginx:1.27.0
        ports:
          - containerPort: 80

Deployment 업데이트

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-deployment
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      containers:
      - name: sample-app
        image: httpd:2.4.61
        ports:
          - containerPort: 80

과제 실습해보기

과제 안내

  • 도커 허브에 업로드되어 있는 아래 이미지를 사용하여 새로운 Deployment를 만들자.
    • teamspartacontents/k8s_lecture1:third-week-exercise
    • 해당 이미지는 3000번 포트에서 웹서버를 개방한다.
  • 해당 Deployment의 Pod들과 연결되는 ClusterIP 타입의 Service를 만들자.
  • 만들었던 Ingress에 /third-week-exercise 주소로 접속하면, 새로 만든 Service에 접속되도록 한다.
  • 안내에 나와있지 않은 조건은 자유롭게 적당한 값으로 설정하여 진행
  • Ingress 주소에 /third-week-exercise 경로로 접속하면 아래와 같은 화면이 출력되어야 한다.

과제 해설

  1. 과제에서 제시된 이미지를 통해 Deployment를 생성
apiVersion: apps/v1
kind: Deployment
metadata:
  name: third-week-exercise-deployment
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: third-week-exercise-app
  template:
    metadata:
      labels:
        app: third-week-exercise-app
    spec:
      containers:
      - name: third-week-exercise-app
        image: asia-northeast3-docker.pkg.dev/argon-depth-429113-t7/kube-study-registry/third-week-exercise:1.0.0
        ports:
          - containerPort: 3000
  1. ClusterIP 타입의 Service를 아래와 같이 간단하게 생성
apiVersion: v1
kind: Service
metadata:
  name: third-week-exercise-svc
  namespace: default
spec:
  selector:
    app: third-week-exercise-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  1. 아래와 같이 Intress에 새로운 path를 추가합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: sample-ingress
  namespace: default
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: sample-svc
              port:
                number: 80
        - path: /third-week-exercise
          pathType: Prefix
          backend:
            service:
              name: third-week-exercise-svc
              port:
                number: 80
profile
inkwon Hwang

0개의 댓글