1. 導入:なぜ「無停止再起動」が重要なのか
運用現場では、ソースコードの変更を伴わない「設定ファイルの微調整」や「メモリリークの解消」、「環境変数の適用」のためにPodを再起動したい場面が多々あります。しかし、Podを一つずつ手動で削除するとサービスが停止するリスクがあります。今回紹介する kubectl rollout restart は、Kubernetesのローリングアップデート機能を活用し、サービスを止めずに安全にPodを入れ替えるための必須テクニックです。
2. 基礎知識:ローリングアップデートの仕組み
KubernetesのDeploymentコントローラーは、定義された「レプリカ数(Podの数)」を維持するように動作します。ローリング再起動(Rolling Restart)とは、新しいPodを先に立ち上げ、準備が整ったことを確認してから古いPodを終了させるというプロセスを順次繰り返す仕組みです。これにより、ユーザーへの影響を最小限に抑えたまま、最新の環境設定をPodに反映させることができます。
3. 実装/解決策:コマンドの実行と確認手順
まずは、対象のDeploymentを確認し、以下のコマンドを実行するだけで再起動が開始されます。
コマンド例:
kubectl rollout restart deployment <デプロイメント名> -n <ネームスペース>
実行後、以下のコマンドで進捗を確認するのが運用の鉄則です。
kubectl rollout status deployment <デプロイメント名> -n <ネームスペース>
4. サンプルプログラム:運用自動化のためのスクリプト
CI/CDパイプラインや定時処理で活用できる、再起動実行と待機を行うシェルスクリプト例です。
— サンプルスクリプト:restart_k8s.sh —
!/bin/bash
DEPLOY_NAME=”my-app-deployment”
NAMESPACE=”production”
1. ログを出力しながらローリング再起動を実行
echo “Deployment ${DEPLOY_NAME} の再起動を開始します…”
kubectl rollout restart deployment/${DEPLOY_NAME} -n ${NAMESPACE}
2. 再起動の完了を待機(終了コードで成功・失敗を判定)
echo “再起動の完了を待機中…”
if kubectl rollout status deployment/${DEPLOY_NAME} -n ${NAMESPACE}; then
echo “成功: 全てのPodが正常に再起動されました。”
else
echo “エラー: 再起動中に問題が発生しました。状態を確認してください。”
exit 1
fi
—————————————-
5. 応用・注意点:現場での落とし穴を回避する
現場で活用する上で、以下の点に注意してください。
■ 準備ができているかの確認(Readiness Probe)
このコマンドが正しく機能するには、Deploymentの設定で readinessProbe(準備完了確認) が正しく設定されていることが前提です。これが未設定だと、Podが起動した瞬間に古いPodが削除され、ダウンタイムが発生する可能性があります。
■ latestタグの罠
イメージタグに「latest」を使用している場合、このコマンドで最新イメージがプルされますが、意図しないバージョンが混入するリスクがあるため、本番環境では可能な限りセマンティックバージョニング(v1.0.1など)を指定することを推奨します。
■ 異常時の切り戻し
もし再起動後に異常が発生した場合は、kubectl rollout undo deployment/<デプロイメント名> コマンドですぐに直前の状態へロールバックできることも覚えておきましょう。

コメント