集群均衡器的必要性
从 kube-scheduler
的角度来看,它通过各种算法计算出最佳节点去运行 Pod 是非常完美的,当出现新的 Pod 进行调度时,调度程序会根据其当时对 Kubernetes 集群的资源描述做出最佳调度决定。但是 Kubernetes 集群是动态的,集群在一段时间内就会出现不均衡的状态,例如新节点上线与故障节点下线,或者节点维护,需要先执行节点排水,但是维护完成后,之前的 Pod 并不会自动回到该节点上来,因为 Pod 一旦被绑定了节点是不会触发重新调度的;又或者例如节点上 pod 利用率的变化导致某些节点利用率过低或者过高;节点标签变化导致 pod 的亲和策略不满足要求等等,kubernetes 集群在一段时间内就出现了不均衡的状态,所以需要均衡器来重新平衡集群。
Descheduler 组件简介
Kubernetes Descheduler 组件是一个可选的 Kubernetes 插件,用于自动化 Kubernetes 集群中节点的调度和优化。它的主要目的是解决 Kubernetes 集群中节点资源利用率不高的问题,通过在集群中调度和剔除空闲或低负载节点来优化集群的资源利用率。
具体来说,Descheduler 通过周期性检查 Kubernetes 集群中的节点负载情况,然后根据用户定义的策略来判断哪些节点需要剔除或迁移。它可以识别那些负载较低的节点,并将其与其他节点进行合并,从而使节点的资源利用率更高。
此外,Descheduler 还可以帮助用户预防节点故障。当一个节点出现问题时,Descheduler 可以自动将该节点上的 Pod 迁移到其他节点上,以确保 Kubernetes 集群的高可用性和稳定性。
为什么需要Networkpolicy
Networkpolicy可以控制进出pod的网络流量。默认情况下,每个pod都可以相互通信。当你想要阻止某些微服务相互通信时,网络策略就会派上用场,特别是当你与其他团队在共享集群中工作时。这使您的微服务在多租户环境中更具有隔离性。
关于Networkpolicy的一些基础知识,可以参照文章:Kubernetes NetworkPolicy实践指南
根据Kubernetes的网络模型,集群中的所有pod都可以直接相互通信,不管它们存在于哪个节点上,或存在于哪个命名空间中,通信过程不需要NAT。从可用性的角度来看,这是非常便捷的,但从安全性来看,这貌似有一点问题。假设攻击者侵入了一个不受网络限制地pod,他就可以连接到同一集群中的任何一个pod,甚至是有权限访问敏感信息的pod。
使用NetworkPolicy,可以在IP地址或端口级别上限制Kubernetes集群中pod之间的网络流量。
在Kubernetes集群中,该如何设置CPU的requests和limits呢?
可供选择的策略包含:
- 只使用limits
- 从来不用limits,只是设置requests
- 或者,两者哪一个都不用。
该作何选择呢?