Update StatefulSet Basics for 1.8 release (#5398)
This commit is contained in:
committed by
Steve Perry
parent
3810cb23cb
commit
90d95e7ab2
@@ -447,100 +447,12 @@ caused by scaling the StatefulSet down.
|
|||||||
|
|
||||||
## Updating StatefulSets
|
## 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
|
strategy used is determined by the `spec.updateStrategy` field of the
|
||||||
StatefulSet API Object. This feature can be used to upgrade the container
|
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
|
images, resource requests and/or limits, labels, and annotations of the Pods in a
|
||||||
StatefulSet. There are two valid update strategies, `OnDelete` and
|
StatefulSet. There are two valid update strategies, `RollingUpdate` and
|
||||||
`RollingUpdate`.
|
`OnDelete`.
|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||
### Rolling Update
|
### 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
|
By moving the `partition` to `0`, you allowed the StatefulSet controller to
|
||||||
continue the update process.
|
continue the update process.
|
||||||
|
|
||||||
|
### On Delete
|
||||||
|
|
||||||
|
The `OnDelete` update strategy implements the legacy (1.6 and prior) behavior,
|
||||||
|
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. This strategy can be selected by setting the
|
||||||
|
`.spec.template.updateStrategy.type` to `OnDelete`.
|
||||||
|
|
||||||
|
|
||||||
## Deleting StatefulSets
|
## Deleting StatefulSets
|
||||||
|
|
||||||
StatefulSet supports both Non-Cascading and Cascading deletion. In a
|
StatefulSet supports both Non-Cascading and Cascading deletion. In a
|
||||||
|
|||||||
@@ -13,13 +13,16 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
app: nginx
|
app: nginx
|
||||||
---
|
---
|
||||||
apiVersion: apps/v1beta1
|
apiVersion: apps/v1beta2
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: web
|
name: web
|
||||||
spec:
|
spec:
|
||||||
serviceName: "nginx"
|
serviceName: "nginx"
|
||||||
replicas: 2
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: nginx
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
app: nginx
|
app: nginx
|
||||||
---
|
---
|
||||||
apiVersion: apps/v1beta1
|
apiVersion: apps/v1beta2
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: web
|
name: web
|
||||||
@@ -21,6 +21,9 @@ spec:
|
|||||||
serviceName: "nginx"
|
serviceName: "nginx"
|
||||||
podManagementPolicy: "Parallel"
|
podManagementPolicy: "Parallel"
|
||||||
replicas: 2
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: nginx
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
|
|||||||
Reference in New Issue
Block a user