如何通过API推出重新启动部署?

时间:2019-11-26 12:11:19

标签: kubernetes

Kubernetes 1.15引入了命令

kubectl rollout restart deployment my-deployment

哪个将是通过API调用的端点? 例如,如果我想扩展部署,可以致电

PATCH /apis/apps/v1/namespaces/my-namespace/deployments/my-deployment/scale

2 个答案:

答案 0 :(得分:2)

如果您在kubectl来源中进行挖掘,最终可以找到(k8s.io/kubectl/pkg/polymorphichelpers).defaultObjectRestarter。所有要做的就是更改注释:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    meta:
      annotations:
        kubectl.kubernetes.io/restartedAt: '2006-01-02T15:04:05Z07:00'

任何更改部署对象中嵌入式pod规范的属性的操作都会导致重新启动;没有特定的API调用可以做到这一点。

对此有用的推论是,如果您的kubectl和群集版本不同步,则可以在kubectl rollout restart 1.14中针对较旧的群集使用kubectl,因为它不会实际上取决于Kubernetes API的任何更改。

答案 1 :(得分:1)

TLDR

curl --location --request PATCH 'https://kubernetes.docker.internal:6443/apis/apps/v1/namespaces/default/deployments/keycloak?fieldManager=kubectl-rollout&pretty=true' \
--header 'Content-Type: application/strategic-merge-patch+json' \
--data-raw '{
    "spec": {
        "template": {
            "metadata": {
                "annotations": {
                    "kubectl.kubernetes.io/restartedAt": <time.Now()>
                }
            }
        }
    }
}'

如果您有 kubectl,您可以通过为您的命令提供额外的标志 --v 9 来调试本地 minikube 上的调用。 也就是说,您可以尝试在本地集群上进行虚拟部署重启以查看结果。

对于未来的读者:这可能因版本而异,但如果您在 apps/v1 中应该没问题。