• 用 label 控制 Pod 的位置


    默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node。不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上。

    Kubernetes 是通过 label 来实现这个功能的。

    label 是 key-value 对,各种资源都可以设置 label,灵活添加各种自定义属性。比如执行如下命令标注 k8s-node1 是配置了 SSD 的节点。

    kubectl label node k8s-node1 disktype=ssd

    然后通过 kubectl get node --show-labels 查看节点的 label。

    disktype=ssd 已经成功添加到 k8s-node1,除了 disktype,Node 还有几个 Kubernetes 自己维护的 label。

    有了 disktype 这个自定义 label,接下来就可以指定将 Pod 部署到 k8s-node1。编辑 nginx.yml:

    在 Pod 模板的 spec 里通过 nodeSelector 指定将此 Pod 部署到具有 label disktype=ssd 的 Node 上。

    部署 Deployment 并查看 Pod 的运行节点:

    全部 6 个副本都运行在 k8s-node1 上,符合我们的预期。

    要删除 label disktype,执行如下命令:

    kubectl label node k8s-node1 disktype-

     - 即删除。

    不过此时 Pod 并不会重新部署,依然在 k8s-node1 上运行。

    除非在 nginx.yml 中删除 nodeSelector 设置,然后通过 kubectl apply 重新部署。

    Kubernetes 会删除之前的 Pod 并调度和运行新的 Pod。

    Deployment 相关操作就讨论到这里,下一节我们学习 DaemonSet。

  • 相关阅读:
    主机与虚拟机通信:以主机VS2010连接虚拟机MySql为例
    Json与类对象转换
    VS附加到进程调试的方法及应用场景
    地图API使用文档-以腾讯地图为例
    JS使用ActiveXObject读取数据库代码示例(只支持IE)
    css文件内引用外部资源文件的相对路径
    ::after,::before使用
    高德地图API应用
    LogNet4学习笔记
    MvcPager分页控件的使用
  • 原文地址:https://www.cnblogs.com/twobrother/p/11083122.html
Copyright © 2020-2023  润新知