Kubernetes 1.15引入了命令
kubectl rollout restart deployment my-deployment
哪个将是通过API调用的端点? 例如,如果我想扩展部署,可以致电
PATCH /apis/apps/v1/namespaces/my-namespace/deployments/my-deployment/scale
答案 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
中应该没问题。