# Melakukan Rollback pada DaemonSet

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

Laman ini memperlihatkan bagaimana caranya untuk melakukan _rollback_ pada sebuah <a class='glossary-tooltip' title='Memastikan salinan Pod dijalankan pada sekumpulan Node dalam satu klaster.' data-bs-toggle='tooltip' data-bs-placement='top' href='/id/docs/concepts/workloads/controllers/daemonset' target='_blank' aria-label='DaemonSet'>DaemonSet</a>.


## Sebelum kamu memulai

<p>Kamu harus memiliki klaster Kubernetes, dan perangkat baris perintah kubectl
juga harus dikonfigurasikan untuk berkomunikasi dengan klastermu. Jika kamu
belum memiliki klaster, kamu dapat membuatnya dengan menggunakan
<a href="/id/docs/tasks/tools/#minikube">minikube</a>,
atau kamu juga dapat menggunakan salah satu dari tempat mencoba Kubernetes berikut ini:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>
 
 
 Kubernetes servermu harus dalam versi yang sama atau lebih baru dari 1.7.
  <p>Untuk melihat versi, tekan  <code>kubectl version</code>.</p>


Sebelum lanjut, alangkah baiknya jika kamu telah mengetahui cara
untuk [melakukan _rolling update_ pada sebuah DaemonSet](/docs/tasks/manage-daemon/update-daemon-set/).

<!-- steps -->

## Melakukan _rollback_ pada DaemonSet

### Langkah 1: Dapatkan nomor revisi DaemonSet yang ingin dikembalikan

Lompati langkah ini jika kamu hanya ingin kembali (_rollback_) ke revisi terakhir.

Perintah di bawah ini akan memperlihatkan daftar semua revisi dari DaemonSet:

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

Perintah tersebut akan menampilkan daftar revisi seperti di bawah:

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

* Alasan perubahan (_change cause_) kolom di atas merupakan salinan dari anotasi `kubernetes.io/change-cause` yang berkaitan dengan revisi pada DaemonSet. Kamu boleh menyetel _flag_ `--record=true` melalui `kubectl` untuk merekam perintah yang dijalankan akibat dari anotasi alasan perubahan.

Untuk melihat detail dari revisi tertentu, jalankan perintah di bawah ini:

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

Perintah tersebut memberikan detail soal nomor revisi tertentu:

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

### Langkah 2: _Rollback_ ke revisi tertentu

```shell
# Tentukan nomor revisi yang kamu dapatkan dari Langkah 1 melalui --to-revision
kubectl rollout undo daemonset <nama-daemonset> --to-revision=<nomor-revisi>
```

Jika telah berhasil, perintah tersebut akan memberikan keluaran berikut:

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


<div class="alert alert-info" role="note"><h4 class="alert-heading">Catatan:</h4>Jika <em>flag</em> <code>--to-revision</code> tidak diberikan, maka kubectl akan memilihkan revisi yang terakhir.</div>


### Langkah 3: Lihat progres pada saat _rollback_ DaemonSet

Perintah `kubectl rollout undo daemonset` memberitahu server untuk memulai _rollback_ DaemonSet.
_Rollback_ sebenarnya terjadi secara _asynchronous_ di dalam klaster <a class='glossary-tooltip' title='Merupakan lapisan orkestrasi Container yang mengekspos API dan antarmuka untuk mendefinisikan, menggelar, dan mengelola siklus hidup suatu Container.' data-bs-toggle='tooltip' data-bs-placement='top' href='/id/docs/reference/glossary/?all=true#term-control-plane' target='_blank' aria-label='_control plane_'>_control plane_</a>.

Perintah di bawah ini dilakukan untuk melihat progres dari _rollback_:

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

Ketika _rollback_ telah selesai dilakukan, keluaran di bawah akan ditampilkan:

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


<!-- discussion -->

## Memahami revisi DaemonSet

Pada langkah `kubectl rollout history` sebelumnya, kamu telah mendapatkan
daftar revisi DaemonSet. Setiap revisi disimpan di dalam sumber daya bernama ControllerRevision.

Untuk melihat apa yang disimpan pada setiap revisi, dapatkan sumber daya mentah (_raw_) dari
revisi DaemonSet:

```shell
kubectl get controllerrevision -l <kunci-selektor-daemonset>=<nilai-selektor-daemonset>
```

Perintah di atas akan mengembalikan daftar ControllerRevision:

```
NAME                               CONTROLLER                     REVISION   AGE
<nama-daemonset>-<hash-revisi>   DaemonSet/<nama-daemonset>     1          1h
<nama-daemonset>-<hash-revisi>   DaemonSet/<nama-daemonset>     2          1h
```

Setiap ControllerRevision menyimpan anotasi dan templat dari sebuah revisi DaemonSet.

Perintah `kubectl rollout undo` mengambil ControllerRevision yang spesifik dan mengganti templat
DaemonSet dengan templat yang tersimpan pada ControllerRevision.
Perintah `kubectl rollout undo` sama seperti untuk memperbarui templat
DaemonSet ke revisi sebelumnya dengan menggunakan perintah lainnya, seperti `kubectl edit` atau `kubectl apply`.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Catatan:</h4>Revisi DaemonSet hanya bisa <em>roll</em> ke depan. Artinya, setelah <em>rollback</em> selesai dilakukan,
nomor revisi dari ControllerRevision (<em>field</em> <code>.revision</code>) yang sedang di-<em>rollback</em> akan maju ke depan.
Misalnya, jika kamu memiliki revisi 1 dan 2 pada sistem, lalu <em>rollback</em> dari revisi 2 ke revisi 1,
ControllerRevision dengan <code>.revision: 1</code> akan menjadi <code>.revision: 3</code>.</div>


## _Troubleshoot_

* Lihat cara untuk melakukan [_troubleshoot rolling update_ pada DaemonSet](/docs/tasks/manage-daemon/update-daemon-set/#troubleshooting).
