我想使用Kubernetes API(v1beta1)更改部署的复制数量(pod)。
现在,我可以使用以下命令从CLI增加副本:
inherit
在Kubernetes API documentation中提到有PUT请求做同样的事情
kubectl scale --replicas=3 deployment my-deployment
但没有如何做的例子。
我不确定在请求正文中发送什么以执行更新。
答案 0 :(得分:9)
最简单的方法是首先使用以下方法检索实际数据:
GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale
这将为您提供一个yaml或json对象,您可以使用PUT
请求修改并发送回来。
随着卷曲,往返看起来像这样:
API_URL="http://kubernetes:8080/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale"
curl -H 'Accept: application/json' $API_URL > scale.json
# edit scale.json
curl -X PUT -d@scale.json -H 'Content-Type: application/json' $API_URL
或者您可以使用PATCH
来电:
PAYLOAD='[{"op":"replace","path":"/spec/replicas","value":"3"}]'
curl -X PATCH -d$PAYLOAD -H 'Content-Type: application/json-patch+json' $API_URL
答案 1 :(得分:0)
以前的解决方案在kubernetes 1.14上对我不起作用。我必须使用其他API端点。 这是完整的示例:
#!/bin/sh
set -e
NUMBER_OF_REPLICAS="$1"
CURRENT_NAMESPACE="$2"
DEPLOYMENT_NAME="$3"
KUBE_TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
KUBE_CACRT_PATH="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
PAYLOAD="{\"spec\":{\"replicas\":$NUMBER_OF_REPLICAS}}"
curl --cacert $KUBE_CACRT_PATH \
-X PATCH \
-H "Content-Type: application/strategic-merge-patch+json" \
-H "Authorization: Bearer $KUBE_TOKEN" \
--data "$PAYLOAD" \
https://$KUBERNETES_SERVICE_HOST/apis/apps/v1/namespaces/$CURRENT_NAMESPACE/deployments/$DEPLOYMENT_NAME
请注意,$KUBERNETES_SERVICE_HOST
是由Pod内的kubernetes自动设置的。