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

yuv*_*hon 13 kubernetes

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

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

kubectl scale --replicas=3 deployment my-deployment
Run Code Online (Sandbox Code Playgroud)

Kubernetes API文档中,提到有一个PUT请求也是如此

PUT /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale
Run Code Online (Sandbox Code Playgroud)

但是没有如何做到这一点的例子.

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

pag*_*gid 11

最简单的方法是首先检索实际数据:

GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个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
Run Code Online (Sandbox Code Playgroud)

或者你可以使用一个PATCH电话:

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


Bru*_*ira 5

之前的解决方案在 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

Run Code Online (Sandbox Code Playgroud)

请注意,$KUBERNETES_SERVICE_HOST是由 pod 内的 kubernetes 自动设置的。