• Kubernetes
    catagories:
  • Kubernetes

1. cAdvisor简介

​ cAdvisor对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况,cAdvisor集成在Kubelet中,当kubelet启动时会自动启动cAdvisor,即一个cAdvisor仅对一台Node机器进行监控。kubelet的启动参数—cadvisor-port可以定义cAdvisor对外提供服务的端口,默认为4194。可以通过浏览器访问。项目主页:

2. cAdvisor结构图

3. Metrics

4. cAdvisor源码

核心代码:

  1. sysFs, err := sysfs.NewRealSysFs()
  2. #创建containerManager
  3. containerManager, err := manager.New(memoryStorage, sysFs, *maxHousekeepingInterval, *allowDynamicHousekeeping, ignoreMetrics.MetricSet, &collectorHttpClient)
  4. #启动containerManager
  5. err := containerManager.Start()

cadvisor/client/client.go

  1. // Client represents the base URL for a cAdvisor client.
  2. baseUrl string
  3. }
  4. // NewClient returns a new v1.3 client with the specified base URL.
  5. func NewClient(url string) (*Client, error) {
  6. if !strings.HasSuffix(url, "/") {
  7. url += "/"
  8. return &Client{
  9. baseUrl: fmt.Sprintf("%sapi/v1.3/", url),
  10. }, nil
  11. }

2)ContainerInfo

  1. // ContainerInfo returns the JSON container information for the specified
  2. // container and request.
  3. func (self *Client) ContainerInfo(name string, query *v1.ContainerInfoRequest) (cinfo *v1.ContainerInfo, err error) {
  4. u := self.containerInfoUrl(name)
  5. ret := new(v1.ContainerInfo)
  6. return
  7. }
  8. cinfo = ret
  9. }

3)DockerContainer

  1. // Returns the JSON container information for all Docker containers.
  2. func (self *Client) AllDockerContainers(query *v1.ContainerInfoRequest) (cinfo []v1.ContainerInfo, err error) {
  3. u := self.dockerInfoUrl("/")
  4. ret := make(map[string]v1.ContainerInfo)
  5. if err = self.httpGetJsonData(&ret, query, u, "all Docker containers info"); err != nil {
  6. return
  7. }
  8. cinfo = make([]v1.ContainerInfo, 0, len(ret))
  9. for _, cont := range ret {
  10. cinfo = append(cinfo, cont)
  11. }