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

feat(rfc): RFC to replace Halyard #89

Merged
merged 6 commits into from
Jan 9, 2020
Merged

feat(rfc): RFC to replace Halyard #89

merged 6 commits into from
Jan 9, 2020

Conversation

ezimanyi
Copy link
Contributor

@ezimanyi ezimanyi commented Jan 3, 2020

The current recommended way to deploy Spinnaker is by using Halyard. While Halyard has greatly simplified some aspects of installing and configuring Spinnaker, it has a number of shortcomings that are particularly apparent when deploying to Kubernetes. This document proposes replacing Halyard with a smaller tool that integrates better into the Kubernetes ecosystem.

The current recommended way to deploy Spinnaker is by using Halyard.
While Halyard has greatly simplified some aspects of installing and
configuring Spinnaker, it has a number of shortcomings that are
particularly apparent when deploying to Kubernetes. This document
proposes replacing Halyard with a smaller tool that integrates better
into the Kubernetes ecosystem.
rfc/halyard-lite.md Outdated Show resolved Hide resolved
Copy link
Contributor

@ethanfrogers ethanfrogers left a comment

Choose a reason for hiding this comment

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

Excellent work @ezimanyi! I can't wait to see where this takes us in the future. I'm sure you've planned for this but I'd love to see us talk about this in the Kubernetes SIG and get a sense for how much of a lift it would be for those users to migrate.

this would reduce both the maintenance burden on Halyard and the barrier to entry
to Spinnaker for users familiar with these tools.

### Dynamic configuration
Copy link
Member

Choose a reason for hiding this comment

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

What is Spring Cloud Config's approach to the GitOps/IAC motivation @ethanfrogers mentioned above?

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 think in general the approach is that config files can live in a source repository, and the running service can directly reference that repository. In general, that works fine, as the config can be directly edited in the desired repo then be picked up by the service.

Where this doesn't interact well with Halyard is that it generates the service configs as transient files and then directly applies them; the generation of config is coupled to the deployment of that config. After the changes in this RFC, I could imagine someone wanting to use Spring Cloud config deciding to commit the files generated by Halyard Lite to a config repo. So the workflow would be:

  • Edit the checked in hal config
  • As part of the build step, run Halyard Lite to generate service configs, and also check those in
  • Commit the full changes

Then when you deploy services, instead of deploying configs alongside them, just point them at your repo.

Let me know if this answers the question!

rfc/halyard-lite.md Show resolved Hide resolved
rfc/halyard-lite.md Outdated Show resolved Hide resolved
rfc/halyard-lite.md Outdated Show resolved Hide resolved
rfc/halyard-lite.md Show resolved Hide resolved
rfc/halyard-lite.md Show resolved Hide resolved
rfc/halyard-lite.md Show resolved Hide resolved
rfc/halyard-lite.md Outdated Show resolved Hide resolved
rfc/halyard-lite.md Outdated Show resolved Hide resolved
rfc/halyard-lite.md Show resolved Hide resolved
configs as well as (possibly) some metadata about the Spinnaker deployment (ex: the versions
of containers to pull) but the exact format will be determined in concert with early consumers.
* The exact format of the Helm chart and Kustomize kustomization that will be provided to support
installation to Spinnaker remains unspecified.
Copy link
Member

Choose a reason for hiding this comment

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

Also: How do we correctly communicate that, yes, Spinnaker is k8s native via this work, without making non-k8s users feel abandoned or pressured to move onto k8s.

Copy link
Member

Choose a reason for hiding this comment

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

One of my hopes with the stats collection is to be able to quantify these groups - how many deployments are going against which providers.

Copy link
Member

Choose a reason for hiding this comment

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

I'm not sure I follow - are you implying that we're hoping k8s has significant enough adoption we don't need to address the rest?

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've added a point to "Non-goals" to explicitly state that this document does not intend to deprecate non-Kubernetes install pathways (even as it focuses on making Kubernetes installs easier).

individual microservices do have access to.

Halyard will reduce the scope of its validation efforts. It will focus on
validating the well-formedness of the Halyard config, but will no longer
Copy link
Contributor

Choose a reason for hiding this comment

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

👍

@ajordens
Copy link
Contributor

ajordens commented Jan 8, 2020

Love it, thanks for the detailed RFC @ezimanyi.

@ezimanyi ezimanyi merged commit c1cf62b into spinnaker:master Jan 9, 2020
@ezimanyi ezimanyi deleted the halyard-rfc branch January 9, 2020 20:19
and make requests using them. Validating the well-formedness of the config will
involve both:
* Validating the structure of the config
* Performing simple validation on the values supplied in the config, such as
Copy link

Choose a reason for hiding this comment

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

Halyard also performed some additional simple validation that doesn't fall into the well-formedness or auth* categories:

+ Get current deployment
  Success
+ Get persistent store
  Success
Validation in default.persistentStorage:
- WARNING Your deployment will most likely fail until you configure
  and enable a persistent store.

Will simple checks like this still be in scope?

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 think checks like that would be in scope; I suppose that's a bit broader than just checking each individual value, but I could imagine things of the type "you must have at least one of X" configured would be in scope.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants