⎈ k8s knowledge compiler

Perform a Rollback on a DaemonSet [page]deterministic

tasks

This page shows how to perform a rollback on a [daemonset](#gloss:daemonset).

##

You should already know how to [perform a rolling update on a DaemonSet](/docs/tasks/manage-daemon/update-daemon-set/).

## Performing a rollback on a DaemonSet

### Step 1: Find the DaemonSet revision you want to roll back to

You can skip this step if you only want to roll back to the last revision.

List all revisions of a DaemonSet:

```shell kubectl rollout history daemonset <daemonset-name> ```

This returns a list of DaemonSet revisions:

``` daemonsets "<daemonset-name>" REVISION CHANGE-CAUSE 1 ... 2 ... ... ```

* Change cause is copied from DaemonSet annotation `kubernetes.io/change-cause` to its revisions upon creation. You may specify `--record=true` in `kubectl` to record the command executed in the change cause annotation.

To see the details of a specific revision:

```shell kubectl rollout history daemonset <daemonset-name> --revision=1 ```

This returns the details of that revision:

``` daemonsets "<daemonset-name>" with revision #1 Pod Template: Labels: foo=bar Containers: app: Image: ... Port: ... Environment: ... Mounts: ... Volumes: ... ```

### Step 2: Roll back to a specific revision

```shell # Specify the revision number you get from Step 1 in --to-revision kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision> ```

If it succeeds, the command returns:

``` daemonset "<daemonset-name>" rolled back ```

> Note: If `--to-revision` flag is not specified, kubectl picks the most recent revision.

### Step 3: Watch the progress of the DaemonSet rollback

`kubectl rollout undo daemonset` tells the server to start rolling back the DaemonSet. The real rollback is done asynchronously inside the cluster [control plane](#gloss:control-plane).

To watch the progress of the rollback:

```shell kubectl rollout status ds/<daemonset-name> ```

When the rollback is complete, the output is similar to:

``` daemonset "<daemonset-name>" successfully rolled out ```

## Understanding DaemonSet revisions

In the previous `kubectl rollout history` step, you got a list of DaemonSet revisions. Each revision is stored in a resource named ControllerRevision.

To see what is stored in each revision, find the DaemonSet revision raw resources:

```shell kubectl get controllerrevision -l <daemonset-selector-key>=<daemonset-selector-value> ```

This returns a list of ControllerRevisions:

``` NAME CONTROLLER REVISION AGE <daemonset-name>-<revision-hash> DaemonSet/<daemonset-name> 1 1h <daemonset-name>-<revision-hash> DaemonSet/<daemonset-name> 2 1h ```

Each ControllerRevision stores the annotations and template of a DaemonSet revision.

`kubectl rollout undo` takes a specific ControllerRevision and replaces DaemonSet template with the template stored in the ControllerRevision. `kubectl rollout undo` is equivalent to updating DaemonSet template to a previous revision through other commands, such as `kubectl edit` or `kubectl apply`.

> Note: DaemonSet revisions only roll forward. That is to say, after a rollback completes, the revision number (`.revision` field) of the ControllerRevision being rolled back to will advance. For example, if you have revision 1 and 2 in the system, and roll back from revision 2 to revision 1, the ControllerRevision with `.revision: 1` will become `.revision: 3`.

## Troubleshooting

* See [troubleshooting DaemonSet rolling update](/docs/tasks/manage-daemon/update-daemon-set/#troubleshooting).

Sources

tasks/manage-daemon/rollback-daemon-set.md · docPerform a Rollback on a DaemonSet

Related (10)

references DaemonSetdaemonset conf=1
references Control Planecontrol plane conf=1
part_of {{% heading "prerequisites" %}}describes conf=1
part_of Performing a rollback on a DaemonSetdescribes conf=1
part_of Understanding DaemonSet revisionsdescribes conf=1
part_of Troubleshootingdescribes conf=1
part_of Step 2: Roll back to a specific revisiondescribes conf=1
api_for DaemonSetdocuments API object conf=1

← all Docs