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

Requirements for Carvel configuration #3752

Closed
wants to merge 3 commits into from

Conversation

carlisia
Copy link
Contributor

This is the start of a design document for the guidelines for the Velero installation using Carvel. It only covers goals and requirements.

The issue for the finalized document is tracked here: (#3709)

Signed-off-by: Carlisia [email protected]

Fixes #3742

Please indicate you've done the following:

@carlisia carlisia added the Area/Design Design Documents label Apr 30, 2021
@carlisia carlisia requested review from dsu-igeek and nrb April 30, 2021 15:45
Signed-off-by: Carlisia <[email protected]>
@carlisia
Copy link
Contributor Author

carlisia commented May 3, 2021

Note: I have to add the current Velero scenarios we support, and what we will aim to support with Carvel. Even so, the current list of requirements could use a review.

- The toolset and artifacts must be setup in a way that it will access and consume the CRDs that match the intended Velero version. Users should have uncomplicated access to the proper versions of the CRDs to be able to upgrade and downgrade Velero.
- The toolset and artifacts must be laid out in a directory structure in a way that it can be discovered and used by other projects.
- Migrate deployment configuration from using Go code to using Carvel manifests, and wrap the `install` command around the toolset.
- Deprecate the `install` command once the Carvel tooling is fully setup and well tested.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we'll actually be able to deprecate "install", since Carvel also relies on installing KAPP which seems like a lot to ask the non-Tanzu user to do to install Velero. I think it would be possible, though, to call the Karvel libraries from the CLI and have the CLI use Carvel as a library to generate the installation yamls

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm removing this line because now that I think about it, that's what the line above says (wrap aroun a Carvel library).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure how kapp factors into this effort. Our current install commands drives the installation of resources and updates to the configuration. It does nothing beyond that. Our controllers do the work of keeping track of changes in the cluster. From this perspective, the Carvel tooling cli can do everything our install and Go code does (in which case we could deprecate the install barring another reason to keep it), once we have the templates in place, which we will need for Tanzu and any other configuration consumer. Am I missing anything?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh lord. Please ignore my ramblings above, my mind was elsewhere. Apologies!

@dsu-igeek I was very much assuming that we could require the installation and use of any of the Carvel tooling for the non Tanzu Velero user. As far as I am understanding, this would mean ytt for configuration and kapp for deployment for the requirements we have. Is this not correct? We can require ytt but not kapp? Something else?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Explanation: I read your KAPP in all caps and my brain had translated it into kapp-controller, but my comment doesn't make sense even so. Ha.

- The toolset and artifacts must be laid out in a directory structure in a way that it can be discovered and used by other projects.
- Migrate deployment configuration from using Go code to using Carvel manifests, and wrap the `install` command around the toolset.
- Deprecate the `install` command once the Carvel tooling is fully setup and well tested.
- Envirornments that need to be supported: AWS, VSphere, Azure.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kind as well

design/carvel-install-design.md Show resolved Hide resolved
@carlisia carlisia requested a review from dsu-igeek May 11, 2021 23:29
@dsu-igeek dsu-igeek added this to the v1.7.0 milestone May 14, 2021
Copy link
Contributor

@dsu-igeek dsu-igeek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. I have a few questions, but once you have an answer for those I think we're ready to move forward. Thanks!

## Requirements
### Organization
- The generated Velero configuration templates and artifacts must be kept in the Velero GitHub repository.
- The confiruation artifacts must be be laid out in a directory structure in a way that conforms with the expected standard so that they can be easily discovered by configuration consumers.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

confiruation -> configuration

- For compatibility with devops, Velero must continue to provide a `dry-run` option via the Carvel tooling for outputing configuration artifacts without installing them.
- Because the Carvel tooling, given proper templates, offers full functionality to do what the current Velero install command does, namelly create deployment and other resources in Kubernetes clusters, as well as update them, a path to deprecating that command could be considered and defined. An intermediate step might be to wrap the `install` command around the Carvel tooling.
- Documentation and sample templates to be used by the configuration consumers must be provided for each environment supported.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about uninstall? Is this something that can be handled via the Carvel framework?

| Backup/restore of K8s resources | ✅ | ✅ | ✅ | ✅ |
| Backup/restore of PVs via plugins | ✅ | ✅ | ✅ | N/A |
| Backup/restore of PVs with restic | ✅ | ✅ | ✅ | N/A |

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add some specifics for the platforms, for MVP, e.g. for vSphere we need to be able to install the AWS plugin and the vSphere plugin. Add the configuration variables that are needed to do an install on each of these (e.g. provider, plug-in, bucket, secret-file, etc.)

| Backup/restore of K8s resources | ✅ | ✅ | ✅ | ✅ |
| Backup/restore of PVs via plugins | ✅ | ✅ | ✅ | N/A |
| Backup/restore of PVs with restic | ✅ | ✅ | ✅ | N/A |

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For plug-ins, do we want to be able to specify plug-in versions separate from Velero versions or do we wrap all of that together in a single "release" and create a new release if we have a Velero or plug-in update?

@reasonerjt reasonerjt removed this from the v1.7.0 milestone Aug 31, 2021
@carlisia
Copy link
Contributor Author

Closing this as it has been done in the TCE repo.

@carlisia carlisia closed this Jan 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area/Design Design Documents
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Requirements for the Carvel integration
3 participants