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