我想使用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)
之前的解决方案在 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 自动设置的。
| 归档时间: |
|
| 查看次数: |
3990 次 |
| 最近记录: |