本文介绍如何查看ACK集群Pro版的控制面组件监控大盘及组件访问的最佳实践。
前提条件
查看控制面组件监控大盘
控制面组件访问最佳实践
您在访问集群控制面组件时,建议遵循以下最佳实践原则,尤其在大规模集群(节点规模大于100,Kubernetes资源量较大)的场景下,可以提升集群整体稳定性。
尽量使用Informer、Lister方式从API Server读取数据,对API Server和etcd综合压力较小。
如果必须要使用全量LIST,建议请求增加
resourceVersion=0
,从APIServer Cache中读取数据,避免一次请求访问全量击穿到etcd。如果确实需要从etcd读取数据,需要基于Limit使用分页访问。API序列化协议使用
Protobuf
,相比于JSON更节省内存和传输流量。更多信息,请参见Alternate representations of resources。代码样例如下:kubeConfig, err := clientcmd.BuildConfigFromFlags(s.Master, s.Kubeconfig) if err != nil { return nil, err } kubeConfig.AcceptContentTypes = strings.Join([]string{runtime.ContentTypeProtobuf, runtime.ContentTypeJSON}, ",") kubeConfig.ContentType = runtime.ContentTypeProtobuf client, err := clientset.NewForConfig(restclient.AddUserAgent(kubeConfig, "content-type-example")) ...
及时清理不使用的Kubernetes资源,例如ConfigMap、Secret和PVC等。避免出现超过1000的Pending Pod,因为大量Pending Pod会对kube-apsierver、kube-controller-manager和kube-scheduler持续产生压力。
注意关注控制面组件使用情况,尤其是CPU和内存利用率指标,避免持续高水位导致组件OOM等异常。如果出现持续高水位,建议通过清理无效资源、优化客户端行为、拆分集群业务等措施,保证集群处于合理水位。
部分开源组件对控制面压力较大,官方输出了相应的优化治理方案,建议关注并应用到实践。以Argo workflow为例,官方推出的Kube API过量访问的优化方案建议使用Argo时,需开启相关配置。更多信息,请参见Running At Massive Scale。
相关文档
控制面组件 | 监控大盘 | 描述 | 参考文档 |
kube-apiserver | ACK Pro APIServer | 介绍kube-apiserver组件的指标清单、对应大盘的使用指导以及常见指标异常的问题解析。 | |
cloud-controller-manager | ACK Pro Cloud Controller Manager | 介绍cloud-controller-mananger组件的指标清单、对应大盘的使用指导以及常见指标异常的问题解析。 | |
etcd | ACK Pro ETCD | 介绍etcd组件的指标清单、对应大盘的使用指导以及常见指标异常的问题解析。 | |
kube-controller-manager | ACK Pro Kube Controller Manager | 介绍kube-controller-manager组件的指标清单和对应大盘的使用指导。 | |
kube-scheduler | ACK Pro Scheduler | 介绍kube-scheduler组件的指标清单、对应大盘的使用指导以及常见指标异常的问题解析。 | |
自定义Prometheus监控和告警 | 自定义大盘名称 | 介绍如何基于用户自建的Prometheus,采集ACK Pro集群的控制面组件监控API Server、etcd、Scheduler、KCM、CCM指标配置说明以及推荐的报警配置。 |