From bf6b2e4def72ded1502be37d5b523b01e9c4a03f Mon Sep 17 00:00:00 2001 From: Kenneth Owens Date: Mon, 11 Sep 2017 16:17:12 -0700 Subject: [PATCH] Update StatefulSet Basics for 1.8 release --- .../basic-stateful-set.md | 103 ++---------------- docs/tutorials/stateful-application/web.yaml | 5 +- docs/tutorials/stateful-application/webp.yaml | 5 +- 3 files changed, 20 insertions(+), 93 deletions(-) diff --git a/docs/tutorials/stateful-application/basic-stateful-set.md b/docs/tutorials/stateful-application/basic-stateful-set.md index 557e8488bddd6..9c3c527010119 100644 --- a/docs/tutorials/stateful-application/basic-stateful-set.md +++ b/docs/tutorials/stateful-application/basic-stateful-set.md @@ -447,100 +447,12 @@ caused by scaling the StatefulSet down. ## Updating StatefulSets -In Kubernetes 1.7, the StatefulSet controller supports automated updates. The +In Kubernetes 1.7 and later, the StatefulSet controller supports automated updates. The strategy used is determined by the `spec.updateStrategy` field of the StatefulSet API Object. This feature can be used to upgrade the container images, resource requests and/or limits, labels, and annotations of the Pods in a -StatefulSet. There are two valid update strategies, `OnDelete` and -`RollingUpdate`. - -### On Delete -The `OnDelete` update strategy implements the legacy (prior to 1.7) behavior, -and it is the default update strategy. When you select this update strategy, -the StatefulSet controller will not automatically update Pods when a -modification is made to the StatefulSet's `.spec.template` field. - -Patch the container image for the `web` StatefulSet. - -```shell -kubectl patch statefulset web --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"gcr.io/google_containers/nginx-slim:0.7"}]' -"web" patched -``` - -Delete the `web-0` Pod. - -```shell -kubectl delete pod web-0 -pod "web-0" deleted -``` - -Watch the `web-0` Pod, and wait for it to transition to Running and Ready. - -```shell -kubectl get pod web-0 -w -NAME READY STATUS RESTARTS AGE -web-0 1/1 Running 0 54s -web-0 1/1 Terminating 0 1m -web-0 0/1 Terminating 0 1m -web-0 0/1 Terminating 0 1m -web-0 0/1 Terminating 0 1m -web-0 0/1 Pending 0 0s -web-0 0/1 Pending 0 0s -web-0 0/1 ContainerCreating 0 0s -web-0 1/1 Running 0 3s -``` - -Get the `web` StatefulSet's Pods to view their container images. - -```shell{% raw %} -kubectl get pod -l app=nginx -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}' -web-0 gcr.io/google_containers/nginx-slim:0.7 -web-1 gcr.io/google_containers/nginx-slim:0.8 -web-2 gcr.io/google_containers/nginx-slim:0.8 -{% endraw %}``` - -`web-0` has had its image updated, but `web-1` and `web-2` still have the original -image. Complete the update by deleting the remaining Pods. - -```shell -kubectl delete pod web-1 web-2 -pod "web-1" deleted -pod "web-2" deleted -``` - -Watch the StatefulSet's Pods, and wait for all of them to transition to Running and Ready. - -``` -kubectl get pods -w -l app=nginx -NAME READY STATUS RESTARTS AGE -web-0 1/1 Running 0 8m -web-1 1/1 Running 0 4h -web-2 1/1 Running 0 23m -NAME READY STATUS RESTARTS AGE -web-1 1/1 Terminating 0 4h -web-1 1/1 Terminating 0 4h -web-1 0/1 Pending 0 0s -web-1 0/1 Pending 0 0s -web-1 0/1 ContainerCreating 0 0s -web-2 1/1 Terminating 0 23m -web-2 1/1 Terminating 0 23m -web-1 1/1 Running 0 4s -web-2 0/1 Pending 0 0s -web-2 0/1 Pending 0 0s -web-2 0/1 ContainerCreating 0 0s -web-2 1/1 Running 0 36s -``` - -Get the Pods to view their container images. - -```shell{% raw %} -kubectl get pod -l app=nginx -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}' -web-0 gcr.io/google_containers/nginx-slim:0.7 -web-1 gcr.io/google_containers/nginx-slim:0.7 -web-2 gcr.io/google_containers/nginx-slim:0.7 -{% endraw %}``` - -All the Pods in the StatefulSet are now running a new container image. +StatefulSet. There are two valid update strategies, `RollingUpdate` and +`OnDelete`. ### Rolling Update @@ -797,6 +709,15 @@ gcr.io/google_containers/nginx-slim:0.7 By moving the `partition` to `0`, you allowed the StatefulSet controller to continue the update process. +### On Delete + +The `OnDelete` update strategy implements the legacy (1.6 and prior) behavior, +When you select this update strategy, he StatefulSet controller will not +automatically update Pods when a modification is made to the StatefulSet's +`.spec.template` field. This strategy can be selected by setting the +`.spec.template.updateStrategy.type` to `OnDelete`. + + ## Deleting StatefulSets StatefulSet supports both Non-Cascading and Cascading deletion. In a diff --git a/docs/tutorials/stateful-application/web.yaml b/docs/tutorials/stateful-application/web.yaml index f5f246c47f7e9..53e97648d41bd 100644 --- a/docs/tutorials/stateful-application/web.yaml +++ b/docs/tutorials/stateful-application/web.yaml @@ -13,13 +13,16 @@ spec: selector: app: nginx --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1beta2 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 2 + selector: + matchLabels: + app: nginx template: metadata: labels: diff --git a/docs/tutorials/stateful-application/webp.yaml b/docs/tutorials/stateful-application/webp.yaml index 0a56f234e0cfc..91630d56e0f0f 100644 --- a/docs/tutorials/stateful-application/webp.yaml +++ b/docs/tutorials/stateful-application/webp.yaml @@ -13,7 +13,7 @@ spec: selector: app: nginx --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1beta2 kind: StatefulSet metadata: name: web @@ -21,6 +21,9 @@ spec: serviceName: "nginx" podManagementPolicy: "Parallel" replicas: 2 + selector: + matchLabels: + app: nginx template: metadata: labels: