Comments (5)
We seem to have agreement on adding this behind a flag. The flag used when discussing was --watch-statefulsets
but I think --watch-ondelete
might be more accurate.
from krane.
We seem to have agreement on adding this behind a flag. The flag used when discussing was --watch-statefulsets but I think --watch-ondelete might be more accurate.
I suggest extending the krane.shopify.io/required-rollout
annotation to StatefulSet for this purpose, to allow the behaviour to be controlled on a per-resource basis using a style Krane users are already accustomed to. I suggest the only accepted values be full
and none
. The effective default value should be "full" for RollingUpdate SS. For OnDelete SS, I think it depends on whether or not the Krane team is willing to cut a major version for this, since defaulting to expecting progress where we used to expect nothing could be a breaking change. Arguably, defaulting to watching as much of the rollout as possible is the better default for a rollout monitoring tool, and having the default value not change based on part of the SS is easier to understand.
from krane.
One note: There is a bug in K8s currently where for Statefulsets with an update strategy of OnDelete, the status.currentRevision
will NOT be updated when all the pods have been updated to status.updateRevision
. There is an active PR with a fix being worked on. Until then, the status can still be checked using readyReplicas
, replicas
and updatedReplicas
(which does get updated). If updatedReplicas
does not match replicas
then pods have not been updated to the latest revision and readyReplicas
can be used to check for their actual health.
observed_generation == current_generation &&
desired_replicas == status_data['readyReplicas'].to_i == status_data['updatedReplicas'].to_i
Once the PR with the fix is merged, the same existing logic used for RollingUpdate
can be used for OnDelete
As indicated with the checkbox, I am more than happy to work on this
from krane.
The current possible annotation values are as follows:
full
: The deployment is successful when all pods in the newreplicaSet
are ready.
none
: The deployment is successful as soon as the newreplicaSet
is created for the deployment.
We don't believe none
is compatible with StatefulSets: eg. currently, a Deployment with the none
annotation is marked as successful once the latest replicaSet has been created, but StatefulSets don't use replicaSets create/delete pods (unlike Deployments).
Any recommendations for a new definition to use for none
? As a starting point, thoughts on:
none
: for StatefulSets, the deployment is successful whenobservedGeneration == generation
(example) (don't think this is sufficient because the same check is needed fordeploy_failed
to be true)
from krane.
In this PR, I've updated krane to support checking for successful StatefulSet deploys when updateStrategy: OnDelete
. I've extended the krane.shopify.io/required-rollout annotation to be compatible with StatefulSet resources.
Now, for all StatefulSets, krane checks the following to confirm a successful deploy:
observed_generation == current_generation
status_data['updateRevision'] == pod_data["metadata"]["labels"]["controller-revision-hash"]
For updateStrategy: OnDelete
&& required-rollout: full
, krane also checks:
replicas == readyReplicas == updatedReplicas
For updateStrategy: OnDelete
with no specified required-rollout value, no additional checks are conducted. The code runs as it did previously.
For updateStrategy: RollingUpdate
, the additional checks remain the same as before:
replicas == readyReplicas == currentReplicas && currentRevision == updateRevision
from krane.
Related Issues (20)
- Krane failing with the latest ubuntu version on github actions HOT 1
- uninitialized constant ActiveSupport::XmlMini::IsolatedExecutionState HOT 6
- Ensure deploy tasks fail without at least one non-empty resourc
- unable to recognize "/yaml Path": no matches for kind "EnvoyFilter" in version "networking.istio.io/v1beta1
- Wrong CRD may be referenced by Custom Resource with duplicate Kind HOT 1
- Wrong CRD may be referenced by Custom Resource in global_deploy
- Deployment with Gitlab-Agent/KAS fails
- Error retrieving raw URIs from Rancher / Proxied-APIs HOT 3
- krane restart hits testing code path and silently fails HOT 3
- Krane is unable to fully deploy resources when there are duplicate Kinds
- Terrible performance HOT 1
- option to predeploy any resource HOT 3
- Stop pruning `Event` resources on deploy.
- Piping render to deploy command is potentially dangerous HOT 1
- Option to hard-fail when current_sha is empty
- kubectl 1.26 flag changes
- Krane 3.0.1 does not work on Kubernetes 1.25 for HPA resources
- Can the dependency on colorize be updated to use the new 1.x versions from 2023 (and no longer the 0.8 versions from 2016)?
- Error during install
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from krane.