client-go 实现 rollout restart 效果

查看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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值