Home > Backend Development > Golang > Update status of custom Kubernetes controller in golang

Update status of custom Kubernetes controller in golang

王林
Release: 2024-02-11 08:57:08
forward
420 people have browsed it

更新 golang 中自定义 Kubernetes 控制器的状态

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!

Question content

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:

  • Update the entire resource:
if err = r.client.update(ctx, upcrd); err != nil {
    return ctrl.result{}, client.ignorenotfound(err)
}
Copy after login
  • And only update status:
if err = r.status().update(ctx, upcrd); err != nil {
    return reconcile.result{}, client.ignorenotfound(err)
}
Copy after login

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"`
}
Copy after login

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 :)

Solution

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!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template