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

Lea*_*fre 6 kubernetes

Kubernetes 1.15 引入了命令

kubectl rollout restart deployment my-deployment
Run Code Online (Sandbox Code Playgroud)

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

PATCH /apis/apps/v1/namespaces/my-namespace/deployments/my-deployment/scale
Run Code Online (Sandbox Code Playgroud)

Dav*_*aze 22

如果你在kubectl源代码中挖掘,你最终可以找到(k8s.io/kubectl/pkg/polymorphichelpers).defaultObjectRestarter. 所做的只是更改注释:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    metadata:
      annotations:
        kubectl.kubernetes.io/restartedAt: '2006-01-02T15:04:05Z07:00'
Run Code Online (Sandbox Code Playgroud)

任何更改部署对象中嵌入的 pod 规范的属性都将导致重新启动;没有特定的 API 调用来执行此操作。

对此有用的推论是,如果您的kubectl版本和集群版本不同步,您可以kubectl rollout restartkubectl1.14 中针对旧集群使用,因为它实际上并不依赖于 Kubernetes API 中的任何更改。


DB.*_*ull 17

总长DR

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()>
                }
            }
        }
    }
}'
Run Code Online (Sandbox Code Playgroud)

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

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