DaemonSet memastikan bahwa setiap node dalam kluster hanya menjalankan satu pod yang disediakan oleh DaemonSet. Jika node baru ditambahkan ke kluster, pod baru akan dijadwalkan ke node tersebut oleh DaemonSet. DaemonSet cocok untuk menerapkan komponen pengumpulan log seperti Fluentd dan agen pemantauan node seperti Prometheus Node Exporter. Topik ini memperkenalkan DaemonSet serta menjelaskan cara membuat DaemonSet melalui konsol Container Service for Kubernetes (ACK) atau menggunakan kubectl.
Pengenalan DaemonSet
Secara default, DaemonSet memastikan bahwa setiap node dalam kluster hanya menjalankan satu pod yang disediakan oleh DaemonSet. Namun, hasil penjadwalan DaemonSet dipengaruhi oleh kebijakan penjadwalan berikut. Untuk informasi lebih lanjut tentang kebijakan penjadwalan, lihat Penjadwalan.
Taint dan toleransi: Pod DaemonSet tidak dijadwalkan ke node dengan taint yang tidak ditoleransi oleh DaemonSet. Secara default, DaemonSet mentolerir taint berikut:
node.kubernetes.io/unschedulable:NoSchedulenode.kubernetes.io/not-ready:NoExecute: Pod tetap berada di node dengan taint ini selama 300 detik sebelum dihapus.node.kubernetes.io/unreachable:NoExecute: Pod tetap berada di node dengan taint ini selama 300 detik sebelum dihapus.
Node selector: Pod DaemonSet dijadwalkan berdasarkan parameter
nodeSelector. Sebagai contoh, jikanodeSelector: { disktype: ssd }ditentukan dalam konfigurasi DaemonSet, pod yang disediakan oleh DaemonSet hanya dijadwalkan ke node yang memiliki labeldisktype=ssd.Aturan afinitas: Pod DaemonSet dijadwalkan berdasarkan aturan afinitas node, anti-afinitas node, afinitas pod, dan anti-afinitas pod.
DaemonSet tidak dirancang untuk memenuhi persyaratan penjadwalan pod berdasarkan berbagai kebijakan penjadwalan. Jika Anda memerlukan penjadwalan pod yang kompleks, gunakan Deployment. Untuk informasi lebih lanjut tentang DaemonSet, lihat DaemonSet.
Buat DaemonSet
Anda dapat menggunakan konsol ACK atau kubectl untuk membuat DaemonSet.
Konsol ACK
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
Di pojok kanan atas halaman DaemonSets, klik Create from Image.
Karena karakteristik DaemonSet, parameter aplikasi pada langkah-langkah berikut berbeda dari saat Anda membuat Deployment:
Basic Information: Parameter Replicas tidak tersedia karena jumlah pod yang disediakan oleh DaemonSet bergantung pada jumlah node dalam kluster.
Advanced: Bagian Scaling tidak tersedia karena jumlah pod yang disediakan oleh DaemonSet bergantung pada jumlah node dalam kluster.
Parameter lainnya sama dengan saat Anda membuat Deployment. Untuk informasi lebih lanjut tentang cara mengonfigurasi parameter lainnya, lihat Buat aplikasi tanpa status menggunakan Deployment.
kubectl
Sebelum Anda membuat workload, pastikan Anda telah terhubung ke kluster menggunakan kubectl. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Buat file bernama daemonset.yaml dan salin konten berikut ke file tersebut:
apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-test namespace: default # Ubah namespace sesuai kebutuhan bisnis Anda. labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: '1' memory: 2Gi requests: cpu: 500m memory: 512MiJalankan perintah berikut untuk membuat DaemonSet:
kubectl apply -f daemonset.yamlKeluaran yang diharapkan:
daemonset.apps/nginx-test createdJalankan perintah berikut untuk menanyakan detail DaemonSet:
kubectl get pods --all-namespaces -o wide | grep nginx-testKeluaran berikut menunjukkan bahwa setiap node menjalankan pod yang disediakan oleh DaemonSet:
default nginx-test-8mqvh 1/1 Running 0 3m38s 192.168.*.** cn-shanghai.192.168.**.250 <none> <none> default nginx-test-ltlx6 1/1 Running 0 3m38s 192.168.*.** cn-shanghai.192.168.**.98 <none> <none> default nginx-test-n6zrv 1/1 Running 0 3m38s 192.168.*.** cn-shanghai.192.168.**.17 <none> <none>
Referensi
Untuk informasi lebih lanjut tentang cara menyelesaikan masalah yang terjadi saat Anda membuat workload, lihat FAQ tentang workload.
Untuk informasi lebih lanjut tentang cara menyelesaikan masalah pengecualian pod, lihat Pemecahan masalah pod.