微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我需要按标签名称停止部署并通过 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 例如

解决方法

如果你想通过 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中找到更多示例。

,

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

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 请求。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。