본문 바로가기

k8s

Graceful pod shutdown

 

파드를 교체하거나 업데이트시 잠깐의 중단을 경험합니다.

그래서 중단없어 파드를 교체하는

graceful에 대해 알아보려고 합니다.

아래는 예시 yaml입니다.

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ingress-deploy-test01
spec:
  replicas: 3
  selector:
    matchLabels:
      app.kubernetes.io/name: web-deploy01
  template:
    metadata:
      labels:
        app.kubernetes.io/name: web-deploy01
    spec:
      containers:
      - name: nginx
        image: nginx

 

apiVersion: v1
kind: Service
metadata:
  name: ingress-service-test01
spec:
  selector:
    app.kubernetes.io/name: web-deploy01
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-test01
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /test01
        pathType: Prefix
        backend:
          service:
            name: ingress-service-test01
            port:
              number: 80

 

이 상태에서

아래 명령어를 치면

while true; do http_code=$(curl -s -o /dev/null -w "%{http_code}" http://192.168.56.70/test01); echo "HTTP Code: $http_code"; sleep 0.1; done

 

200코드를 확인할 수 있습니다.

 

이때 rollout시 중단을 경험하게 되는데요

 

순간적으로 LB가 pod와 연결이 끊겨 중단이 생겨서 그렇습니다.

 

그래서

 

아래와 같이 수정 후

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ingress-deploy-test01
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: web-deploy01
  template:
    metadata:
      labels:
        app.kubernetes.io/name: web-deploy01
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: nginx
        image: nginx
        resources:
          limits:
            memory: "64Mi"
            cpu: "0.1"
        ports:
        - containerPort: 80
        lifecycle:
          preStop:
            exec:
              command: ["/bin/sh", "-c", "sleep 30"]

 

 

수정, 배포하면

순단 없이 진행되는 것을 볼 수 있습니다.

 

이유는

30초동안 기존파드에 있던 세션이 안전하게 종료되고, 새로운 pod에 이전되기 때문입니다.

 

 

참고

https://www.youtube.com/watch?v=VkGTzaaIkJU