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
Fitur ini hanya didukung oleh ACK Pro cluster.
Fitur ini tidak kompatibel dengan penjadwalan berbasis Elastic Container Instance atau penjadwalan sumber daya berbasis prioritas.
Prasyarat
Sebuah ACK Pro cluster yang menjalankan Kubernetes 1.18 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat ACK Pro Cluster.
Suite AI cloud-native dan ack-fluid 1.0.6 atau lebih baru telah diterapkan di dalam cluster. Untuk informasi lebih lanjut, lihat Terapkan Suite AI Cloud-Native.
PentingJika Anda sudah menginstal Fluid open source, uninstall Fluid dan terapkan komponen ack-fluid.
Klien kubectl telah terhubung ke cluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig dari Cluster dan Gunakan kubectl untuk Terhubung ke Cluster.
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.
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 -oyamlOutput 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 |
| 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. |
| 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. |
| 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:
Jalankan perintah berikut untuk memodifikasi ConfigMap webhook-plugins:
kubectl edit -n fluid-system cm webhook-pluginsModifikasi 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: []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
Buat Secret.
apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: <ACCESS_KEY_ID> fs.oss.accessKeySecret: <ACCESS_KEY_SECRET>Buat Dataset dan Objek Runtime.
PentingDalam 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"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-datasetParameter 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.
claimNamePersistent Volume Claim (PVC) yang dipasang ke pod. PVC ini secara otomatis dibuat oleh Fluid dan dinamai berdasarkan Dataset yang Anda buat.
Periksa Pengaturan Afiniasi dalam Spesifikasi Pod.
kubectl get pod nginx -oyamlOutput 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: 100Aturan 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
Buat Secret.
apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: <ACCESS_KEY_ID> fs.oss.accessKeySecret: <ACCESS_KEY_SECRET>Buat Dataset dan Objek Runtime.
PentingDalam 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-iditentukan dalam parameternodeAffinity.required.nodeSelectorTerms.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-datasetParameter 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.
claimNamePVC yang dipasang ke pod. PVC ini secara otomatis dibuat oleh Fluid dan dinamai berdasarkan Dataset yang Anda buat.
Periksa Pengaturan Afiniasi dalam Spesifikasi Pod.
kubectl get pod nginx -oyamlOutput 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
Buat Secret.
apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: <ACCESS_KEY_ID> fs.oss.accessKeySecret: <ACCESS_KEY_SECRET>Buat Dataset dan Objek Runtime.
PentingDalam 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"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-datasetParameter 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: requiredMenentukan Dataset
<dataset_name>yang terkait dengan aturan afiniasi node spesifik yang dipaksakan untuk disuntikkan.claimNamePVC yang dipasang ke pod. PVC ini secara otomatis dibuat oleh Fluid dan dinamai berdasarkan Dataset yang Anda buat.
Periksa Pengaturan Afiniasi dalam Spesifikasi Pod.
kubectl get pod nginx -oyamlOutput 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.