使用Kubernetes API管理要部署的副本计数

时间:2017-01-22 15:38:00

标签: kubernetes

我想使用Kubernetes API(v1beta1)更改部署的复制数量(pod)。

现在,我可以使用以下命令从CLI增加副本:

inherit

Kubernetes API documentation中提到有PUT请求做同样的事情

kubectl scale --replicas=3 deployment my-deployment

但没有如何做的例子。

我不确定在请求正文中发送什么以执行更新。

2 个答案:

答案 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自动设置的。

相关问题