-
Notifications
You must be signed in to change notification settings - Fork 14.6k
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
StatefulSet AutoDelete blog post #30596
Conversation
5a814c2
to
0a7e28a
Compare
✔️ Deploy Preview for kubernetes-io-main-staging ready! 🔨 Explore the source changes: 6d4ff36 🔍 Inspect the deploy log: https://app.netlify.com/sites/kubernetes-io-main-staging/deploys/619bd8cf5778890007264ce9 😎 Browse the preview: https://deploy-preview-30596--kubernetes-io-main-staging.netlify.app |
✔️ Deploy Preview for kubernetes-io-main-staging ready! 🔨 Explore the source changes: 1e7731f 🔍 Inspect the deploy log: https://app.netlify.com/sites/kubernetes-io-main-staging/deploys/61b00d556a61bd0007ede7e0 😎 Browse the preview: https://deploy-preview-30596--kubernetes-io-main-staging.netlify.app |
99a6279
to
9da7226
Compare
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.
Nice!
One nit though. Please change all the site links to relative links
If you have a hyperlink that starts https://kubernetes.io/docs/
, that should be /docs/
…
content/en/blog/_posts/2021-12-15-StatefulSet-PVC-Auto-Deletion.md
Outdated
Show resolved
Hide resolved
content/en/blog/_posts/2021-12-15-StatefulSet-PVC-Auto-Deletion.md
Outdated
Show resolved
Hide resolved
content/en/blog/_posts/2021-12-15-StatefulSet-PVC-Auto-Deletion.md
Outdated
Show resolved
Hide resolved
content/en/blog/_posts/2021-12-15-StatefulSet-PVC-Auto-Deletion.md
Outdated
Show resolved
Hide resolved
thx, done. |
I checked this with a local server and it seems to look good. |
From a docs (and blog team) point of view, this informally LGTM. |
content/en/blog/_posts/2021-12-15-StatefulSet-PVC-Auto-Deletion.md
Outdated
Show resolved
Hide resolved
/milestone v1.23 |
@jimangel: The provided milestone is not valid for this repository. Milestones in this repository: [ Use In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
Take two: |
@karenhchu is the date (2021-12-16) right for this one? |
It's correct. The path also needs to be updated: (content/en/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md) |
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.
@mattcary could you update the path:
content/en/blog/_posts/2021-12-15-StatefulSet-PVC-Auto-Deletion.md
to match the new publication date?
Another option is that we merge this and then do a fixup PR; if you've got the cycles for it, I'd prefer to have it land with the right path.
PS I've mentioned some nits, but those are optional to fix. Only work on those if you do have time.
content/en/blog/_posts/2021-12-15-StatefulSet-PVC-Auto-Deletion.md
Outdated
Show resolved
Hide resolved
* **whenDeleted and whenScaled are both Retain.** This matches the existing behavior for StatefulSets, where no PVCs are deleted. This is also the default retention policy. It’s appropriate to use when data on StatefulSet volumes may be irreplaceable and should only be deleted manually. | ||
|
||
* **whenDeleted is Delete and whenScaled is Retain.** In this case, PVCs are deleted only when the entire StatefulSet is deleted. If the StatefulSet is scaled down, PVCs are not touched, meaning they are available to be reattached if a scale-up occurs with any data from the previous replica. This might be used for a temporary StatefulSet, such as in a CI instance or ETL pipeline, where the data on the StatefulSet is needed only during the lifetime of the StatefulSet lifetime, but while the task is running the data is not easily reconstructible. Any retained state is needed for any replicas that scale down and then up. | ||
|
||
* **whenDeleted and whenScaled are both Delete.** PVCs are deleted immediately when their replica is no longer needed. Note this does not include when a Pod is deleted and a new version rescheduled, for example when a node is drained and Pods need to migrate elsewhere. The PVC is deleted only when the replica is no longer needed as signified by a scale-down or StatefulSet deletion. This use case is for when data does not need to live beyond the life of its replica. Perhaps the data is easily reconstructable and the cost savings of deleting unused PVCs is more important than quick scale-up, or perhaps that when a new replica is created, any data from a previous replica is not usable and must be reconstructed anyway. | ||
|
||
* **whenDeleted is Retain and whenScaled is Delete.** This is similar to the previous case, when there is little benefit to keeping PVCs for fast reuse during scale-up. An example of a situation where you might use this is an Elasticsearch cluster.. Typically you would scale that workload up and down to match demand, whilst ensuring a minimum number of replicas (for example: 3). When scaling down, data is migrated away from removed replicas and there is no benefit to retaining those PVCs. However, it can be useful to bring the entire Elasticsearch cluster down temporarily for maintenance. If you need to take the Elasticsearch system offline, you can do this by temporarily deleting the StatefulSet, and then bringing the Elasticsearch cluster back by recreating the StatefulSet. The PVCs holding the Elasticsearch data will still exist and the new replicas will automatically use them. |
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.
Within the bold bits, I'd be tempted to put whenDeleted
and whenScale
in backticks (like I did there). I think it'd actually be easier to read like that.
Also, a nit (I think it might actually be my typo from a previous suggestion):
this is an Elasticsearch cluster.. Typically
two periods
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.
This will also be easier on localization teams if you wrap these at 80 to 100 character length lines, rather than one paragraph per line.
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.
both done.
I also put Retain
and Delete
in backticks which is consistent what I've done in the text above.
This could use a technical review from |
/assign @smarterclayton |
We had sig-apps review the documentation, @smarterclayton from that sig was kind enough to do that and hopefully his graciousness will continue :) |
StatefulSet spec template for cases when they should be deleted automatically when the StatefulSet | ||
is deleted or pods in the StatefulSet are scaled down. | ||
|
||
## What problem does this solve? |
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.
should there be a blank line after this title?
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.
Markdown (CommonMark) doesn't require a blank line there. See https://deploy-preview-30596--kubernetes-io-main-staging.netlify.app/blog/2021/12/16/kubernetes-1-23-statefulset-pvc-auto-deletion/
retaining those PVCs. However, it can be useful to bring the entire Elasticsearch cluster down | ||
temporarily for maintenance. If you need to take the Elasticsearch system offline, you can do | ||
this by temporarily deleting the StatefulSet, and then bringing the Elasticsearch cluster back | ||
by recreating the StatefulSet. The PVCs holding the Elasticsearch data will still exist and the |
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.
"If you need to take the Elasticsearch system offline, you can temporarily delete the StatefulSet, then bring the Elasticsearch cluster back by recreating the StatefulSet." is more concise.
Maybe you're not looking for English editorial, though ☺
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 like that better... but given the deadline I think I'll do a post-PR update (see Tim's comment below)
replica. This might be used for a temporary StatefulSet, such as in a CI instance or ETL | ||
pipeline, where the data on the StatefulSet is needed only during the lifetime of the | ||
StatefulSet lifetime, but while the task is running the data is not easily reconstructible. Any | ||
retained state is needed for any replicas that scale down and then up. |
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.
If I Retain an openebs-hostpath PVC on scale-down, how does K8s know to scale-up a new Pod on the same Node as the PVC? My understanding of the creation-time scheduling is that the PVC is created on the Node selected for the Pod, but I'm not clear on how the affinity happens for a PVC that exists before the Pod.
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'd have to check that... but since Retain is currently existing behavior, a concise answer is "whatever happens right now" :-)
/approve |
/lgtm I can't see anything wrong with this article, it's due to publish today, and nobody has raised a serious objection. |
LGTM label has been added. Git tree hash: 805c1cfa0f3ab0c94df5cab90efbde51904e3c40
|
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.
/lgtm
deleted. | ||
|
||
The first situation is when the StatefulSet resource is deleted (which implies that all replicas are | ||
also deleted). This is controlled by the `whenDeleted` policy. The second situation, controlled by |
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.
also deleted). This is controlled by the `whenDeleted` policy. The second situation, controlled by | |
also deleted). This is controlled by the `whenDeleted` policy field. The second situation, controlled by |
The first situation is when the StatefulSet resource is deleted (which implies that all replicas are | ||
also deleted). This is controlled by the `whenDeleted` policy. The second situation, controlled by | ||
`whenScaled` is when the StatefulSet is scaled down, which removes some but not all of the replicas | ||
in a StatefulSet. In both cases the policy can either be `Retain`, where the corresponding PVCs are |
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.
in a StatefulSet. In both cases the policy can either be `Retain`, where the corresponding PVCs are | |
in a StatefulSet. In both cases the policy value can either be `Retain`, where the corresponding PVCs are |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: sftim, soltysh The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
@mattcary if you want to do post-publication tweaks based on #30596 (review) (in a new PR) then please do; if you're happy with it as it is, that's fine also. |
Thanks Tim. I don't disagree with any of the suggestions, but given bandwidth & review cycles I think I'm happy with the blog post as-is. I appreciate your help with this! |
Blog post for statefulset autodelete.
KEP 1847
Implementation PR #99728