Skip to main content
Version: v1.0

Set FUSE Clean Policy

FUSE clean policy is set under the property spec.fuse.cleanPolicy of Runtime. There are 2 clean policies for FUSE Pod. OnRuntimeDeleted means that the FUSE Pod is cleaned only when the cache runtime is deleted, and OnDemand means that when the FUSE Pod is not used by any application Pod, the FUSE Pod will be cleaned. By default, the cleanup policy for FUSE Pod is OnRuntimeDeleted

Prerequisites​

Before running this example, please refer to the Installation Documentation to complete the installation, and check that each Fluid component is normal run:

$ kubectl get pod -n fluid-system
NAME READY STATUS RESTARTS AGE
csi-nodeplugin-fluid-5w7gk 2/2 Running 0 4m50s
csi-nodeplugin-fluid-h6wm7 2/2 Running 0 4m50s
csi-nodeplugin-fluid-nlkc4 2/2 Running 0 4m50s
dataset-controller-74554dfc4f-gwxmb 1/1 Running 0 4m50s
fluid-webhook-5c77b8b4f9-xgpv8 1/1 Running 0 4m50s
fluidapp-controller-7bb7bdb5d7-k7hdc 1/1 Running 0 4m50s

Typically, you will see a pod named dataset-controller, a pod named alluxioruntime-controller, and several pods named csi-nodeplugin running. Among them, the number of csi-nodeplugin these pods depends on the number of nodes in your Kubernetes cluster.

Demo​

Check DataSet and AlluxioRuntime Objects to be Created

$ cat dataset.yaml
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: hbase
spec:
mounts:
- mountPoint: https://mirrors.bit.edu.cn/apache/hbase/stable/
name: hbase
---
apiVersion: data.fluid.io/v1alpha1
kind: AlluxioRuntime
metadata:
name: hbase
spec:
replicas: 2
tieredstore:
levels:
- mediumtype: MEM
path: /dev/shm
quota: 2Gi
high: "0.95"
low: "0.7"
fuse:
cleanPolicy: OnDemand

We set FUSE's cleanup policy to OnDemand. When the FUSE Pod is not used by any application Pod, the FUSE Pod will be cleaned.

Create DataSet and AlluxioRuntime Objects

$ kubectl craete -f dataset.yaml
dataset.data.fluid.io/hbase created
alluxioruntime.data.fluid.io/hbase created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hbase-master-0 2/2 Running 0 2m32s
hbase-worker-0 2/2 Running 0 2m3s
hbase-worker-1 2/2 Running 0 2m2s

Create Application Pod

$ cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: /data
name: hbase-vol
volumes:
- name: hbase-vol
persistentVolumeClaim:
claimName: hbase
$ kubectl create -f nginx.yaml
pod/nginx created

Check Pods

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hbase-fuse-4ncs2 1/1 Running 0 85s
hbase-master-0 2/2 Running 0 4m31s
hbase-worker-0 2/2 Running 0 4m2s
hbase-worker-1 2/2 Running 0 4m1s
nginx 1/1 Running 0 85s

After creating the application Pod, we find that the FUSE Pod is successfully created.

Delete Application Pod

$ kubectl delete -f nginx.yaml
pod "nginx" deleted

Check Pods Again

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hbase-master-0 2/2 Running 0 5m
hbase-worker-0 2/2 Running 0 4m31s
hbase-worker-1 2/2 Running 0 4m30s

Note that the FUSE clean policy is set to OnDemand. After the application Pod is deleted, the FUSE Pod is no longer used by it, so the FUSE Pod is cleaned.

Set cleanPolicy to OnRuntimeDeleted

Set the property cleanPolicy of AlluxioRuntime to OnRuntimeDeleted

$ cat dataset.yaml
...
apiVersion: data.fluid.io/v1alpha1
kind: AlluxioRuntime
metadata:
name: hbase
spec:
replicas: 2
tieredstore:
levels:
- mediumtype: MEM
path: /dev/shm
quota: 2Gi
high: "0.95"
low: "0.7"
fuse:
cleanPolicy: OnRuntimeDeleted
$ kubectl apply -f dataset.yaml

Create Application Pod Again

$ kubectl create -f nginx.yaml
pod/nginx created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hbase-fuse-bl9w6 1/1 Running 0 7s
hbase-master-0 2/2 Running 0 12m
hbase-worker-0 2/2 Running 0 11m
hbase-worker-1 2/2 Running 0 11m
nginx 1/1 Running 0 7s

Delete Application Pod

$ kubectl delete -f nginx.yaml
pod "nginx" deleted
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hbase-fuse-bl9w6 1/1 Running 0 92s
hbase-master-0 2/2 Running 0 13m
hbase-worker-0 2/2 Running 0 13m
hbase-worker-1 2/2 Running 0 12m

Since cleanPolicy was set to OnRuntimeDeleted, after deleting the application pod, we found that the FUSE pod was not cleaned.

Delete AlluxioRuntime

$ kubectl delete alluxioruntime hbase
alluxioruntime.data.fluid.io "hbase" deleted
$ kubectl get pod
No resources found in default namespace.
$ kubectl get alluxioruntime
No resources found in default namespace.

FUSE Pods are also cleaned after removing AlluxioRuntime.

Clean up the Environment

$ kubectl delete dataset hbase
dataset.data.fluid.io "hbase" deleted