Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Orchestrate rollout of bulk changes #717

Open
liamfallon opened this issue Apr 8, 2024 · 0 comments
Open

Orchestrate rollout of bulk changes #717

liamfallon opened this issue Apr 8, 2024 · 0 comments
Labels
area/porch Porch related issues enhancement New feature or request

Comments

@liamfallon
Copy link
Member

Original issue URL: kptdev/kpt#3348
Original issue user: https://github.com/bgrant0607
Original issue created at: 2022-07-07T15:22:52Z
Original issue last updated at: 2022-11-16T03:10:19Z
Original issue body: There are a number of types of bulk operations we want to be able to make:

  • Package generation: #3347
  • Upgrades: #3243
  • Function upgrades: #3309
  • Function execution: #3350
  • Promotion across environments: #3280
  • Promotion across clusters within an environment

and so on.

The existing edit, propose, approve workflow is sometimes appropriate and desirable, but gets tedious at scale. We'll want to automatically vet and bulk review (diff with previous), preview (diff with live / dry run), and approve changes, then orchestrate gradual rollout (or rollback) of the changes.

Generally I recommend pinning syncs to specific revisions / commits / digests, much as with container images -- pulling from head is tantamount to pulling from :latest. That has a number of benefits, such as providing an API-level signal that an update has been pushed, but in this case enables decoupling the authoring time, with a human in the loop, from the deployment time. We should be able to orchestrate updates of pinned revisions even for RootSync and RepoSync objects in storage, such as by following annotations back to the sources of truth.

This is where ProdSpec and Annealing fit in:
https://www.usenix.org/publications/loginonline/prodspec-and-annealing-intent-based-actuation-google-production

In Kubernetes, KRM solves the NxM problem. For instance, Config Connector, Crossplane, and other Operators orchestrate arbitrary external resources using custom resources (~Assets).

A ProdSpec Partition is kind of like a package or repo in kpt/porch. An Incarnation is approximately a revision. Our sources of data are (currently) git and OCI.

Instead of an out-of-place generation pipeline, with kpt and porch, we're generating eagerly and in place (though package generation blurs this line a bit). This reduces coupling of automation, such as security remediation, and enables interactive workflows, particularly GUIs.

Another model to consider in addition to rollout is coordination, similar to a semaphore or pod disruption budget:
https://github.com/kinvolk/nebraska-update-agent

As with any rollout mechanism, figuring out whether something went wrong will be a key part as well.

cc @mortent @justinsb @barney-s

Original issue comments:
Comment user: https://github.com/johnbelamaric
Comment created at: 2022-08-11T20:47:51Z
Comment last updated at: 2022-08-11T20:47:51Z
Comment body: Is this intended to be bulk changes across packages within a cluster, or bulk changes of a package across clusters, or both? It may be helpful to separate those user journeys.

Comment user: https://github.com/johnbelamaric
Comment created at: 2022-09-02T23:40:57Z
Comment last updated at: 2022-09-02T23:40:57Z
Comment body: Another approach, which at least in this conception does not use pinned commits but instead uses the package lifecycle states to control rollout: kptdev/kpt#3455 (comment)

I believe it is possible to decouple the actuation of the rollout (Publish vs pinned commit) from the rollout policy, selection, and evaluation mechanisms, though. That would enable either lifecycle state or commit pinning to be used.

@tliron tliron transferred this issue from another repository Apr 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/porch Porch related issues enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant