Model peningkatan DaemonSet native memiliki keterbatasan dalam skenario komputasi tepi. Misalnya, terputusnya jaringan antara cloud dan edge dapat menyebabkan node menjadi NotReady, yang menghambat peningkatan bergulir DaemonSet. Anda juga mungkin perlu memicu peningkatan aplikasi secara langsung pada node edge untuk pembaruan over-the-air (OTA). Model peningkatan DaemonSet yang diperluas, AdvancedRollingUpdate dan OTA, mengatasi masalah ini. Anda dapat mengonfigurasi model tersebut untuk mencegah blokir peningkatan dan melakukan pembaruan OTA.
Prasyarat
Sebuah kluster ACK Edge versi v1.26.3-aliyun.1 atau lebih baru.
Deskripsi model peningkatan
Model peningkatan AdvancedRollingUpdate
Model ini mencegah peningkatan DaemonSet terblokir ketika sebuah node menjadi NotReady akibat terputusnya jaringan. Selama peningkatan, model ini mengabaikan node NotReady dan terlebih dahulu meningkatkan Pod pada node Ready. Ketika node tersebut kembali menjadi Ready, model ini secara otomatis meningkatkan Pod DaemonSet di node tersebut.
Model peningkatan OTA
Model peningkatan ini memungkinkan Anda memeriksa apakah sebuah Pod dapat diperbarui dan memicu peningkatan Pod secara langsung pada node edge dengan memanggil REST API.
Deskripsi konfigurasi
apiVersion: apps/v1
kind: DaemonSet
metadata:
annotations:
apps.openyurt.io/update-strategy: AdvancedRollingUpdate
apps.openyurt.io/max-unavailable: 30%
spec:
updateStrategy:
type: OnDeleteParameter | Deskripsi |
apps.openyurt.io/update-strategy | Mengaktifkan model peningkatan yang diperluas. Nilai yang valid: AdvancedRollingUpdate atau OTA. |
apps.openyurt.io/max-unavailable | Konfigurasi ini hanya berlaku dalam mode |
spec.updateStrategy.type | Harus diatur ke |
Penggunaan
Model peningkatan AdvancedRollingUpdate
Kode berikut memberikan contoh konfigurasi AdvancedRollingUpdate. Dalam contoh ini, DaemonSet bernama nginx-daemonset dibuat dengan menggunakan model peningkatan AdvancedRollingUpdate dan mengizinkan maksimal 30% Pod tidak tersedia selama peningkatan bergulir.
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
EOFModel peningkatan OTA
API pembaruan OTA
Komponen edge-hub pada node edge menyediakan REST API untuk pembaruan OTA.
GET /podsMengambil informasi Pod pada node tersebut. Anda dapat menentukan apakah sebuah Pod dapat diperbarui dengan memeriksa kondisi
PodNeedUpgradedalamPod.status.conditions.POST /openyurt.io/v1/namespaces/{ns}/pods/{podname}/imagepullAPI ini memungkinkan Anda memicu pengunduhan citra untuk Pod tertentu dalam DaemonSet. Parameter path
{ns}dan{podname}menentukan namespace dan nama Pod tersebut. Untuk citra Pod berukuran besar yang memerlukan waktu lama untuk memulai, Anda dapat menggunakan API ini guna mengunduh citra terlebih dahulu dan mempercepat waktu startup.API pengunduhan citra hanya didukung pada kluster versi v1.32-aliyun.1 atau lebih baru.
POST /openyurt.io/v1/namespaces/{ns}/pods/{podname}/upgradeAPI ini memungkinkan Anda memicu pembaruan untuk Pod DaemonSet tertentu. Parameter path
{ns}dan{podname}merepresentasikan namespace dan nama Pod tersebut.
Contoh pembaruan OTA
Buat DaemonSet bernama
nginx-daemonsetyang menggunakan model peningkatan OTA. Setelah citra DaemonSet diperbarui, Pod pada node tersebut tidak diperbarui secara otomatis. Anda harus menggunakan REST API untuk memeriksa dan memicu pembaruan Pod pada node edge.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 EOFKasus penggunaan pembaruan OTA
Login ke node edge dan periksa apakah ada Pod pada node tersebut yang memerlukan pembaruan.
curl http://127.0.0.1:10267/podsJika keluaran untuk `default/nginx-daemonset-bwzss` berisi
PodNeedUpgrade=truedalampod.Status.Conditions, maka Pod tersebut memerlukan pembaruan.(Opsional) Unduh citra terlebih dahulu.
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/imagepullKeluaran yang diharapkan:
Image pre-pull requested for pod default/nginx-daemonset-bwzssTingkatkan Pod tersebut.
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/upgradeKeluaran yang diharapkan:
Start updating pod default/nginx-daemonset-bwzss
Referensi
Untuk informasi lebih lanjut, lihat Kelola Pod.