-
Notifications
You must be signed in to change notification settings - Fork 95
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): make operator the default install for Spinnaker #304
base: master
Are you sure you want to change the base?
Conversation
Going to ask: SHOULD the operator be moved to the spinnaker project instead of the armory project as part of this? |
I think that probably makes sense. I've not kept up to date with the maintenance of it - does the Armory Enterprise operator depend on the open source one, or are they completely independent? |
Completely independent :) |
@jasonmcintosh yes, we intend to donate the armory/spinnaker-operator project to OSS as a requirement for this work :D There's some evolving thinking internally on how we manage the two operators going forward, but not ready to talk about it publicly quite yet. |
Got a link to this operator? This space has a few competing choices there. |
@jvz Here you go: This space == Spinnaker operators, or install and configure? The intent of this RFC is to decide on the default while allowing competing options to continue :) |
This looks like a solid project. The space was more so on the operators side, though it'd be great to work on standardizing one. The install and configure story is overly complex, and I'd love to see this simplify for common use cases like running in Kubernetes. |
So I've got a question about this operator: would this make it easier for us to eventually introduce more microservices and potentially split up existing ones into more well-defined domains? If this makes the operational aspects of configuration and deployment of new services more straightforward than the status quo, then I'd be highly supportive of this operator idea. Sometimes, I worry that our microservices are getting monolithic in parts which has been a result of the difficulty in introducing new services to the project whether they be official services in this project or custom ones related to plugins, extensions, or whatever. If this operator approach can help address this issue, then you've got my strong support here! |
1. fix small typo 2. add links to make it easier to find the obsoleted RFC (appeared only at the top before)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for raising this RFC!
It would be great to progress the Spinnaker installation and day2 management story.
The Operator looks to be a potential candidate.
Though I wonder if we're going far enough with the Operator?
RE: Halyard
Halyard's main features are: templating of Kubernetes manifests, validation of some configuration values, deploying to Kubernetes. Will talk to these separately in following sections.
Halyard has served us well but is difficult for users to run in a modern git based workflow.
It is also a maintenance burden for the community and complicates the Spinnaker release process.
It would be great to archive the Halyard repository providing there is another on-rails option for the community. All as per the linked Halyard-Lite RFC (thank you), this RFC, comments here, in our issues and other community locations.
The Operator currently takes a dependency on Halyard I believe which is something we should avoid going forward.
RE: Templating
The Spinnaker Operator CRD's are a kind of template.
When deploying a single Spinnaker, the user can keep these raw yaml manifests in git and deploy them with Spinnaker, kubectl, etc. I've done this with Kind.
When deploying multiple Spinnakers, the user will probably template the yaml manifests using their choice of tooling, e.g: Helm, Kustomize, etc.
By the time a user templates the Spinnaker Operator CRD's they could potentially template the raw Kubernetes Deployment/ConfigMap/etc.
So one alternative to Operator here would be for a base Kustomize installation to be provided.
Potentially a refactor of https://github.com/spinnaker/kustomization-base, especially now Spring Boot 2.4 has landed, simplifying *.yml file management.
The https://github.com/armory/spinnaker-kustomize-patches repo provide "recipes" in Halyard form for a lot of common configuration but could be converted to their native spinnaker.yml form.
Again with Spring Boot 2.4 we can drop each spinnaker-kustomize-patch
straight into the config dir, eg: /opt/spinnaker/config/<local|spring_profile>/<patch>.yml
RE: Validation
Halyard validates some configuration in ~/.hal/config
and other files.
Kleat also does this but is unmaintained.
With kubeval
, checkov
, and other Kubernetes yaml linters used in the community, we don't need to duplicate Kubernetes related validation in Spinnaker project.
The Spinnaker services also perform some validation on startup.
If the configuration is invalid in some ways the services won't start and in Kubernetes this will likely result in the existing Pods
with valid configuration continuing to handle requests.
It would be wonderful to have a schema validator (and generated docs?) for configuration that hooks into the codebases but I would consider these nice to haves (we don't have them now really).
RE: Deploying to Kubernetes
This is handled by Spinnaker, kubectl, terraform or any other tool used in the Kubernetes community.
RE: Other
Are there other features or elements of the Operator that I have missed? Please advise. :)
RE: Debians
Whilst it's not the subject of this RFC it is part of Halyard.
A basic Ansible playbook or Chef cookbook with the bare minimum could be provided as an alternative to Halyard. We could poll the community.
rfc/default-operator.md
Outdated
|
||
#### Kustomize / Kleat | ||
|
||
Refer to the Halyard Lite RFC |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How would a Spinnaker user manage configuration for multiple Spinnaker installations?
I see Armory has a collection of kustomize
patches for the Operator here: https://github.com/armory/spinnaker-kustomize-patches#kustomize-patches-for-armory
Is this repo involved in this RFC at all?
## Overview | ||
|
||
|
||
The current recommended way to deploy Spinnaker is by using Kleat. While Kleat has improved some aspects of installing and configuring Spinnaker, it is currently not being maintained since Google has left the project. This document proposes that Operator should replace Kleat as the default install method. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Whilst kleat
is available, the current official installation process is Halyard per the Spinnaker docs - https://spinnaker.io/docs/setup/install/
|
||
### Dependencies | ||
|
||
When this RFC is completed the Operator will depend on the Kleat library for configuration generation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Earlier in the doc we have:
The current recommended way to deploy Spinnaker is by using Kleat. While Kleat has improved some aspects of installing and configuring Spinnaker, it is currently not being maintained since Google has left the project. This document proposes that Operator should replace Kleat as the default install method.
- What functionality does/would
kleat
provide to the Operator? - If
kleat
is taken as a dependency then it will need security uplift and ongoing maintenance and development. Does the effort required for an initial uplift and then ongoing look reasonable?
|
||
Non-goals: | ||
|
||
- While this document focuses on making the experience of installing Spinnaker easier, it does not intend to deprecate or eliminate the current installation tool, Kleat |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not familiar with kleat adoption.
I see very little action in the #kleat
slack channel. Some questioning the state of the project and also comments on bypassing kleat and using kustomization-base directly.
Do you have an idea?
Migration to Operator will involve some one-time work to update any scripts or procedures that organizations have developed to deploy Spinnaker. | ||
While this will be a one-time migration effort, it will move users to tools that have wide adoption in the Kubernetes community and which are likely familiar to operators. This should simplify ongoing maintenance and updates to their Spinnaker deployment by reducing the amount that users need to learn about Spinnaker-specific tooling and instead leveraging their knowledge of more general Kubernetes tools. | ||
|
||
## Risks |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Halyard is also used to install Spinnaker via Debian packages.
If we do not provide an alternative for Debian users then they will continue to use Halyard and thus we need to continue to support Halyard + "new thing (operator/other)".
I'm not familiar enough with kleat
to comment but do you know if it's possible to use kleat
with a Debian install process?
Overall I'm onboard with replacing the Halyard Kubernetes offering with something and tackling Debian installation separately with whatever is appropriate in that space (Ansible, chef, etc).
The problem I've found, and that I have with operator/Kleat/any other Kustomize based install, is that when you're operating multiple instances of Spinnaker the file structure can become extremely unwieldy with overrides across each instance. There are other issues with the Operator (and also the Operator/Halyard combo) approach that I've encountered, that I think would need solving before it can be considered an optimal install process:
|
IMO, Operator as a concept has not taken off as much as it was anticipated. Originally, from what I understood at that time, operator was thought as a mechanism that allowed users/groups to install/upgrade software that is controlled at org-level from the UI with a click of a button. In Spinnaker context, it kind of adds another layer of complexity and, IMHO, the benefits provided do not seem to add-up, particularly in the context of the alternatives. All said and done, Halyard is pretty good for most of the use-cases- it processes .hal/config and other files and creates the yamls. The problem is if we need something that is not supported by Halyard, we need to workaround. An alternative, IMO, would be what someone already mentioned: Kustomize. Gives full controll over each of the yamls. We could break-up the .hal/config into multiple files, based on purpose (accounts, artifacts, etc.) making it lot more maintainable..not everyone needs all of the account-types, artifact-types, etc. My 2 cents. |
No description provided.