Untuk menghindari kehilangan metadata akibat restart master JindoFS, Fluid memungkinkan Anda menggunakan JindoRuntime untuk menyimpan metadata yang dikelola oleh master JindoFS. Hal ini meningkatkan ketersediaan kluster JindoFS dalam skenario caching terdistribusi.
Deskripsi fitur
JindoFS adalah mesin eksekusi untuk manajemen dataset dan caching yang dikembangkan oleh tim Alibaba Cloud E-MapReduce (EMR) berbasis C++. Anda dapat menggunakan JindoFS untuk menyimpan cache data dari berbagai sumber, termasuk Object Storage Service (OSS), OSS-Hadoop Distributed File System (HDFS), dan persistent volume claims (PVC). Untuk informasi lebih lanjut, lihat Ikhtisar JindoData.
JindoFS menggunakan arsitektur master-worker di mana master memelihara metadata dan titik mount data yang di-cache, sedangkan worker mengelola data yang di-cache. Anda dapat menampung master dan worker JindoFS dalam kluster Kubernetes. Ketika kontainer tempat master JindoFS berjalan di-restart atau di-reschedule, metadata dan titik mount mungkin hilang, sehingga kluster JindoFS menjadi tidak tersedia. Untuk meningkatkan ketersediaan kluster JindoFS, Anda dapat menggunakan Fluid JindoRuntime untuk menyimpan metadata master JindoFS ke volume persisten Kubernetes (PV).
Prasyarat
Sebuah ACK Pro cluster yang menjalankan Kubernetes 1.18 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK Managed.
Suite AI cloud-native dan ack-fluid 1.0.5 atau lebih baru telah diterapkan di kluster. 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 terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
Bucket OSS telah dibuat dan file telah diunggah ke bucket. Pengguna Resource Access Management (RAM) yang Anda gunakan memiliki otorisasi untuk mengakses Bucket OSS. Untuk informasi lebih lanjut, lihat Buat Bucket dan Tambahkan Kebijakan Bucket.
Langkah 1: Siapkan volume disk
Buat file bernama
pvc.yaml. File ini digunakan untuk membuat PVC yang dapat Anda gunakan untuk memasang volume disk.CatatanUntuk informasi lebih lanjut tentang parameter dalam PVC, lihat Gunakan Volume Disk yang Diproses Secara Dinamis.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: demo-jindo-master-meta spec: accessModes: - ReadWriteOnce storageClassName: alicloud-disk-topology-alltype resources: requests: storage: 30GiJalankan perintah berikut untuk membuat PVC:
kubectl create -f pvc.yamlOutput yang Diharapkan:
persistentvolumeclaim/demo-jindo-master-meta created
Langkah 2: Buat Dataset dan JindoRuntime
Buat file bernama
secret.yaml. File ini digunakan untuk menyimpan ID AccessKey dan Rahasia AccessKey yang digunakan oleh pengguna RAM untuk mengakses Bucket OSS.apiVersion: v1 kind: Secret metadata: name: access-key stringData: fs.oss.accessKeyId: ****** # Tentukan ID AccessKey. fs.oss.accessKeySecret: ****** # Tentukan Rahasia AccessKey.Jalankan perintah berikut untuk membuat Secret:
kubectl create -f secret.yamlOutput yang Diharapkan:
secret/access-key createdBuat file bernama
dataset.yaml. File ini digunakan untuk mengonfigurasi Dataset dan JindoRuntime.apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: demo spec: mounts: - mountPoint: oss://<OSS_BUCKET>/<BUCKET_DIR> name: demo path: / options: fs.oss.endpoint: <OSS_BUCKET_ENDPOINT> encryptOptions: - name: fs.oss.accessKeyId valueFrom: secretKeyRef: name: access-key key: fs.oss.accessKeyId - name: fs.oss.accessKeySecret valueFrom: secretKeyRef: name: access-key key: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: demo spec: replicas: 2 volumes: - name: meta-vol persistentVolumeClaim: claimName: demo-jindo-master-meta master: volumeMounts: - name: meta-vol mountPath: /root/jindofsx-meta properties: namespace.meta-dir: "/root/jindofsx-meta" tieredstore: levels: - mediumtype: MEM path: /dev/shm volumeType: emptyDir quota: 12Gi high: "0.99" low: "0.99"Tabel berikut menjelaskan parameter dalam blok kode sebelumnya.
Parameter
Deskripsi
JindoRuntime
volumesParameter ini menentukan volume yang dipasang ke komponen JindoRuntime. Tentukan PVC yang Anda buat di Langkah 1: Siapkan volume disk.
master.volumeMountsParameter ini menentukan nama volume yang dipasang ke master JindoRuntime dan jalur pemasangan volume tersebut.
master.propertiesParameter ini menentukan detail master JindoRuntime. Untuk menyimpan metadata yang dikelola oleh master JindoRuntime, Anda harus menentukan
namespace.meta-dir: "<path>". Ganti<path>denganmount pathyang Anda tentukan dalam parametermaster.volumeMounts.Jalankan perintah berikut untuk membuat Dataset dan JindoRuntime:
kubectl create -f dataset.yamlOutput yang Diharapkan:
dataset.data.fluid.io/demo created jindoruntime.data.fluid.io/demo createdJalankan perintah berikut untuk memeriksa apakah Dataset telah dibuat:
kubectl get datasetOutput yang Diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 531.89MiB 0.00B 24.00GiB 0.0% Bound 5m35sJika
Boundditampilkan di kolomPHASE, Dataset dan JindoRuntime telah dibuat. Setelah Dataset memasuki statusBound, Fluid secara otomatis membuat PVC yang dinamai sesuai dengan Dataset. Anda dapat memasang PVC ke pod aplikasi untuk memungkinkan pod mengakses data dalam sumber data yang ditentukan dalam titik mount (Dataset.spec.mountPoint) Dataset.
Langkah 3: Periksa apakah penyimpanan persisten diaktifkan untuk master JindoFS
Pada langkah ini, pod tempat master JindoFS berjalan di-reschedule untuk memeriksa apakah penyimpanan persisten diaktifkan.
Buat file bernama
pod.yamldan tentukan PVC dalam blok kode.apiVersion: v1 kind: Pod metadata: name: nginx 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: demoJalankan perintah berikut untuk menerapkan aplikasi NGINX di kluster Anda:
kubectl create -f pod.yamlOutput yang Diharapkan:
pod/nginx createdJalankan perintah berikut untuk mengakses data dari pod aplikasi:
kubectl exec -it nginx -- ls /dataData dalam Bucket OSS yang ditentukan dalam titik mount (
Dataset.spec.mountPoint) Dataset diharapkan akan dikembalikan dalam output.Jalankan perintah berikut untuk menanyakan node tempat master JindoFS diterapkan:
master_node=$(kubectl get pod -o wide | awk '/demo-jindofs-master-0/ {print $7}')Jalankan perintah berikut untuk menambah taint pada node yang dikembalikan di Langkah 4 untuk mencegah pod baru dijadwalkan ke node tersebut.
kubectl taint node $master_node test-jindofs-master=reschedule:NoScheduleOutput yang Diharapkan:
node/cn-beijing.192.168.xx.xx taintedJalankan perintah berikut untuk menghapus pod tempat JindoFS master berjalan dan tunggu sistem merecreate pod tersebut:
kubectl delete pod demo-jindofs-master-0Output yang Diharapkan:
pod "demo-jindofs-master-0" deletedPod
demo-jindofs-master-0direcreate dan dijadwalkan ke node lain dalam kluster. Volume disk dipasang ke pod. Oleh karena itu, pod direcreate dan dipulihkan ke status sebelum penghapusan.CatatanUntuk mencapai tujuan ini, pod yang direcreate harus dijadwalkan ke node baru di zona yang sama dengan node asli tempat pod diterapkan. Ini karena disk tidak dapat dipasang lintas zona. Oleh karena itu, Anda harus memastikan bahwa kluster berisi setidaknya dua node di zona tempat pod awalnya diterapkan.
Jalankan perintah berikut untuk menghapus pod aplikasi dan tunggu sistem merecreate pod tersebut:
kubectl delete -f pod.yaml && kubectl create -f pod.yamlOutput yang Diharapkan:
pod "nginx" deleted pod/nginx createdJalankan perintah berikut untuk mengakses data dari pod aplikasi yang direcreate:
kubectl exec -it nginx -- ls /dataData dalam Bucket OSS yang ditentukan dalam titik mount (
Dataset.spec.mountPoint) Dataset diharapkan akan dikembalikan dalam output.
Langkah 4: Bersihkan lingkungan
Jalankan perintah berikut untuk menghapus pod aplikasi:
kubectl delete -f pod.yamlOutput yang Diharapkan:
pod "nginx" deletedJalankan perintah berikut untuk menghapus taint dari node:
kubectl taint node $master_node test-jindofs-master-Output yang Diharapkan:
node/cn-beijing.192.168.xx.xx untainted(Opsional) Jalankan perintah berikut secara berurutan untuk menghapus sumber daya terkait volume disk.
PentingSetelah Anda membuat volume disk, Anda akan dikenakan biaya untuk disk yang dibuat untuk volume tersebut. Jika Anda tidak lagi memerlukan percepatan data, bersihkan lingkungan. Untuk informasi lebih lanjut tentang biaya yang dikenakan oleh volume disk, lihat Volume Disk.
Sebelum Anda membersihkan sumber daya, pastikan tidak ada aplikasi yang menggunakan Dataset dan tidak ada operasi I/O yang dilakukan pada Dataset.
kubectl delete -f dataset.yaml kubectl delete -f pvc.yaml