在运行时可以按比例放大/缩小kubernetes statefulset的选项有哪些?

时间:2019-07-13 09:38:48

标签: kubernetes scale kubernetes-helm

在我的用例中,我需要按特定逻辑按比例放大有状态集,并按比例缩小。 我不确定HPA会有所帮助,因为我每次都需要创建一个副本,然后再发出通知以将其缩小,这意味着-应用程序将被缩放,然后在特定的时间内没有缩放缩小(HPA将继续旋转荚直到满足其条件,如果满足条件,它将缩小荚的大小,这是一个问题)。

我正在使用头盔进行部署。

我应该:

  • 让Pod访问K8s API并更改副本数吗?
  • 使用头盔控制器来创建/更新包含副本数的CRD吗?
  • 满足条件时在吊舱内运行kubectl秤吗?

这里的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

您可以设置一个CronJob,该ConfigMap会每隔一个(x分钟)生成一个Pod,并进行检查,例如通过使用StatefulSet来检查是否需要放大/缩小REST API。 / p>

BLOCK BLOCK将使用API reference docs,您可以使用ReplacePatchUsing kubectl proxy您的StatefulSet。

您可以通过以下方式实现:

kubectl proxy

  

Job   有关更多详细信息,请参见Without kubectl proxy

     

然后,您可以使用curl,wget或浏览器浏览API,如下所示:

     

$ kubectl proxy --port=8080 &   输出类似于以下内容:

$ curl http://localhost:8080/api/

Go

  

可以通过将身份验证令牌直接传递到API服务器来避免使用kubectl代理,如下所示:

     

使用{ "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "10.0.1.149:443" } ] } 方法:

grep/cut
  

输出与此类似:

# Check all possible clusters, as you .KUBECONFIG may have multiple contexts:
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

# Select name of cluster you want to interact with from above output:
export CLUSTER_NAME="some_server_name"

# Point to the API server refering the cluster name
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")

# Gets the token value
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 -d)

# Explore the API with TOKEN
curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure

或者通过对API的编程访问,Kubernetes正式支持Python和{{3}}客户端库。

希望对您有所帮助,如果您还有其他问题,请询问。