現在、セキュリティ上の理由から、時間または条件に基づいて、Kubernetes のレプリケーション コントローラーからポッドまたはコンテナーを「再作成」または再生成することは可能ですか? x 分/時間ごと、または条件 (トリップワイヤーなど) により、スケジュールに基づいてコンテナーを再作成したいと考えています。これが既存の機能だったのか、それともこの目的を達成するための巧妙な方法があったのか知りたいだけです。
3 に答える
別の解決策は、Brendan Burn の ksql スクリプトを使用してターゲット Pod を見つけることです。私はこれを会社のデプロイ CI ジョブで使用しています。SQL は、再構築したばかりのイメージを実行しているすべてのポッドを検索し、結果を BASHwhile
ループに渡します。このループで、影響を受けるポッドを 1 つずつ破棄します。
#!/bin/bash
# Build the ksql query
QUERY="SELECT pods.metadata->name, pods.metadata->namespace "
QUERY="${QUERY} FROM pods LEFT JOIN containers USING uid "
QUERY="${QUERY} WHERE image LIKE '%/${CONTAINER_NAME}:${CONTAINER_TAG}'"
exec 5>&1 # Duplicate stdout on #5 so we can display the
# results of the query and use them at the same time
# Delete every pod matching QUERY. The `sed` and `awk` calls break down the formatted table
while read line; do
namespace=`echo $line | cut -d' ' -f4`
pod=`echo $line | cut -d' ' -f2`
kubectl delete --namespace=$namespace pod $pod
done < <(echo "$QUERY" | node node_modules/ksql/ksql.js | tee >(cat - >&5) | sed -n 'p;n' | tail -n +3)
これは確かに世界で最も洗練されたソリューションではありませんが、クラスターで実行されているコンテナーにこのロジックを埋め込むのに十分簡単な場合があります。
この手法の利点は、柔軟性と拡張性が非常に高いことです。
あなたpod.spec.activeDeadlineSeconds
が望むことをしますか? http://kubernetes.io/docs/api-reference/v1/definitions/#_v1_podspec
そのまま Kubernetes に直接組み込まれているものではありませんが、 Liveness プローブを活用することで回避できます。Pod 内のコンテナーが特定の条件 (時間またはイベント ベース) で「失敗」するようにスケジュールされている場合、Kubernetes は自動的に Pod を再起動します。つまり、失敗したコンテナーを再作成します。