查看kubectl rollout restart
的具体操作
# k -v 6 rollout restart deploy app1 &> /tmp/rollout_app1.out
# cat /tmp/rollout_app1.out
I0416 17:51:47.973286 15899 loader.go:372] Config loaded from file: /data/apps/data/ansible/k8s/kubeconfig/.config
I0416 17:51:48.034027 15899 round_trippers.go:454] GET https://k8s-master-f5.test.dev:6443/apis/apps/v1/namespaces/default/deployments/app1 200 OK in 38 milliseconds
I0416 17:51:48.131134 15899 round_trippers.go:454] PATCH https://k8s-master-f5.test.dev:6443/apis/apps/v1/namespaces/default/deployments/app1?fieldManager=kubectl-rollout 200 OK in 13 milliseconds
deployment.apps/app1 restarted
再看详细一点,-v 10
I0416 18:20:40.303001 17455 request.go:1181] Request Body: {"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt":"2023-04-16T18:20:40+08:00"}}}}}
I0416 18:20:40.303148 17455 round_trippers.go:435] curl -v -XPATCH -H "Accept: application/json, */*" -H "Content-Type: application/strategic-merge-patch+json" -H "User-Agent: kubectl/v1.
22.7 (linux/amd64) kubernetes/b56e432" 'https://k8s-master-f5.test.dev:6443/apis/apps/v1/namespaces/default/deployments/app1?fieldManager=kubectl-rollout'
I0416 18:20:40.315430 17455 round_trippers.go:454] PATCH https://k8s-master-f5.test.dev:6443/apis/apps/v1/namespaces/default/deployments/app1?fieldManager=kubectl-rollout 200 OK in 12 mil
liseconds
I0416 18:20:40.315495 17455 round_trippers.go:460] Response Headers:
I0416 18:20:40.315521 17455 round_trippers.go:463] Audit-Id: 8e2cac31-f2d7-4360-bfae-9ccfbef11d25
I0416 18:20:40.315544 17455 round_trippers.go:463] Cache-Control: no-cache, private
I0416 18:20:40.315565 17455 round_trippers.go:463] Content-Type: application/json
I0416 18:20:40.315587 17455 round_trippers.go:463] X-Kubernetes-Pf-Flowschema-Uid: 85447fdf-b2f0-4e0d-930e-9e85b03d586f
I0416 18:20:40.315608 17455 round_trippers.go:463] X-Kubernetes-Pf-Prioritylevel-Uid: f80bb938-49ec-4dd4-8c62-1b5420136f67
I0416 18:20:40.315630 17455 round_trippers.go:463] Date: Sun, 16 Apr 2023 10:20:40 GMT
查看修改后的 filedManager
# k get --show-managed-fields=true deploy app1 -o json | jq -j -r '.metadata.managedFields[]| .manager, "\t", .time, "\n"'
kubectl-client-side-apply 2022-12-12T08:57:43Z
kubectl-rollout 2022-12-14T07:21:21Z
pkg.test 2023-04-02T08:12:31Z
kubectl-edit 2023-04-02T09:18:54Z
kube-controller-manager 2023-04-16T09:51:53Z
代码示例
// client 就是 *kubernetes.Clientset ,这里省略生成此对象的代码
// var client *kubernetes.Clientset
patchOpt := metav1.PatchOptions{FieldManager: "kubectl-rollout"}
dt := time.Now()
patchInfo := fmt.Sprintf(`{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt":"%s"}}}}}`, dt.String())
app1, err = client.AppsV1().Deployments("default").Patch(ctx,
"app1", types.StrategicMergePatchType, []byte(patchInfo), patchOpt)
查看重启时间
# k get --show-managed-fields=true deploy app1 -o json | jq -j -r '.spec.template.metadata'
{
"annotations": {
"kubectl.kubernetes.io/restartedAt": "2023-04-16 18:30:06.844862842 +0800 CST m=+0.094329516"
},
"creationTimestamp": null,
"labels": {
"app": "app1"
}
}
参考
- https://stackoverflow.com/questions/58795316/kubernetes-client-go-kubectl-rollout-example