문제4: Blue-Green Update

tothelight·2024년 5월 21일

CKAD 예상 문제

목록 보기
4/14

다음과 같은 deployment, service를 동작하십시오.

  • blue라는 이름으로 smlinux/nginx:blue 이미지를 가진 Pod 2개 배포
    • Label은 version=blue를 사용하며 port는 8080 포트를 사용
  • app-svc 서비스를 version=blue 레이블로 묶어 NodePort 타입의 서비스 port 80으로 운영
  • green이라는 이름으로 smlinux/nginx:green 이미지를 가진 Pod 2개 배포
    • Label은 version=green을 사용하며 port는 8080 포트를 사용
  • app-svc의 레이블을 version=green으로 변경

명령어 흐름

# blue 배포 yaml 파일 생성
$ kubectl create deployment blue --image=smlinux/nginx:blue --replicas=2 --dry-run=client -o yaml > blue.yaml

# blue.yaml 파일을 엽니다.
$ vi blue.yaml

# blue 배포 적용
$ kubectl apply -f blue.yaml

# app-svc 서비스 생성 및 배포
$ kubectl expose deployment blue --type=NodePort --port=80 --target-port=8080 --name=app-svc

# 서비스 상태 확인
$ kubectl get svc app-svc -o wide

# green 배포 yaml 파일 생성
$ kubectl create deployment green --image=smlinux/nginx:green --replicas=2 --port=8080 --dry-run=client -o yaml > green.yaml

# green.yaml 파일을 엽니다.
$ vi green.yaml

# green 배포 적용
$ kubectl apply -f green.yaml

# 서비스 레이블 변경
$ kubectl edit svc app-svc
# selector:
#   version: green

# 서비스 접근 확인
$ curl k8s-worker1:3XXXX

blue.yaml 내용

apiVersion: apps/v1
kind: Deployment
metadata:
  name: blue
spec:
  replicas: 2
  selector:
    matchLabels:
      version: blue
  template:
    metadata:
      labels:
        version: blue
    spec:
      containers:
      - name: nginx
        image: smlinux/nginx:blue
        ports:
        - containerPort: 8080

green.yaml 내용

apiVersion: apps/v1
kind: Deployment
metadata:
  name: green
spec:
  replicas: 2
  selector:
    matchLabels:
      version: green
  template:
    metadata:
      labels:
        version: green
    spec:
      containers:
      - name: nginx
        image: smlinux/nginx:green
        ports:
        - containerPort: 8080

솔루션 설명

  1. blue 배포 yaml 파일 생성

    $ kubectl create deployment blue --image=smlinux/nginx:blue --replicas=2 --dry-run=client -o yaml > blue.yaml
    • kubectl create deployment 명령어를 사용하여 blue 배포의 yaml 템플릿을 생성합니다.
  2. blue.yaml 파일을 수정

    $ vi blue.yaml
    • 생성된 blue.yaml 파일을 열고 필요한 내용을 수정합니다.
    • 주석으로 추가된 내용: version=blue 레이블을 추가하고, 포트 설정을 8080으로 지정합니다.
  3. blue 배포 적용

    $ kubectl apply -f blue.yaml
    • kubectl apply 명령어를 사용하여 blue.yaml 파일을 적용합니다.
  4. app-svc 서비스 생성 및 배포

    $ kubectl expose deployment blue --type=NodePort --port=80 --target-port=8080 --name=app-svc
    • kubectl expose 명령어를 사용하여 blue 배포를 NodePort 타입의 서비스로 노출합니다.
  5. 서비스 상태 확인

    $ kubectl get svc app-svc -o wide
    • kubectl get svc 명령어로 서비스 상태를 확인합니다.
  6. green 배포 yaml 파일 생성

    $ kubectl create deployment green --image=smlinux/nginx:green --replicas=2 --port=8080 --dry-run=client -o yaml > green.yaml
    • kubectl create deployment 명령어를 사용하여 green 배포의 yaml 템플릿을 생성합니다.
  7. green.yaml 파일을 수정

    $ vi green.yaml
    • 생성된 green.yaml 파일을 열고 필요한 내용을 수정합니다.
    • 주석으로 추가된 내용: version=green 레이블을 추가하고, 포트 설정을 8080으로 지정합니다.
  8. green 배포 적용

    $ kubectl apply -f green.yaml
    • kubectl apply 명령어를 사용하여 green.yaml 파일을 적용합니다.
  9. 서비스 레이블 변경

    $ kubectl edit svc app-svc
    • kubectl edit svc 명령어를 사용하여 app-svc 서비스의 레이블을 version=green으로 변경합니다.
  10. 서비스 접근 확인

    $ curl k8s-worker1:3XXXX
    • curl 명령어를 사용하여 서비스가 정상적으로 작동하는지 확인합니다.

0개의 댓글