Pendahuluan
Kubernetes memungkinkan Anda untuk mengotomatiskan penerapan perangkat lunak, mengelola aplikasi dalam container, dan menskalakan kluster Anda dengan mudah. Beragam objek Kubernetes, termasuk DaemonSets, memberikan tingkat kontrol tambahan.
Gunakan Kubernetes DaemonSets untuk men-deploy Pod tertentu ke setiap node di cluster Anda.
Artikel ini menjelaskan apa itu DaemonSet, kapan menggunakannya, dan cara membuatnya.
Apa itu DaemonSet Kubernetes?
Kubernetes memastikan bahwa aplikasi memiliki sumber daya yang cukup, berjalan dengan andal, dan mempertahankan ketersediaan tinggi sepanjang siklus hidupnya. Lokasi aplikasi dalam cluster bukanlah prioritas.
DaemonSet memungkinkan Anda mengatasi batasan penjadwalan Kubernetes dan memastikan bahwa aplikasi tertentu di-deploy di semua node dalam cluster.m Pod yang di-deploy biasanya berisi proses latar belakang yang perlu disebarluaskan ke seluruh cluster.
DaemonSet biasanya dijelaskan menggunakan file YAML. Kolom dalam file YAML memberi Anda kontrol tambahan untuk proses penyebaran Pod. Contoh yang baik adalah menggunakan label untuk memulai Pod tertentu pada subset node yang terbatas.
Bagaimana Cara Kerja DaemonSet?
DaemonSet adalah objek Kubernetes aktif yang dikelola oleh pengontrol. Anda dapat mendeklarasikan status yang Anda inginkan, yang menunjukkan bahwa Pod tertentu harus ada di setiap node. Loop kontrol rekonsiliasi akan membandingkan keadaan yang diinginkan dengan keadaan yang diamati saat ini. Jika node yang diamati tidak memiliki Pod yang cocok, pengontrol DaemonSet akan membuatnya secara otomatis.
Proses otomatis ini mencakup node yang ada dan semua node yang baru dibuat. Pod yang dibuat oleh pengontrol DaemonSet diabaikan oleh penjadwal Kubernetes dan tetap ada selama node itu sendiri.
DaemonSet membuat Pod di setiap node secara default. Jika perlu, Anda dapat membatasi jumlah node yang dapat diterima dengan menggunakan pemilih node. Kontroler DaemonSet akan membuat Pod hanya pada node yang cocok dengan nodeSelector yang telah ditentukan sebelumnya bidang dalam file YAML.
Mengapa Menggunakan DaemonSet?
DaemonSet dapat meningkatkan kinerja cluster dengan menerapkan Pod yang melakukan tugas pemeliharaan dan layanan dukungan ke setiap node. Proses latar belakang tertentu, aplikasi pemantauan Kubernetes, dan agen lainnya harus ada di seluruh cluster untuk menyediakan layanan yang relevan dan tepat waktu.
DaemonSet sangat cocok untuk layanan yang berjalan lama yang dapat mencakup:
- Koleksi log
- Pemantauan sumber daya node (kerangka kerja seperti Prometheus)
- Penyimpanan cluster
- Pod terkait infrastruktur (operasi sistem)
Adalah umum untuk satu DaemonSet untuk menyebarkan satu jenis daemon di semua node. Namun, beberapa DaemonSet juga dapat mengontrol satu jenis daemon dengan menggunakan label yang berbeda. Label Kubernetes menentukan aturan penerapan berdasarkan karakteristik masing-masing node.
Bagaimana Cara Membuat DaemonSet?
Anda dapat mendeskripsikan DaemonSet dalam file YAML dan menerapkan file tersebut ke cluster menggunakan perintah kubectl.
Misalnya, daemonset-node-exporter.yaml file di bawah ini menerapkan pengekspor simpul Prometheus, dalam pemantauan namespace, untuk memantau metrik penggunaan perangkat keras pada setiap node dalam cluster.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitoring
labels:
name: node-exporter
spec:
template:
metadata:
labels:
name: node-exporter
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9100"
spec:
hostPID: true
hostIPC: true
hostNetwork: true
containers:
- ports:
- containerPort: 9100
protocol: TCP
resources:
requests:
cpu: 0.15
securityContext:
privileged: true
image: prom/node-exporter:v0.15.2
args:
- --path.procfs
- /host/proc
- --path.sysfs
- /host/sys
- --collector.filesystem.ignored-mount-points
- '"^/(sys|proc|dev|host|etc)($|/)"'
name: node-exporter
volumeMounts:
- name: dev
mountPath: /host/dev
- name: proc
mountPath: /host/proc
- name: sys
mountPath: /host/sys
- name: rootfs
mountPath: /rootfs
volumes:
- name: proc
hostPath:
path: /proc
- name: dev
hostPath:
path: /dev
- name: sys
hostPath:
path: /sys
- name: rootfs
hostPath:
path: /
Akses antarmuka baris perintah Kubernetes Anda dan terapkan file YAML yang baru dibuat:
kubectl apply -f daemonset-node-exporter.yaml
Sistem mengonfirmasi bahwa DaemonSet telah dibuat.
Setelah Anda mengirimkan daemonset-node-exporter DaemonSet, konfirmasikan statusnya saat ini dengan describe
perintah:
kubectl describe daemonset node-exporter -n monitoring
Outputnya menawarkan informasi dasar DaemonSet dan menunjukkan bahwa pod telah di-deploy pada semua node yang tersedia.
Anda juga dapat mengonfirmasi ini dengan mendaftar semua pod yang sedang berjalan dengan perintah berikut:
kubectl get pod -o wide -n monitoring
DaemonSet sekarang akan terus men-deploy node-exporter Pod ke semua node yang baru dibuat.
Cara Membatasi DaemonSet ke Node Tertentu
DaemonSets membuat Pod di setiap node dalam cluster secara default, kecuali jika node selector membatasi mereka. Awalnya, perlu untuk menambahkan set label yang diinginkan ke subset node.
Capai ini dengan menggunakan kubectl label
memerintah. Tambahkan ssd=true
label ke node01
simpul dengan perintah berikut:
kubectl label nodes node01 ssd=true
Pemilih node adalah bagian dari nodeSelector
bidang dalam file YAML DaemonSet. Dalam contoh berikut, DaemonSet akan menerapkan Nginx hanya pada node berlabel ssd=true
.
apiVersion: apps/v1
kind: "DaemonSet"
metadata:
labels:
app: nginx
ssd: "true"
name: nginx-ssd-storage
spec:
template:
metadata:
labels:
app: nginx ssd: "true"
spec:
nodeSelector:
ssd: "true"
containers: -
name: nginx
image: nginx:1.10.0
Menambahkan ssd=true
label ke node baru akan menyebarkan nginx-ssd-storage Pod ke simpul itu. Jika sebuah label dihapus dari sebuah node, pengontrol DaemonSet juga menghapus Pod.
Bagaimana Cara Memperbarui DaemonSet?
OnDelete strategi pembaruan adalah satu-satunya cara untuk memperbarui Pod yang dikelola oleh DaemonSet di versi Kubernetes awal (sebelum versi 1.6). Sebuah OnDelete pendekatan mengharuskan Anda untuk menghapus setiap Pod secara manual. Baru setelah itu DaemonSet dapat membuat Pod baru menggunakan konfigurasi baru.
Versi Kubernetes terbaru menggunakan pembaruan bergulir secara default. Strategi pembaruan ditentukan menggunakan spec.updateStrategy.type
bidang. Nilai default disetel ke RollingUpdate
.
Strategi pembaruan bergulir menghapus Pod lama dan membuat yang baru sebagai gantinya. Prosesnya otomatis dan terkontrol. Menghapus dan membuat semua Pod secara bersamaan dapat menyebabkan tidak tersedianya dan waktu henti yang berkepanjangan.
Dua parameter memungkinkan Anda untuk mengontrol proses pembaruan:
minReadySeconds
mendefinisikan periode antara upgrade Pod. Nilainya ditentukan dalam hitungan detik, dan menyetel kerangka waktu yang wajar akan mengamankan kesehatan Pod sebelum sistem melanjutkan untuk memperbarui Pod berikutnya.updateStrategy.rollingUpdate.maxUnavailable
memungkinkan Anda untuk menentukan jumlah Pod yang dapat ditingkatkan secara bersamaan. Nilai parameter ini sangat tergantung pada jenis aplikasi yang digunakan. Penting untuk menyeimbangkan kecepatan dan keamanan untuk memastikan ketersediaan yang tinggi.
Gunakan kubectl rollout
perintah untuk memeriksa status upgrade bergulir DaemonSet:
kubectl rollout status ds/daemonset-node-exporter -n monitoring
Sistem mengamati pembaruan DaemonSet dan memberi tahu Anda tentang status peluncuran pengekspor simpul saat ini. DaemonSet.
Bagaimana Cara Menghapus DaemonSet?
Hapus DaemonSet menggunakan kubectl delete
memerintah. Pastikan untuk menentukan nama DaemonSet yang ingin Anda hapus dengan benar:
kubectl delete -f daemonset-node-exporter.yaml -n monitoring
Perintah ini harus digunakan dengan hati-hati. Menghapus DaemonSet juga akan membersihkan semua Pod yang di-deploy DaemonSet tersebut.