ARMS容器监控可监控Kubernetes集群所在的节点,并通过Pod资源配置、资源使用分布情况和历史异常事件来预估和展示当前集群中可能有风险的Pod。
背景信息
作为生产环境的容器编排系统,Kubernetes最重要的功能之一是根据您的配置,自主进行容器的调度和编排。因此通常情况下,当启动一个容器组时,Kubernetes会自动将容器均匀地分布到各个节点中,充分利用每个节点的资源。
然而事实上,由于您的配置原因,可能会导致Kubernetes集群所在的节点存在风险。例如Pod驱逐行为:kubelet能够主动监测和防止计算资源的全面短缺,在节点配置资源不足时,kubelet会主动结束一个或多个Pod以回收短缺的资源。
您可以配置容器的Request及Limit的资源,然后Kubernetes在部署Pod时,就会调度到一个具有充足空闲资源的节点部署Pod:
- Request是Kubernetes保证容器使用的资源量,Kubernetes将根据Request的值决定部署Pod的节点。
- Limit是Kubernetes允许容器使用的最大资源量。
例如以下示例,声明Nginx这个Pod需要1核CPU和1024 MB的内存,运行中实际使用不能超过2核CPU和4096 MB的内存。
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx resources: # 资源声明 requests: memory: "1024Mi" cpu: "1000m" limits: memory: "4096Mi" cpu: "2000m"
如果没有为容器设置Request阈值,则默认Request的阈值为Limit的阈值;如果没有设置Limit,则默认为0,即无上限。通常情况下,会出现以下两种情况的配置:
- Request < Limit
如果设置Request的阈值小于Limit的阈值,则允许对资源进行过度订阅。此类情况也包括未设置Limit的情况。例如Pod未设置内存Limit,则认为该Pod可以无限制地使用内存资源。当该Pod过度使用资源,导致其他Pod资源不足时,所在节点就会触发Pod驱逐行为,以保证该节点的资源充足。
- Request > Limit
如果设置Request的阈值大于Limit的阈值,则相当于申请了较多资源,但仅限制使用其中的部分资源,此种情况会影响节点资源的使用。
使用容器监控来监控K8s集群所在节点
合理的Request和Limit资源配置对于部署在K8s集群上的应用的稳定性至关重要,容器监控提供的节点监控主要监控Request和Limit资源配置,以及受配置影响的节点健康状态。您可以按照以下步骤使用容器监控来监控K8s集群所在节点:
后续操作
为避免出现Pod驱逐风险从而保障应用稳定性,请遵循以下建议:
- 合理设置Kubernetes资源调度的关键参数Request和Limit。
- Pod驱逐会按照BestEffort > Burstable > Guaranteed的顺序进行驱逐,因此请将重要业务Pod的驱逐等级设置为Guaranteed。
- 将BestEffort驱逐等级的Pod用于处理离线批处理类业务。
在文档使用中是否遇到以下问题
更多建议
匿名提交