全部产品
Search
文档中心

Container Service for Kubernetes:Buat DaemonSet

更新时间:Jul 02, 2025

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:NoSchedule

    • node.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, jika nodeSelector: { disktype: ssd } ditentukan dalam konfigurasi DaemonSet, pod yang disediakan oleh DaemonSet hanya dijadwalkan ke node yang memiliki label disktype=ssd.

  • Aturan afinitas: Pod DaemonSet dijadwalkan berdasarkan aturan afinitas node, anti-afinitas node, afinitas pod, dan anti-afinitas pod.

Catatan

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.

Lihat pod kube-proxy

kube-proxy, komponen default Kubernetes, diterapkan di setiap node sebagai DaemonSet. Anda dapat menjalankan perintah berikut untuk melihat pod kube-proxy:

kubectl get pods --all-namespaces -o wide | grep kube-proxy

Keluaran berikut menunjukkan bahwa setiap node menjalankan pod kube-proxy. kube-proxy menggunakan jaringan host dari node (hostNetwork: true). Oleh karena itu, pod kube-proxy menggunakan alamat IP dari node yang menjadi tuan rumah pod tersebut.

kube-system     kube-proxy-worker-hfzkh     1/1     Running     0          2d21h   192.168.*.92    cn-shanghai.192.168.*.92   <none>           <none>
kube-system     kube-proxy-worker-pxnnf     1/1     Running     0          2d21h   192.168.*.11    cn-shanghai.192.168.*.11   <none>           <none>
kube-system     kube-proxy-worker-r2t26     1/1     Running     0          2d21h   192.168.*.7     cn-shanghai.192.168.*.7    <none>           <none>

Buat DaemonSet

Anda dapat menggunakan konsol ACK atau kubectl untuk membuat DaemonSet.

Konsol ACK

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Workloads > DaemonSets.

  3. Di pojok kanan atas halaman DaemonSets, klik Create from Image.

  4. 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

Penting

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.

  1. 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: 512Mi
  2. Jalankan perintah berikut untuk membuat DaemonSet:

    kubectl apply -f daemonset.yaml

    Keluaran yang diharapkan:

    daemonset.apps/nginx-test created
  3. Jalankan perintah berikut untuk menanyakan detail DaemonSet:

    kubectl get pods --all-namespaces -o wide | grep nginx-test

    Keluaran 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.