Kubernetes Pod を簡易的にローリング再起動する ( ポッドの削除コマンド )

Posted by: ytyng 5 months, 1 week ago

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 自体は、ポッドの削除〜再起動を待ちますが、ポッドの再起動後にアプリの立ち上がりまでダウンタイムがある場合、それを避けます。

よくやるのはこのスクリプト

restart-pod.sh

#!/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
Currently unrated

Comments

Archive

2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011