如何“停止”和“启动”kubernetes API 部署/pod

时间:2021-06-09 07:15:55

标签: kubernetes

我需要按标签名称停止部署并通过 API 重新启动它 我还需要为一组部署执行此操作,因此我为每个部署添加了标签

所以我知道如何通过欲望标签过滤部署网络。但我发现如果我想停止运行部署,我确实需要缩小它并将副本数更改为 0

还有其他选择可以通过 API 做到这一点吗?因为现在我需要保留副本以供启动(再次扩展)但这是一个在服务的生命周期中不容易保留的参数

所以现在我发现的最佳选择是:

PAYLOAD='[{"op":"replace","path":"/spec/replicas","value":"3"}]'
curl -X PATCH -d$PAYLOAD -H 'Content-Type: application/json-patch+json' $API_URL

但是我在问是否还有其他的东西,如果有一个像 docker swarm 这样的“停止/启动”组,你可以运行 docker stack rm 例如

2 个答案:

答案 0 :(得分:0)

如果你想通过 API 调用运行 kubectl scale deployments mydeployment --replicas=0,你可以运行下面的命令

$ curl -k \
    -X PUT \
    -d @- \
    -H "Authorization: Bearer $TOKEN" \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    https://$ENDPOINT/apis/apps/v1/namespaces/$NAMESPACE/deployments/$NAME/scale <<'EOF'

{
  "kind": "Scale",
  "apiVersion": "apps/v1beta1",
  ...
}
EOF

可以在Openshift RestAPI documentations中找到更多示例。

答案 1 :(得分:0)

在注释中存储副本数量的解决方案怎么样:

export DEPLOYMENT_NAME=xxx

kubectl annotate deployments $DEPLOYMENT_NAME replicas-before=$(kubectl get deployments.apps $DEPLOYMENT_NAME  -ojsonpath="{.spec.replicas}")

kubectl scale deployment --replicas 0 $DEPLOYMENT_NAME

kubectl scale deployment --replicas $(kubectl get deployments.apps nginx -ojsonpath="{.metadata.annotations.replicas-before}") $DEPLOYMENT_NAME

这不需要在外部额外保存状态。在此示例中,您将当前状态保存在名为 replicas-before 的注释中,然后将部署缩小到 0。如果您想恢复数量或副本,只需从注释中读取副本并将部署扩大到此价值。

我知道您要求使用 k8s api 的解决方案。只需使用 -v=10 运行 kubectl 命令,然后查看正在发送的 API 请求。