php editor Youzi brings you the latest technology sharing: This article will delve into how to customize the status update of the Kubernetes controller in golang. As an open source container orchestration engine, Kubernetes has become a popular choice for cloud native application development. The controller is one of the core components in Kubernetes and is used to manage the state of the application. Understanding how to customize controller status updates will help developers better grasp the flexibility and scalability of Kubernetes. In this article, we will introduce related concepts and provide detailed code examples to help readers get started quickly. Stay tuned!
I am building a go kubernetes operator. I use kubebuilder to create it. I want to store some internal details in crd state. I've tried:
if err = r.client.update(ctx, upcrd); err != nil { return ctrl.result{}, client.ignorenotfound(err) }
if err = r.status().update(ctx, upcrd); err != nil { return reconcile.result{}, client.ignorenotfound(err) }
The status structure is defined as follows:
type HAAuditStatus struct { ChaosStrategyCron cron.EntryID `json:"chaosStrategyCron,omitempty"` TestStatus TestStatus `json:"testStatus,omitempty"` MetricStatus MetricStatus `json:"metricStatus,omitempty"` RoundRobinStrategy RoundRobinStrategy `json:"roundRobinStrategy,omitempty"` FixedStrategy FixedStrategy `json:"fixedStrategy,omitempty"` NextChaosDateTime int64 `json:"nextChaosDateTime,omitempty"` Created bool `json:"created,default=false"` }
No errors will be thrown, and the modified specification fields will actually be retained, but the status field will not be retained, and its value will remain at its default value in the next reconciliation step. I looked at other questions on github or stackoverflow and any suggestions that came up solved my problem but I can't figure out what the problem was. To get a greater understanding, you can refer to the repository where the operator is located.
Any suggestions are very welcome :)
I may have found the reason why the status is not updating.
Before updating the status, I also updated the canonical fields (to provide some feedback to the user about the created resource).
The issue is due to a specification update triggering a new reconciliation, and this updated directive (which includes status updates) is not executed.
I realize that using specs to provide feedback to users is not appropriate and events are better suited for this purpose.
The above is the detailed content of Update status of custom Kubernetes controller in golang. For more information, please follow other related articles on the PHP Chinese website!