Dalam skenario komputasi tepi, peningkatan DaemonSet native dapat terblokir ketika koneksi cloud-tepi gagal dan node menjadi NotReady, atau ketika Anda memerlukan peningkatan sesuai permintaan pada node tepi tanpa penerapan yang dikendalikan cloud. Untuk mengatasi pemblokiran tersebut dan mendukung pembaruan over-the-air, konfigurasikan model AdvancedRollingUpdate atau OTA. Model AdvancedRollingUpdate melewati node NotReady selama pembaruan bergulir, sedangkan model OTA memungkinkan peningkatan per node sesuai permintaan.
Prasyarat
-
Kluster tepi ACK yang berjalan versi v1.26.3-aliyun.1 atau lebih baru
Pilih model peningkatan
| Peningkatan model | Gunakan saat |
|---|---|
| AdvancedRollingUpdate | Putusnya koneksi cloud-tepi dapat menyebabkan node NotReady, sehingga memblokir pembaruan bergulir |
| OTA | Anda ingin mengontrol waktu peningkatan per node tepi dan memicu peningkatan sesuai permintaan melalui REST API |
Konfigurasikan model peningkatan
Kedua model memerlukan anotasi dan strategi pembaruan DaemonSet yang sama:
apiVersion: apps/v1
kind: DaemonSet
metadata:
annotations:
# Wajib: mengaktifkan model peningkatan yang diperluas.
# Nilai yang valid: AdvancedRollingUpdate atau OTA.
apps.openyurt.io/update-strategy: AdvancedRollingUpdate
# Opsional: hanya berlaku untuk AdvancedRollingUpdate.
# Menentukan jumlah maksimum Pod yang tidak tersedia selama pembaruan bergulir.
# Menerima nilai yang sama seperti maxUnavailable native DaemonSet. Default: 10%.
apps.openyurt.io/max-unavailable: 30%
spec:
updateStrategy:
# Wajib: harus diatur ke OnDelete agar model peningkatan berlaku.
type: OnDelete
Tetapkan apps.openyurt.io/update-strategy ke AdvancedRollingUpdate atau OTA, dan tetapkan spec.updateStrategy.type ke OnDelete.
Parameter
| Parameter | Deskripsi |
|---|---|
apps.openyurt.io/update-strategy |
Mengaktifkan model peningkatan yang diperluas. Nilai yang valid: AdvancedRollingUpdate atau OTA. |
apps.openyurt.io/max-unavailable |
Hanya berlaku untuk AdvancedRollingUpdate. Jumlah maksimum Pod yang tidak tersedia selama pembaruan bergulir. Menggunakan nilai yang sama seperti maxUnavailable native DaemonSet. Default: 10%. |
spec.updateStrategy.type |
Harus diatur ke OnDelete. Hapus Pod lama secara manual untuk memicu pembuatan Pod baru. |
Gunakan AdvancedRollingUpdate
AdvancedRollingUpdate melewati node NotReady dan memperbarui Pod pada node Ready terlebih dahulu. Ketika sebuah node kembali menjadi Ready, Pod DaemonSet-nya akan ditingkatkan secara otomatis.
Contoh ini membuat DaemonSet nginx-daemonset dengan AdvancedRollingUpdate dan batas maksimum 30% Pod yang tidak tersedia.
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemonset
annotations:
apps.openyurt.io/update-strategy: AdvancedRollingUpdate
apps.openyurt.io/max-unavailable: 30%
spec:
selector:
matchLabels:
app: nginx
updateStrategy:
type: OnDelete
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.4
EOF
Pod pada node NotReady dilewati. Ketika node menjadi Ready, Pod DaemonSet-nya ditingkatkan secara otomatis.
Gunakan OTA
OTA memungkinkan Anda mengontrol waktu peningkatan per node tepi. Setelah gambar DaemonSet diperbarui, Pod tidak ditingkatkan secara otomatis. Gunakan REST API edge-hub pada setiap node untuk memeriksa status dan memicu peningkatan.
REST API OTA
Semua panggilan API dilakukan secara lokal pada node tepi (URL dasar: http://127.0.0.1:10267).
| Metode | Endpoint | Deskripsi |
|---|---|---|
GET |
/pods |
Mengembalikan informasi Pod. Periksa PodNeedUpgrade dalam Pod.status.conditions untuk mengidentifikasi Pod yang perlu ditingkatkan. |
POST |
/openyurt.io/v1/namespaces/{ns}/pods/{podname}/imagepull |
Melakukan pre-pull gambar untuk Pod DaemonSet guna mengurangi waktu startup peningkatan. Didukung pada versi v1.32-aliyun.1 atau lebih baru. |
POST |
/openyurt.io/v1/namespaces/{ns}/pods/{podname}/upgrade |
Memicu peningkatan untuk Pod DaemonSet. |
Contoh peningkatan OTA
Langkah 1: Buat DaemonSet yang diaktifkan OTA
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemonset
annotations:
apps.openyurt.io/update-strategy: OTA
spec:
selector:
matchLabels:
app: nginx
updateStrategy:
type: OnDelete
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.4
EOF
Langkah 2: Perbarui gambar DaemonSet
Perbarui gambar DaemonSet. Pod pada node tepi tidak ditingkatkan secara otomatis.
kubectl set image daemonset/nginx-daemonset nginx=nginx:1.19.5
Langkah 3: Periksa apakah Pod perlu ditingkatkan
Pada node tepi, tampilkan status Pod:
curl http://127.0.0.1:10267/pods
Jika default/nginx-daemonset-bwzss menunjukkan PodNeedUpgrade=true dalam pod.Status.Conditions, maka Pod tersebut perlu ditingkatkan.
Langkah 4: (Opsional) Tarik citra terlebih dahulu
Untuk gambar berukuran besar, lakukan pre-pull gambar untuk mengurangi waktu startup:
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/imagepull
Output yang diharapkan:
Image pre-pull requested for pod default/nginx-daemonset-bwzss
API pre-pull gambar memerlukan versi kluster v1.32-aliyun.1 atau lebih baru.
Langkah 5: Picu peningkatan
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/upgrade
Output yang diharapkan:
Start updating pod default/nginx-daemonset-bwzss