跳到主要内容

32.podip

PR #389

Add PodIP to the info returned for a pod. [pod status中返回pod ip]

这段代码属于一个名为PodRegistryStorage的类型的方法,该方法用于填充一个Pod对象的信息。这个Pod对象是Kubernetes中的一个基本概念,它表示在一个节点(Node)上运行的一个或多个容器的集合,以及这些容器如何运行的一些共享资源。

这个fillPodInfo方法的具体操作如下:

  • 检查PodRegistryStorage是否有一个非nil的podCache。如果没有,该方法将直接返回,不做任何事情。

  • 如果有podCache,它会尝试使用pod的主机名(pod.CurrentState.Host)和ID(pod.ID)从缓存中获取Pod的信息。

  • 如果在获取Pod信息时发生错误,它会记录一个错误消息并返回,不再进行后续操作。

  • 如果成功获取到Pod信息,它会将这些信息存储在pod.CurrentState.Info中。

  • 这个方法会尝试从Pod信息中获取名为"net"的容器信息,这通常是网络容器,它负责Pod的网络设置。如果找不到"net"容器信息,它会记录一个警告消息。

  • 如果找到"net"容器信息,它会检查这个容器是否有网络设置(netContainerInfo.NetworkSettings)。如果没有,它会记录一个警告消息。

  • 如果"net"容器有网络设置,它会将网络设置中的IP地址(netContainerInfo.NetworkSettings.IPAddress)存储在pod.CurrentState.PodIP中。

总的来说,这个方法的目的是从缓存中获取Pod的信息,并填充到Pod对象的CurrentState字段中,特别是Pod的网络信息。

PR # 395

IntOrString for use in JSON/YAML

这段代码定义了一个名为IntOrString的类型,这个类型的对象可以保存一个整数或者字符串。对这种类型的对象进行JSON或YAML编码或解码时,会对内部的实际值进行编码或解码。这种类型在很多情况下很有用,比如,你可以定义一个JSON字段,这个字段可以接受一个数字或者字符串。

IntOrString类型有三个字段:

  • Kind,一个IntstrKind类型,标记实际值是整数还是字符串。
  • IntVal,整数值。
  • StrVal,字符串值。
  • IntstrKind是一个整数类型,有两个可能的值,IntstrInt表示实际值是整数,IntstrString表示实际值是字符串。

SetYAML方法用于在YAML解码时设置IntOrString的值。如果传入的值是整数,就把Kind设为IntstrInt,并把整数值保存到IntVal字段,然后返回true。如果传入的值是字符串,就把Kind设为IntstrString,并把字符串值保存到StrVal字段,然后返回true。如果传入的值既不是整数也不是字符串,就返回false。

GetYAML方法用于在YAML编码时获取IntOrString的值。根据Kind的值,返回IntVal或StrVal字段的值。

UnmarshalJSON方法用于在JSON解码时设置IntOrString的值。如果传入的JSON值是字符串(即第一个字节是"),就把Kind设为IntstrString,并把JSON值解码为字符串保存到StrVal字段。否则,就把Kind设为IntstrInt,并把JSON值解码为整数保存到IntVal字段。

MarshalJSON方法用于在JSON编码时获取IntOrString的值。根据Kind的值,返回IntVal或StrVal字段的值的JSON编码。

PR #394

Try to grab live data if the cache has errors.

PR #479

Add support for CPU limiting to the kubelet.

PR#465

Extract proxy/config common functions for reuse

这段代码定义了两种类型的配置管理:EndpointsConfig和ServiceConfig,它们都用于追踪特定配置的集合。它们都接受通过通道传递的"set"、"add"和"remove"操作,并在发生改变时调用已注册的处理程序。

首先,EndpointsConfig类型包含了三个字段:一个config.Mux类型的多路复用器,一个config.Watcher类型的观察者,和一个endpointsStore类型的存储结构。endpointsStore类型包含一个锁、一个记录端点信息的映射以及一个更新通知通道。

在NewEndpointsConfig函数中,会创建新的EndpointsConfig对象,并立即运行它。在这个过程中,它创建了一个更新通知通道和一个endpointsStore对象,并使用这些资源初始化config.Mux和config.Watcher对象。然后,它启动了一个协程,监视来自观察者和存储的更新。

EndpointsConfig类型的RegisterHandler方法接受一个EndpointsConfigHandler类型的参数,并添加一个侦听器到观察者中,这个侦听器在被通知时会调用处理程序的OnUpdate方法。

Channel方法创建一个新的EndpointsUpdate通道,并启动一个协程,在endpointsCh关闭时发送所有更新到该通道并关闭它。

Config方法返回当前存储的合并状态,它是一个映射,键是源,值是由源和端点映射组成的映射。

endpointsStore类型的Merge方法根据给定的更新操作更新其存储的端点信息,然后发送一个通知到其更新通道。

MergedState方法返回所有源的所有端点的列表。

ServiceConfig类型和EndpointsConfig类型的设计非常类似,只是它处理的是服务信息,而不是端点信息。

watchForUpdates函数是一个协程,它在从更新通道收到通知时调用观察者的Notify方法,并将当前的合并状态作为参数。