全部产品
Search
文档中心

Container Service for Kubernetes:Jadwalkan pod berdasarkan afiniasi cache

更新时间:Jul 06, 2025

Fluid memungkinkan Anda menjadwalkan pod berdasarkan afiniasi cache. Dengan cara ini, Anda dapat menerapkan pod aplikasi ke node tempat data yang di-cache disimpan, node di zona tempat data yang di-cache berada, atau node di wilayah tempat data yang di-cache berada, sehingga meningkatkan efisiensi akses data.

Batasan

Prasyarat

Deskripsi fitur

Fluid dapat menyuntikkan aturan afiniasi cache ke dalam spesifikasi pod berdasarkan mutating webhooks. Saat Anda membuat pod, Anda dapat mengonfigurasi Fluid untuk menyuntikkan aturan afiniasi cache pada tingkat yang berbeda ke dalam spesifikasi pod. Dengan cara ini, kube-scheduler akan memberikan prioritas untuk menjadwalkan pod ke node tempat data yang di-cache disimpan, node di zona tempat data yang di-cache berada, atau node di wilayah tempat data yang di-cache berada.

Penting

Jika parameter spec.affinity atau spec.nodeSelector sudah ditentukan dalam spesifikasi pod, Fluid tidak akan menyuntikkan aturan afiniasi cache ke dalam spesifikasi pod.

Konfigurasikan kebijakan penjadwalan

Konfigurasi default

Fluid mendukung tingkat afiniasi cache berikut: node, zona, dan wilayah. Untuk memeriksa kebijakan penjadwalan cluster Anda, jalankan perintah berikut:

kubectl get cm -n fluid-system webhook-plugins -oyaml

Output yang Diharapkan:

apiVersion: v1
data:
  pluginsProfile: |
    pluginConfig:
    - args: |
        preferred:
          # fluid existed node affinity, the name can not be modified.
          - name: fluid.io/node
            weight: 100
          # runtime worker's zone label name, can be changed according to k8s environment.
          - name: topology.kubernetes.io/zone
            weight: 50
          # runtime worker's region label name, can be changed according to k8s environment.
          - name: topology.kubernetes.io/region
            weight: 20
        # used when app pod with label fluid.io/dataset.{dataset name}.sched set true
        required:
          - fluid.io/node
      name: NodeAffinityWithCache
    plugins:
      serverful:
        withDataset:
        - RequireNodeWithFuse
        - NodeAffinityWithCache
        - MountPropagationInjector
        withoutDataset:
        - PreferNodesWithoutCache
      serverless:
        withDataset:
        - FuseSidecar
        withoutDataset: []

Tabel berikut menjelaskan parameter dalam bagian pluginsProfile dari ConfigMap sebelumnya.

Parameter

Deskripsi

fluid.io/node

Parameter yang telah ditentukan sebelumnya oleh Fluid. Setelah parameter ini diaktifkan, Fluid secara otomatis menyuntikkan aturan afiniasi cache spesifik node ke dalam spesifikasi pod. Aturan afiniasi cache spesifik node menentukan node tempat data yang di-cache disimpan. Bobot aturan adalah 100.

topology.kubernetes.io/zone

Parameter kluster Kubernetes yang menentukan aturan afiniasi cache spesifik zona. Setelah parameter ini diaktifkan, Fluid secara otomatis menyuntikkan aturan afiniasi cache spesifik zona ke dalam spesifikasi pod. Aturan afiniasi cache spesifik zona menentukan zona tempat data yang di-cache berada. Bobot aturan adalah 50.

topology.kubernetes.io/region

Parameter kluster Kubernetes yang menentukan aturan afiniasi cache spesifik wilayah. Setelah parameter ini diaktifkan, Fluid secara otomatis menyuntikkan aturan afiniasi cache spesifik wilayah ke dalam spesifikasi pod. Aturan afiniasi cache spesifik wilayah menentukan wilayah tempat data yang di-cache berada. Bobot aturan adalah 20.

Konfigurasi kustom

ACK mungkin menggunakan label node lain untuk mengidentifikasi informasi topologi node di dalam cluster ACK. Untuk mengonfigurasi Fluid agar menyuntikkan aturan afiniasi kustom berdasarkan label node tertentu ke dalam spesifikasi pod, lakukan langkah-langkah berikut:

  1. Jalankan perintah berikut untuk memodifikasi ConfigMap webhook-plugins:

    kubectl edit -n fluid-system cm webhook-plugins
  2. Modifikasi ConfigMap webhook-plugins berdasarkan kode contoh berikut.

    • Anda dapat menghapus label yang ada yang mengidentifikasi informasi topologi cluster sesuai dengan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Contoh 1: Abaikan Afiniasi Node.

    • Anda dapat menambahkan aturan afiniasi kustom berdasarkan label node tertentu (seperti <topology_key>) dan menetapkan bobot aturan (seperti <topology_weight>). Untuk informasi lebih lanjut, lihat Contoh 2: Tambahkan Afiniasi Pool Node.

    apiVersion: v1
    data:
      pluginsProfile: |
        pluginConfig:
        - args: |
            preferred:
              # fluid existed node affinity, the name can not be modified.
              - name: fluid.io/node
                weight: 100
              # runtime worker's zone label name, can be changed according to k8s environment.
              - name: topology.kubernetes.io/zone
                weight: 50
              # runtime worker's region label name, can be changed according to k8s environment.
              - name: topology.kubernetes.io/region
                weight: 20
              - name: <topology_key>
                weight: <topology_weight>
            # used when app pod with label fluid.io/dataset.{dataset name}.sched set true
            required:
              - fluid.io/node
          name: NodeAffinityWithCache
        plugins:
          serverful:
            withDataset:
            - RequireNodeWithFuse
            - NodeAffinityWithCache
            - MountPropagationInjector
            withoutDataset:
            - PreferNodesWithoutCache
          serverless:
            withDataset:
            - FuseSidecar
            withoutDataset: []

    Contoh 1: Abaikan Aturan Afiniasi Cache Spesifik Node

    apiVersion: v1
    data:
      pluginsProfile: |
        pluginConfig:
        - args: |
            preferred:
              # fluid existed node affinity, the name can not be modified.
    -         #- name: fluid.io/node
    -         #  weight: 100
              # runtime worker's zone label name, can be changed according to k8s environment.
              - name: topology.kubernetes.io/zone
                weight: 50
              # runtime worker's region label name, can be changed according to k8s environment.
              - name: topology.kubernetes.io/region
                weight: 20
            # used when app pod with label fluid.io/dataset.{dataset name}.sched set true
            required:
              - fluid.io/node
          name: NodeAffinityWithCache
        plugins:
          serverful:
            withDataset:
            - RequireNodeWithFuse
            - NodeAffinityWithCache
            - MountPropagationInjector
            withoutDataset:
            - PreferNodesWithoutCache
          serverless:
            withDataset:
            - FuseSidecar
            withoutDataset: []

    Contoh 2: Tambahkan Aturan Afiniasi Cache Spesifik Pool Node

    apiVersion: v1
    data:
      pluginsProfile: |
        pluginConfig:
        - args: |
            preferred:
              # fluid existed node affinity, the name can not be modified.
              - name: fluid.io/node
                weight: 100
    +         - name: alibabacloud.com/nodepool-id
    +           weight: 80
              # runtime worker's zone label name, can be changed according to k8s environment.
              - name: topology.kubernetes.io/zone
                weight: 50
              # runtime worker's region label name, can be changed according to k8s environment.
              - name: topology.kubernetes.io/region
                weight: 20
            # used when app pod with label fluid.io/dataset.{dataset name}.sched set true
            required:
              - fluid.io/node
          name: NodeAffinityWithCache
        plugins:
          serverful:
            withDataset:
            - RequireNodeWithFuse
            - NodeAffinityWithCache
            - MountPropagationInjector
            withoutDataset:
            - PreferNodesWithoutCache
          serverless:
            withDataset:
            - FuseSidecar
            withoutDataset: []
  3. Jalankan perintah berikut untuk me-restart Fluid Webhook dan menerapkan perubahan:

    kubectl rollout restart deployment -n fluid-system fluid-webhook

Contoh

Contoh 1: Jadwalkan pod berdasarkan aturan afiniasi cache spesifik node

  1. Buat Secret.

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    stringData:
      fs.oss.accessKeyId: <ACCESS_KEY_ID>
      fs.oss.accessKeySecret: <ACCESS_KEY_SECRET>
  2. Buat Dataset dan Objek Runtime.

    Penting

    Dalam contoh ini, JindoRuntime dibuat. Untuk menggunakan runtime cache lainnya, lihat Gunakan EFC untuk Mempercepat Akses ke NAS atau CPFS. Untuk informasi lebih lanjut tentang cara menggunakan JindoFS untuk mempercepat akses ke Object Storage Service (OSS), lihat Gunakan JindoFS untuk Mempercepat Akses ke OSS.

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: demo-dataset
    spec:
      mounts:
        - mountPoint: oss://<oss_bucket>/<bucket_dir>
          options:
            fs.oss.endpoint: <oss_endpoint>
          name: hadoop
          path: "/"
          encryptOptions:
            - name: fs.oss.accessKeyId
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: fs.oss.accessKeyId
            - name: fs.oss.accessKeySecret
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: fs.oss.accessKeySecret
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: demo-dataset
    spec:
      replicas: 2
      tieredstore:
        levels:
          - mediumtype: MEM
            path: /dev/shm
            quota: 10G
            high: "0.99"
            low: "0.8"
  3. Buat Pod Aplikasi.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        fuse.serverful.fluid.io/inject: "true"
    spec:
      containers:
        - name: nginx
          image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
          volumeMounts:
            - mountPath: /data
              name: data-vol
      volumes:
        - name: data-vol
          persistentVolumeClaim:
            claimName: demo-dataset

    Parameter berikut digunakan untuk mengaktifkan penjadwalan pod berdasarkan aturan afiniasi cache spesifik node.

    Parameter

    Deskripsi

    fuse.serverful.fluid.io/inject: "true"

    Mengaktifkan Fluid untuk menyuntikkan aturan afiniasi cache ke dalam spesifikasi pod.

    claimName

    Persistent Volume Claim (PVC) yang dipasang ke pod. PVC ini secara otomatis dibuat oleh Fluid dan dinamai berdasarkan Dataset yang Anda buat.

  4. Periksa Pengaturan Afiniasi dalam Spesifikasi Pod.

    kubectl get pod nginx -oyaml

    Output yang Diharapkan:

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        fuse.serverful.fluid.io/inject: "true"
      name: nginx
      namespace: default
      ...
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - preference:
              matchExpressions:
              - key: fluid.io/s-default-demo-dataset
                operator: In
                values:
                - "true"
            weight: 100
    

    Aturan afiniasi cache spesifik node (fluid.io/s-default-demo-dataset) disuntikkan ke dalam spesifikasi pod. Bobot aturan bergantung pada konfigurasi parameter topologi node dalam kebijakan penjadwalan.

Contoh 2: Jadwalkan pod berdasarkan aturan afiniasi cache spesifik zona

  1. Buat Secret.

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    stringData:
      fs.oss.accessKeyId: <ACCESS_KEY_ID>
      fs.oss.accessKeySecret: <ACCESS_KEY_SECRET>
  2. Buat Dataset dan Objek Runtime.

    Penting

    Dalam contoh ini, JindoRuntime dibuat. Untuk menggunakan runtime cache lainnya, lihat Gunakan EFC untuk Mempercepat Akses ke NAS atau CPFS. Untuk informasi lebih lanjut tentang cara menggunakan JindoFS untuk mempercepat akses ke Object Storage Service (OSS), lihat Gunakan JindoFS untuk Mempercepat Akses ke OSS.

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: demo-dataset
    spec:
      nodeAffinity:
        required:
          nodeSelectorTerms:
            - matchExpressions:
                - key: topology.kubernetes.io/zone
                  operator: In
                  values:
                  - "<ZONE_ID>" # e.g. cn-beijing-i
      mounts:
        - mountPoint: oss://<oss_bucket>/<bucket_dir>
          options:
            fs.oss.endpoint: <oss_endpoint>
          name: hadoop
          path: "/"
          encryptOptions:
            - name: fs.oss.accessKeyId
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: fs.oss.accessKeyId
            - name: fs.oss.accessKeySecret
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: fs.oss.accessKeySecret
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: demo-dataset
    spec:
      replicas: 2
      master:
        nodeSelector:
          topology.kubernetes.io/zone: <ZONE_ID> # e.g. cn-beijing-i
      tieredstore:
        levels:
          - mediumtype: MEM
            path: /dev/shm
            quota: 10G
            high: "0.99"
            low: "0.8"

    Untuk menjadwalkan pod berdasarkan aturan afiniasi cache spesifik zona, Anda perlu secara implisit menentukan zona tempat data yang di-cache berada. Dalam blok kode sebelumnya, label topology.kubernetes.io/zone=cn-beijing-i ditentukan dalam parameter nodeAffinity.required.nodeSelectorTerms.

  3. Buat Pod Aplikasi.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        fuse.serverful.fluid.io/inject: "true"
    spec:
      containers:
        - name: nginx
          image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
          volumeMounts:
            - mountPath: /data
              name: data-vol
      volumes:
        - name: data-vol
          persistentVolumeClaim:
            claimName: demo-dataset

    Parameter berikut digunakan untuk mengaktifkan penjadwalan pod berdasarkan aturan afiniasi cache spesifik zona.

    Parameter

    Deskripsi

    fuse.serverful.fluid.io/inject: "true"

    Mengaktifkan Fluid untuk menyuntikkan aturan afiniasi cache ke dalam spesifikasi pod.

    claimName

    PVC yang dipasang ke pod. PVC ini secara otomatis dibuat oleh Fluid dan dinamai berdasarkan Dataset yang Anda buat.

  4. Periksa Pengaturan Afiniasi dalam Spesifikasi Pod.

    kubectl get pod nginx -oyaml

    Output yang Diharapkan:

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        fuse.serverful.fluid.io/inject: "true"
      name: nginx
      namespace: default
      ...
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - preference:
              matchExpressions:
              - key: fluid.io/s-default-demo-dataset
                operator: In
                values:
                - "true"
            weight: 100
          - preference:
              matchExpressions:
              - key: topology.kubernetes.io/zone
                operator: In
                values:
                - <ZONE_ID> # e.g. cn-beijing-i
            weight: 50
    ...

    Aturan afiniasi cache spesifik node (fluid.io/s-default-demo-dataset) dan aturan afiniasi cache spesifik zona (topology.kubernetes.io/zone) disuntikkan ke dalam spesifikasi pod. Bobot aturan bergantung pada konfigurasi parameter topologi node dalam kebijakan penjadwalan.

Contoh 3: Paksa penjadwalan pod berdasarkan aturan afiniasi cache spesifik node

  1. Buat Secret.

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    stringData:
      fs.oss.accessKeyId: <ACCESS_KEY_ID>
      fs.oss.accessKeySecret: <ACCESS_KEY_SECRET>
  2. Buat Dataset dan Objek Runtime.

    Penting

    Dalam contoh ini, JindoRuntime dibuat. Untuk menggunakan runtime cache lainnya, lihat Gunakan EFC untuk Mempercepat Akses ke NAS atau CPFS. Untuk informasi lebih lanjut tentang cara menggunakan JindoFS untuk mempercepat akses ke Object Storage Service (OSS), lihat Gunakan JindoFS untuk Mempercepat Akses ke OSS.

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: demo-dataset
    spec:
      mounts:
        - mountPoint: oss://<oss_bucket>/<bucket_dir>
          options:
            fs.oss.endpoint: <oss_endpoint>
          name: hadoop
          path: "/"
          encryptOptions:
            - name: fs.oss.accessKeyId
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: fs.oss.accessKeyId
            - name: fs.oss.accessKeySecret
              valueFrom:
                secretKeyRef:
                  name: mysecret
                  key: fs.oss.accessKeySecret
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: demo-dataset
    spec:
      replicas: 2
      tieredstore:
        levels:
          - mediumtype: MEM
            path: /dev/shm
            quota: 10G
            high: "0.99"
            low: "0.8"
  3. Buat Pod Aplikasi.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        fuse.serverful.fluid.io/inject: "true"
        fluid.io/dataset.demo-dataset.sched: required
    spec:
      containers:
        - name: nginx
          image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
          volumeMounts:
            - mountPath: /data
              name: data-vol
      volumes:
        - name: data-vol
          persistentVolumeClaim:
            claimName: demo-dataset

    Parameter berikut digunakan untuk memaksa penjadwalan pod berdasarkan aturan afiniasi cache spesifik node.

    Parameter

    Deskripsi

    fuse.serverful.fluid.io/inject: "true"

    Mengaktifkan Fluid untuk menyuntikkan aturan afiniasi cache ke dalam spesifikasi pod.

    fluid.io/dataset.<dataset_name>.sched: required

    Menentukan Dataset <dataset_name> yang terkait dengan aturan afiniasi node spesifik yang dipaksakan untuk disuntikkan.

    claimName

    PVC yang dipasang ke pod. PVC ini secara otomatis dibuat oleh Fluid dan dinamai berdasarkan Dataset yang Anda buat.

  4. Periksa Pengaturan Afiniasi dalam Spesifikasi Pod.

    kubectl get pod nginx -oyaml

    Output yang Diharapkan:

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        fluid.io/dataset.demo-dataset.sched: required
        fuse.serverful.fluid.io/inject: "true"
      name: nginx
      namespace: default
      ...
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: fluid.io/s-default-demo-dataset
                operator: In
                values:
                - "true"

    Aturan afiniasi cache spesifik node yang dipaksakan (fluid.io/s-default-demo-dataset) disuntikkan ke dalam spesifikasi pod.