为了帮助用户更好的使用fluid,我们提供了一系列调度插件。 通过为Pod自动注入亲和性相关信息,优化Pod的调度结果,提高集群的整体使用效率。
您使用的k8s版本需要支持 admissionregistration.k8s.io/v1beta1( Kubernetes version > 1.14 )
查看全部节点
$ kubectl get no
NAME STATUS ROLES AGE VERSION
node.172.16.0.16 Ready <none> 13d v1.20.4
node.172.16.1.84 Ready <none> 13d v1.20.4
检查待创建的Dataset资源对象
$ cat<<EOF >dataset.yaml
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: hbase
spec:
mounts:
- mountPoint: https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/
name: hbase
---
apiVersion: data.fluid.io/v1alpha1
kind: AlluxioRuntime
metadata:
name: hbase
spec:
replicas: 1
tieredstore:
levels:
- mediumtype: MEM
path: /dev/shm
quota: 2Gi
high: "0.95"
low: "0.7"
EOF
创建Dataset资源对象
$ kubectl create -f dataset.yaml
dataset.data.fluid.io/hbase created
创建AlluxioRuntime资源并查看状态
$ kubectl create -f runtime.yaml
alluxioruntime.data.fluid.io/hbase created
$ kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
hbase-fuse-fdjpg 1/1 Running 0 94m 172.16.0.16 node.172.16.0.16 <none> <none>
hbase-master-0 2/2 Running 0 97m 172.16.0.16 node.172.16.0.16 <none> <none>
hbase-worker-ch8k7 2/2 Running 0 94m 172.16.0.16 node.172.16.0.16 <none> <none>
在此处可以看到,有一个Alluxio Worker成功启动,并且运行在节点172.16.0.16上。Alluixo Fuse的数量为1,也运行在节点172.16.0.16上。
创建Pod
$ cat<<EOF >nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
EOF
$ kubectl create -f nginx.yaml
查看Pod
查看Pod的yaml文件,发现被注入了如下信息:
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: fluid.io/dataset-num
operator: DoesNotExist
weight: 100
正如亲和性所影响的,Pod调度到了没有缓存的node.172.16.1.84节点。
$ kubectl get pods nginx -o custom-columns=NAME:metadata.name,NODE:.spec.nodeName
NAME NODE
nginx node.172.16.1.84
创建Pod
$ cat<<EOF >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
EOF
$ kubectl create -f nginx.yaml
查看Pod
查看Pod的yaml文件,发现被注入了如下信息:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: fluid.io/s-default-hbase
operator: In
values:
- "true"
正如亲和性所影响的,Pod会强制调度到了有缓存的node.172.16.0.16节点。
$ kubectl get pods nginx -o custom-columns=NAME:metadata.name,NODE:.spec.nodeName
NAME NODE
nginx node.172.16.0.16
注释: K8s默认调度器并不需要配置强制亲和性,但是如果使用一些类似Volcano,Yunikorn等调度器组件并不感知K8s原生数据卷的亲和性,导致应用调度