애플리케이션 Pod 무중단 업그레이드 테스트.
Part 5에서 클러스터 업그레이드 중 NotReady가 생겼으니, 이번에는 Pod 교체를 무중단으로 처리.
현재 상태 확인.
kubectl get deployments -o wide
nginx-demo는 1개라 3개로 확장.
kubectl scale deployment nginx-demo --replicas=3
kubectl get pods -l app=nginx-demo
PDB 설정.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: nginx-demo-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: nginx-demo
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: apache-demo-pdb
spec:
minAvailable: 1
selector:
matchLabels:
app: apache-demo
확인.
kubectl get pdb
nginx-demo RollingUpdate 설정.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 2
periodSeconds: 2
확인.
kubectl get deployment nginx-demo -o yaml | grep -A 5 "strategy:"
이미지 업데이트.
kubectl set image deployment/nginx-demo nginx=nginx:1.25-alpine
kubectl rollout status deployment/nginx-demo
Pod 확인.
kubectl get pods -l app=nginx-demo
이미지 확인.
kubectl get pods -l app=nginx-demo -o jsonpath="{.items[*].spec.containers[*].image}"
서비스 응답 확인.
for i in {1..20}; do
curl -s -o /dev/null -w "%{http_code} " http://192.168.255.100/
done
echo ""
결과.
200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200
apache-demo도 동일하게 적용.
apiVersion: apps/v1
kind: Deployment
metadata:
name: apache-demo
spec:
replicas: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: apache-demo
template:
metadata:
labels:
app: apache-demo
spec:
containers:
- name: apache
image: httpd:alpine
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 2
periodSeconds: 2
이미지 업데이트.
kubectl set image deployment/apache-demo apache=httpd:2.4-alpine
kubectl rollout status deployment/apache-demo
apache 응답 확인.
for i in {1..20}; do
curl -s -o /dev/null -w "%{http_code} " http://192.168.255.100/apache
done
echo ""
결과.
200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200
최종 확인.
kubectl get deployments
kubectl get pdb
kubectl get pods -l "app in (nginx-demo,apache-demo)"
핵심 설정.
PDB.
minAvailable: 2
RollingUpdate.
maxSurge: 1
maxUnavailable: 0
Readiness Probe.
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 2
periodSeconds: 2
nginx-demo.
3 replicas.
apache-demo.
2 replicas.
결과.
nginx-demo 요청 전부 200.
apache-demo 요청 전부 200.
다운타임 0초.