파드를 교체하거나 업데이트시 잠깐의 중단을 경험합니다.
그래서 중단없어 파드를 교체하는
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
'k8s' 카테고리의 다른 글
UTM(MAC) k8s nginx-controller 와 localhost 포트포워딩 (0) | 2024.05.19 |
---|---|
Metallb 를 통한 베어메탈 LoadBallancer 구성 (0) | 2024.05.19 |
k8s nginx-ingress-controller 설치 (0) | 2024.05.19 |