[k8s] Airflow kubernetes executor를 위한 이론공부- 4. k8s deployment

윤원탁·2023년 1월 10일
0

k8s

목록 보기
5/6

Rolling Update

배포할 때 서비스를 유지하면서 추가 기능이나 library 버전업 등 배포가 필요할 때가 있다.
기존 3개의 nginx 서버가 1.14 버전으로 실행되고 있고, 1.15 버전으로 서비스를 유지하면서 업데이트 하고 싶다면 다음과 같이 구현이 될것이다.

구동중인 서비스 구조

배포 완료된 서비스 구조

  • deployment는 replicaSet을 health check 하며 유지된다.
  • replicaSet은 pod들의 개수를 확인하며 유지시킨다.

base 1.14 버전 yaml 파일

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deploy
spec:
  selector:
    matchLabels:
      app: webui
  replicas: 3
  template:
    metadata:
      labels:
        app: webui
    spec:
      containers:
      - image: nginx:1.14
        name: web
        ports:
        - containerPort: 80

커멘드 방식

# 위의 pod 실행
kubectl create -f char6_app-deploy.yaml

# nginx 버전 업데이트
kubectl set image deployment app-deploy web=nginx:1.15
deployment.apps/app-deploy image updated
# 업데이트 후 실행결과
kubectl get pods 

NAME                          READY   STATUS              RESTARTS   AGE
app-deploy-594ccdd789-h86jn   0/1     ContainerCreating   0          3s
app-deploy-5f69db7d6b-24sng   1/1     Running             0          41s
app-deploy-5f69db7d6b-9tdww   1/1     Running             0          41s
app-deploy-5f69db7d6b-nq6hl   1/1     Running             0          41s

# 업데이트 완료시
kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
app-deploy-594ccdd789-4wmqc   1/1     Running   0          12s
app-deploy-594ccdd789-gqm56   1/1     Running   0          5s
app-deploy-594ccdd789-h86jn   1/1     Running   0          20s

# 변경 히스토리 보기
# 기존 --record 옵션을 통한 CHANGE-CAUSE 기록이 anotation으로 변경되었음
# 아래 1.15 버전 yaml 의 anotation을 작성하여 버전관리를 해야한다.
kubectl rollout history deployment app-deploy 
deployment.apps/app-deploy 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

# 구현된 deployment 삭제
# deployment > replicaSet > pod 로써 deployment가 최상위계층
# deployment 삭제시 아래 모든 것들이 삭제됨
kubectl delete deployments.apps app-deploy 

yaml 방식

1.15 버전 yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  annotations:
    kubernetes.io/change-cause: version 1.15
spec:
  progressDeadlineSeconds: 600
  revisionHistoryLimit: 10
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  replicas: 3
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      labels:
        app: webui
    spec:
      containers:
      - name: web
        image: nginx:1.15
        ports:
        - containerPort: 80
profile
개발자입니다.

0개의 댓글