k8s

基于extended resource扩展节点资源

背景

扩展资源是 kubernetes.io 域名之外的标准资源名称。它们使得集群管理员能够颁布非Kubernetes 内置资源,而用户可以使用他们。

自定义扩展资源无法使用 kubernetes.io 作为资源域名。

管理扩展资源

  • 节点级扩展资源
    节点级扩展资源绑定到节点.
  • 设备插件管理的资源
    发布在各节点上由设备插件所管理的资源,如 GPU(GPUmanager),智能网卡等。

为节点配置资源

  • 集群管理员可以向apierver提交 PATCH的HTTP 请求,然后在节点的 status.capacity 中为其配置资源。
  • kubelet 会异步地对 status.allocatable 字段执行自动更新操作,使之包含新资源。
  • 调度器在评估 Pod 是否适合在某节点上执行时会使用节点的 status.allocatable 值,在更新节点容量使之包含新资源之后和请求该资源的第一个 Pod 被调度到该节点之间,可能会有短暂的延迟。

集群层面的扩展资源

  • 可选择由默认调度器管理资源,默认调度器像管理其他资源一样管理扩展资源。
    • Request 与 Limit 必须一致,因为 Kubernetes无法确保扩展资源的超售。
  • 更常见的场景是,由调度器扩展程序(Scheduler Extenders)管理,这些程序处理资源消耗和资源配额。
    • 修改调度器策略配置 ignored ByScheduler 字段
      可配置调度器不要检查自定义资源。

file

实践

  1. 查看当前环境的kubeconfig
    cat ~/.kube/config
  2. 解码并生成证书
    echo LS0tL...== | base64 -d > admin.crt
    echo LS0tL...== | base64 -d > admin.key
  3. 执行patch命令添加资源
    curl --key admin.key --cert admin.crt --header "Content-Type: application/json-patch+json" --request PATCH -k --data '[{"op": "add", "path": "/status/capacity/extended-cpu", "value": "2"}]' https://192.168.0.6:6443/api/v1/nodes/node1/status

    这里会报错,因为匿名用户没有patch的权限,需要授权。
    file

  4. 授权
    k create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:anonymous

    file

  5. 再次执行patch命令,成功。
    file
  6. 查看node的资源信息。
    file
  7. 部署带额外资源的pod。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx-deployment
    spec:
    replicas: 1
    selector:
    matchLabels:
      app: nginx
    template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          resources:
            limits:
            # 这里先超出额外资源做测试
              wgh/extended-cpu: 3
            requests:
              wgh/extended-cpu: 3
    k create -f deployment.yaml
    k get po

    file
    由于设置的额外资源只有2,deployment中requests需要3,所以pod处于pending状态。
    file

  8. 修改wgh/extended-cpu为2,pod调度成功。
    file
  9. 删除额外资源。
    curl --key admin.key --cert admin.crt --header "Content-Type: application/json-patch+json" --request PATCH -k --data '[{"op": "remove", "path": "/status/capacity/wgh~1extended-cpu", "value": "2"}]' https://192.168.0.6:6443/api/v1/nodes/node1/status

    file
    已经没有wgh/extended-cpu的资源了。
    file

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x