Kubernetes 集群中的计算能力由主机 (Node) 提供,Kubernetes 集群中的 Node 是所有 Pod 运行所在的工作主机,可以是物理机也可以是虚拟机。而 KubeSphere 主机管理的功能完全满足企业对集群运维监控的需求,支持实时查看资源状态和节点状态,查看任意主机上容器组的运行状态以及 CPU 和 内存的消耗,并且主机的监控页面还能够实时地提供全方位细粒度的资源监控如 IOPS、磁盘吞吐、网卡流量,让用户一目了然所有主机资源状态。
节点 (Node) 中有一个重要的功能即污点 (Taints) 管理。我们知道节点亲和性 (NodeAffinity) 是 Pod 上定义的一种属性,使 Pod 能够按我们的要求调度到某个节点上,而污点则恰恰相反,它可以让节点拒绝运行 Pod,甚至驱逐 Pod。污点是节点的一个属性,如果主机设置了污点后,底层的 Kubernetes 是不会将 Pod 调度到这个节点上的。
主机管理列表
首先登录 KubeSphere 管理控制台,访问左侧菜单栏,在 资源 菜单下,点击 主机管理 按钮进入列表页。作为集群管理员,可以查看当前集群下所有主机信息。列表即可一目了然每个节点的状态、污点情况和最常用的 CPU、内存、容器组数量等监控指标。
污点管理
点击列表中的某台主机,进入详情页。例如以下节点,我们发现它的内存使用情况已经高达 91 % ,因此不建议再继续往这台节点上调度新的 Pod,可以为其设置一个污点。设置了污点后,KubeSphere 是不会将 Pod 调度到这个 Node 上的。
1、点击左上角 污点管理 按钮,进入主机污点 (Taints) 管理页面。
2、污点的属性一般是 key=value [effect]
,其中 key=value
一般用来匹配 Pod 的容忍 (Toleration)。而 effect 有 3 个选项,详见参数解释。
3、比如此处设置为 test=node1
,effect 设置为 NoSchedule,那么只有设置了 Toleration 与该 Node 污点属性一致的 Pod,才允许被调度到该节点。
参数解释:
Node 的 effect 存在以下 3 个值,对于还未被调度的 Pod 来说:
- NoSchedule: 表示不允许调度,已调度的资源不受影响。
- PreferNoSchedule: 表示尽量不调度。
- NoExecute: 表示不允许调度
如果在设置 node 的 Taints (污点) 之前,就已经运行了一些 Pod,则分为以下几种情况:
- 若 effect 的值是 NoSchedule 或 PreferNoSchedule,对于已运行的 Pod 仍然可以运行,只是新 Pod (如果没有设置容忍) 不会再往上调度。
- 若 effect 的值是 NoExecute,那么此 Node 上正在运行的 Pod,只要没有容忍的,立刻被驱逐。effect 为 NoExecute 的污点,在容忍 (Toleration) 属性中有一个可选配置:tolerationSeconds 字段,用来设置这些 Pod 还可以在这个 Node 之上运行多久,给它们一点宽限的时间,到时间才驱逐。
- 如果是部署 (Deployment),那么被该 Node 驱逐的 Pod 会漂移其它节点运行。
- 如果是守护进程集 (DaemonSet) 被驱逐后也不会再被运行到其它 Node,直到 Node 上的 NoExecute 污点被删除或者为该 Pod 设置了容忍。
如何将日志和监控的 Pod 调度到专用节点
目前,在 KubeSphere 中已对日志和监控的 Pod 添加了如下的 toleration,若希望将监控和日志调度到专用节点可以给需要调度到的监控节点和日志节点分别打上与 tolerations 匹配的 taint。
# 监控
tolerations:
- effect: NoSchedule
key: dedicated
operator: Equal
value: monitoring
# 日志
tolerations:
- key: CriticalAddonsOnly
operator: Exists
- effect: NoSchedule
key: dedicated
value: log
查看主机详情
在主机列表页,点击某个主机节点打开其详情页,可以看到当前主机下所有资源的概况,包括主机的 CPU 、内存和容器组资源运行和使用状态,并且支持查看主机上所有容器组的资源使用情况和数量变化,以及注解 (Annotation) 和事件 (Events) 信息。
节点状态
节点状态 (Conditions) 描述了所有运行中节点的状态,KubeSphere 对主机的管理有以下五种状态,集群管理员通过以下五种状态可以判断当前节点的负载和能力,更合理地管理主机资源。
- OutOfDisk:表示当前节点是否有足够的空间添加和运行新的 Pods
- MemoryPressure:表示当前节点的内存压力的高低
- DiskPressure:表示当前节点的磁盘压力高低
- PIDPressure:表示当前节点的进程是否存在压力
- Ready:表示当前节点的状态是否健康和能够准备接收新的 Pods 运行,Node Controller 如果 40 秒 内没有收到节点的状态报告则为 Unknown
查看监控
值得一提的是,主机管理支持细粒度的资源监控,可筛选指定时间范围内的监控数据以查看变化情况。
停用或启用主机
在主机详情页面,点击左侧 停用 (cordon) 按钮,主机状态变为 无法调度,当前按钮变为 启用 (uncordon),当有新的工作负载被创建时将不会被调度到此节点,如想回复为可调度状态,点击 启用 按钮。
更新主机标签
如果需要限制 Pod 到指定的 Node 上运行,则可以给 Node 打标签 (Label) 并给 Pod 配置节点选择器 (NodeSelector)。
例如,给其中一个 Node 打上标签 role=ssd_node
后,如果给 Pod 也设置了 NodeSelector 为 role : ssd_node
,那么该 Pod 将只会在这一个节点上运行。
如果需要更新更新主机标签,可在项目详情页面,点击左侧项目操作菜单, 点击 编辑标签 按钮编辑当前主机上的标签 (Labels),最后点击 确认 按钮完成修改。