{"id":13820519,"url":"https://github.com/flatcar/flatcar-linux-update-operator","last_synced_at":"2026-04-03T05:41:40.130Z","repository":{"id":37957216,"uuid":"200228727","full_name":"flatcar/flatcar-linux-update-operator","owner":"flatcar","description":"A Kubernetes operator to manage updates of Flatcar Container Linux","archived":false,"fork":false,"pushed_at":"2026-03-31T14:11:29.000Z","size":61119,"stargazers_count":105,"open_issues_count":77,"forks_count":21,"subscribers_count":15,"default_branch":"master","last_synced_at":"2026-03-31T16:14:46.750Z","etag":null,"topics":["flatcar","kinvolk","kubernetes","operator"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flatcar.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code-of-conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS.md","copyright":null,"agents":null,"dco":"DCO","cla":null}},"created_at":"2019-08-02T12:12:15.000Z","updated_at":"2026-03-31T14:11:41.000Z","dependencies_parsed_at":"2024-05-28T13:50:44.659Z","dependency_job_id":null,"html_url":"https://github.com/flatcar/flatcar-linux-update-operator","commit_stats":{"total_commits":571,"total_committers":34,"mean_commits":"16.794117647058822","dds":0.6830122591943958,"last_synced_commit":"270fb94062690d2ea1489a11546c4d36d9f714d9"},"previous_names":["kinvolk/flatcar-linux-update-operator","flatcar-linux/flatcar-linux-update-operator"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/flatcar/flatcar-linux-update-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flatcar%2Fflatcar-linux-update-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flatcar%2Fflatcar-linux-update-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flatcar%2Fflatcar-linux-update-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flatcar%2Fflatcar-linux-update-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flatcar","download_url":"https://codeload.github.com/flatcar/flatcar-linux-update-operator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flatcar%2Fflatcar-linux-update-operator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31337046,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T04:42:29.251Z","status":"ssl_error","status_checked_at":"2026-04-03T04:42:12.667Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flatcar","kinvolk","kubernetes","operator"],"created_at":"2024-08-04T08:01:04.734Z","updated_at":"2026-04-03T05:41:40.118Z","avatar_url":"https://github.com/flatcar.png","language":"Go","funding_links":[],"categories":["kubernetes"],"sub_categories":[],"readme":"\u003cdiv style=\"text-align: center\"\u003e\n\n[![Flatcar OS](https://img.shields.io/badge/Flatcar-Website-blue?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNi4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4wIiBpZD0ia2F0bWFuXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgODAwIDYwMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDYwMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzA5QkFDODt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQ0MCwxODIuOGgtMTUuOXYxNS45SDQ0MFYxODIuOHoiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MDAuNSwzMTcuOWgtMzEuOXYxNS45aDMxLjlWMzE3Ljl6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNTQzLjgsMzE3LjlINTEydjE1LjloMzEuOVYzMTcuOXoiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik02NTUuMiw0MjAuOXYtOTUuNGgtMTUuOXY5NS40aC0xNS45VjI2MmgtMzEuOVYxMzQuOEgyMDkuNFYyNjJoLTMxLjl2MTU5aC0xNS45di05NS40aC0xNnY5NS40aC0xNS45djMxLjINCgloMzEuOXYxNS44aDQ3Ljh2LTE1LjhoMTUuOXYxNS44SDI3M3YtMTUuOGgyNTQuOHYxNS44aDQ3Ljh2LTE1LjhoMTUuOXYxNS44aDQ3Ljh2LTE1LjhoMzEuOXYtMzEuMkg2NTUuMnogTTQ4Ny44LDE1MWg3OS42djMxLjgNCgloLTIzLjZ2NjMuNkg1MTJ2LTYzLjZoLTI0LjJMNDg3LjgsMTUxTDQ4Ny44LDE1MXogTTIzMywyMTQuNlYxNTFoNjMuN3YyMy41aC0zMS45djE1LjhoMzEuOXYyNC4yaC0zMS45djMxLjhIMjMzVjIxNC42eiBNMzA1LDMxNy45DQoJdjE1LjhoLTQ3Ljh2MzEuOEgzMDV2NDcuN2gtOTUuNVYyODYuMUgzMDVMMzA1LDMxNy45eiBNMzEyLjYsMjQ2LjRWMTUxaDMxLjl2NjMuNmgzMS45djMxLjhMMzEyLjYsMjQ2LjRMMzEyLjYsMjQ2LjRMMzEyLjYsMjQ2LjR6DQoJIE00NDguMywzMTcuOXY5NS40aC00Ny44di00Ny43aC0zMS45djQ3LjdoLTQ3LjhWMzAyaDE1Ljl2LTE1LjhoOTUuNVYzMDJoMTUuOUw0NDguMywzMTcuOXogTTQ0MCwyNDYuNHYtMzEuOGgtMTUuOXYzMS44aC0zMS45DQoJdi03OS41aDE1Ljl2LTE1LjhoNDcuOHYxNS44aDE1Ljl2NzkuNUg0NDB6IE01OTEuNiwzMTcuOXY0Ny43aC0xNS45djE1LjhoMTUuOXYzMS44aC00Ny44di0zMS43SDUyOHYtMTUuOGgtMTUuOXY0Ny43aC00Ny44VjI4Ni4xDQoJaDEyNy4zVjMxNy45eiIvPg0KPC9zdmc+DQo=)](https://www.flatcar.org/)\n[![Matrix](https://img.shields.io/badge/Matrix-Chat%20with%20us!-green?logo=matrix)](https://app.element.io/#/room/#flatcar:matrix.org)\n[![Slack](https://img.shields.io/badge/Slack-Chat%20with%20us!-4A154B?logo=slack)](https://kubernetes.slack.com/archives/C03GQ8B5XNJ)\n[![Twitter Follow](https://img.shields.io/twitter/follow/flatcar?style=social)](https://x.com/flatcar)\n[![Mastodon Follow](https://img.shields.io/badge/Mastodon-Follow-6364FF?logo=mastodon)](https://hachyderm.io/@flatcar)\n[![Bluesky](https://img.shields.io/badge/Bluesky-Follow-0285FF?logo=bluesky)](https://bsky.app/profile/flatcar.org)\n\n\u003c/div\u003e\n\n# Flatcar Linux Update Operator\n\nFlatcar Linux Update Operator is a node reboot controller for Kubernetes running\nFlatcar Container Linux images. When a reboot is needed after updating the system via\n[update_engine](https://github.com/flatcar/update_engine), the operator will\ndrain the node before rebooting it.\n\nFlatcar Linux Update Operator fulfills the same purpose as\n[locksmith](https://github.com/flatcar/locksmith), but has better integration\nwith Kubernetes by explicitly marking a node as unschedulable and deleting pods\non the node before rebooting.\n\n## Design\n\nFlatcar Linux Update Operator is divided into two parts: `update-operator` and `update-agent`.\n\n`update-agent` runs as a DaemonSet on each node, waiting for a `UPDATE_STATUS_UPDATED_NEED_REBOOT` signal via D-Bus from `update_engine`.\nIt will indicate via [node annotations](./pkg/constants/constants.go) that it needs a reboot.\n\n`update-operator` runs as a Deployment, watching changes to node annotations and reboots the nodes as needed.\nIt coordinates the reboots of multiple nodes in the cluster, ensuring that not too many are rebooting at once.\n\nCurrently, `update-operator` only reboots one node at a time.\n\n## Requirements\n\n- A Kubernetes cluster (\u003e= 1.6) running on Flatcar Container Linux\n- The `update-engine.service` systemd unit on each machine should be unmasked, enabled and started in systemd\n- The `locksmithd.service` systemd unit on each machine should be masked and stopped in systemd\n\nTo unmask a service, run `systemctl unmask \u003cname\u003e`.\nTo enable a service, run `systemctl enable \u003cname\u003e`.\nTo start/stop a service, run `systemctl start \u003cname\u003e` or `systemctl stop \u003cname\u003e` respectively.\n\nor using a [Container Linux Config](https://www.flatcar.org/docs/latest/provisioning/cl-config/) file:\n```\nsystemd:\n  units:\n    - name: locksmithd.service\n      mask: true\n    - name: update-engine.service\n      enabled: true\n```\n\n## Usage\n\nCreate the `update-operator` deployment and `update-agent` daemonset.\n\n```\nkubectl kustomize examples/deploy | kubectl apply -f-\n```\n\n## Test\n\nTo test that it is working, you can SSH to a node and trigger an update check by running `update_engine_client -check_for_update` or simulate a reboot is needed by running `locksmithctl send-need-reboot`.\n\nYou can also annotate one of your nodes using the command below. Shortly after, you should see the Node being drained as a preparation for the reboot.\n\n```sh\nexport NODE=\"\u003cnode name\u003e\"\nkubectl annotate node $NODE --overwrite \\\n    flatcar-linux-update.v1.flatcar-linux.net/reboot-needed=\"true\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflatcar%2Fflatcar-linux-update-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflatcar%2Fflatcar-linux-update-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflatcar%2Fflatcar-linux-update-operator/lists"}