Kubernets で、Pod の Deployment の中で、コンテナ設定を
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
namespace: mynamespace
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myrepo/myapp:latest
imagePullPolicy: Always
みたいに、コンテナタグを latest にして、imagePullPolicy: Always で運用している場合。
この場合、最新コードを反映させるには、kubectl delete pod
するわけですが、タイミングをずらしてポッドの削除をかけることでダウンタイムを回避することができます。
kubectl delete pod 自体は、ポッドの削除〜再起動を待ちますが、ポッドの再起動後にアプリの立ち上がりまでダウンタイムがある場合、それを避けます。
よくやるのはこのスクリプト
#!/usr/bin/env zsh
if [ -f "${HOME}/.kube/config-xxxx" ]; then
export KUBECONFIG=${HOME}/.kube/config-xxxx
fi
pods=( $(kubectl get pod -n mynamespace | egrep -o "myapp-deployment-[a-zA-Z0-9-]+") )
_sleep=
for pod in "${pods[@]}" ; do
${_sleep}
kubectl -n mynamespace delete pod ${pod}
_sleep="sleep 10s"
done
コメント