控制台指南

最佳实践

开发者指南

API 文档

SDK 文档

填写文档满意度调查问卷,赢取缤纷好礼> HOT

数据容忍污点调度

最近更新时间:2022-04-19 17:36:59

节点亲和性是 Kubernetes Pod 的一种属性,它使得 Pod 被吸引到一类特定的节点。这可能出于一种偏好,也可能是硬性要求。Taint(污点)则相反,它使节点能够排斥一类特定的 Pod。

容忍度(Tolerations)是应用于 Pod 上的,允许(但并不要求)Pod 调度到带有与之匹配的污点的节点上。

污点和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod,是不会被该节点接受的。

而在 Fluid 中,考虑到 Dataset 的可调度性,资源对象中也需要定义 toleration,这意味着您能够像调度您的 Pod 一样调度缓存在 Kubernetes 集群上的存放位置。

新建工作环境

$ mkdir <any-path>/tolerations
$ cd <any-path>/tolerations

运行示例

查看全部节点

$ kubectl get no
NAME            STATUS   ROLES    AGE    VERSION
192.168.1.146   Ready    <none>   200d   v1.18.4-tke.13

为节点配置污点(taint)

$ kubectl taint nodes 192.168.1.146 hbase=true:NoSchedule

在接下来的步骤中,我们将看到节点上的污点配置。

再次查看节点

$ kubectl get node 192.168.1.146 -o yaml | grep taints -A3
  taints:
  - effect: NoSchedule
    key: hbase
    value: "true"

目前,节点增加了 taints 配置 NoSchedule,这样默认数据集就无法放置到该节点上。

检查待创建的 Dataset 资源对象

apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
  name: hbase
spec:
  mounts:
    - mountPoint: https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/
      name: hbase
  tolerations:
    - key: hbase 
      operator: Equal 
      value: "true" 

说明:

为了方便用户进行测试,mountPoint 这里使用的是 Web UFS,使用 COS 作为 UFS 可见 使用 GooseFS 挂载 COS(COSN)

在该Dataset资源对象的spec属性中,我们定义了一个tolerations的属性,该子属性要求数据缓存可以放置到配置污点的节点。

创建 Dataset 资源对象

$ kubectl create -f dataset.yaml
dataset.data.fluid.io/hbase created

检查待创建的 GooseFSRuntime 资源对象

apiVersion: data.fluid.io/v1alpha1
kind: GooseFSRuntime
metadata:
  name: hbase
spec:
  replicas: 1
  tieredstore:
    levels:
      - mediumtype: SSD
        path: /mnt/disk1
        quota: 2G
        high: "0.95"
        low: "0.7"

该配置文件片段中,包含了许多与 GooseFS 相关的配置信息,这些信息将被 Fluid 用来启动一个 GooseFS 实例。上述配置片段中的 spec.replicas 属性被设置为1,这表明 Fluid 将会启动一个包含1个 GooseFS Master 和1个 GooseFS Worker 的 GooseFS 实例。

创建 GooseFSRuntime 资源并查看状态

$ kubectl create -f runtime.yaml
goosefsruntime.data.fluid.io/hbase created


$ kubectl get pod -o wide
NAME                 READY   STATUS    RESTARTS   AGE   IP              NODE                       NOMINATED NODE   READINESS GATES
hbase-fuse-n4tnc     1/1     Running   0          63m   192.168.1.146   192.168.1.146   <none>           <none>
hbase-master-0       2/2     Running   0          85m   192.168.1.146   192.168.1.146   <none>           <none>
hbase-worker-qs26l   2/2     Running   0          63m   192.168.1.146   192.168.1.146   <none>           <none>

在此处可以看到,GooseFS Worker 被启动,并且运行在具有污点的节点之上。

检查 GooseFSRuntime 状态

$ kubectl get goosefsruntime hbase -o wide
NAME    READY MASTERS   DESIRED MASTERS   MASTER PHASE   READY WORKERS   DESIRED WORKERS   WORKER PHASE   READY FUSES   DESIRED FUSES   FUSE PHASE     AGE
hbase   1               1                 Ready          1               1                 Ready   1             1               Ready   4m3s

查看待创建的应用

我们提供了一个样例应用来演示 Fluid 是如何进行数据缓存亲和性调度的,首先查看该应用:

app.yaml

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  serviceName: "nginx"
  podManagementPolicy: "Parallel"
  selector: # define how the deployment finds the pods it manages
    matchLabels:
      app: nginx
  template: # define the pods specifications
    metadata:
      labels:
        app: nginx
    spec:
      tolerations:
      - key: hbase 
        operator: Equal 
        value: "true" 
      containers:
        - name: nginx
          image: nginx
          volumeMounts:
            - mountPath: /data
              name: hbase-vol
      volumes:
        - name: hbase-vol
          persistentVolumeClaim:
            claimName: hbase

运行应用

$ kubectl create -f app.yaml
statefulset.apps/nginx created

查看应用运行状态

$ kubectl get pod -o wide -l app=nginx
NAME      READY   STATUS    RESTARTS   AGE    IP              NODE                       NOMINATED NODE   READINESS GATES
nginx-0   1/1     Running   0          2m5s   192.168.1.146   192.168.1.146   <none>           <none>

可以看到 Nginx Pod 成功启动,并且运行在配置 taint 的节点之上。

环境清理

$ kubectl delete -f .

$ kubectl taint nodes 192.168.1.146 hbase=true:NoSchedule-

目录