K8s中重启n个pods

Restart n number of pods in K8s

我正在 Kubernetes 集群上 运行 开发一个应用程序。我想按顺序手动重启第n个pods。我们能做到吗? kubectl scale <options> 会在这里工作吗?

有了 replicaSet,你总是可以扩展 up/down 'N' 个 pods 的数量,这将重新启动它们,如果你需要重新启动特定的一个,只需删除它们,RS 就会启动给你一个新的。

答案是,您可以重新启动特定部署的 10 个 pods 中的 5 个。虽然这不会是一个单一的命令。

正如您正确假设的那样 kubectl scale 会在这里帮助您。

重启 5 次 pods 10 次中包含 2 次操作:

  1. 将部署从 10 人缩减到 5 人pods

    kubectl scale deployment deployment-name --replicas=5
    
  2. 将部署从 5 个扩展到 10 个 pods 返回:

    kubectl scale deployment deployment-name --replicas=10
    

您也可以删除确切的 pods,kube-controller-managerdeployment/replicaset 控制器将确保 desired 状态与确切状态匹配,因此缺少 pods 将自动重新安排。


然而,按照最佳实践(感谢@DavidMaze),理想的情况是重新启动整个部署。这可以通过以下命令完成:

kubectl rollout restart deployment deployment-name

这是一个更安全的选项,它允许在任何 mistakes/errors 的情况下轻松回滚。

当请求 rollout restart 时,也可以在部署中逐一重启 pods。

.spec.strategy.rollingUpdate.maxUnavailable 应设置为 1 这意味着在重启期间最多只有 1 pods 不可用 - reference to max unavailable.

Kubernetes Deployments

对于这种情况,我们也可以使用 bash 脚本。此 shell 脚本要求您重新启动 replica_set-id,第 pods 个,此脚本将 delete/restart 按顺序 pods。

#! /bin/bash
read -p "Replicaset-id: " p
pods=$(kubectl get pods | grep "$p" | awk '{print }')
read -p "No of pods to be restarted: " n
m=0
for pod in $pods
    do 
        ((m++))
        echo "$m"
        kubectl delete pod "$pod"
        if [[ "$m" -eq "$n" ]]; then
            break
        fi
    done