Kubelet运行在Kubernetes Minion Node上. 它是container agent的逻辑继任者(使用golang重写),它是GCE镜像的一部分. Kubelet二进制程序负责维护在特定主机上运行的一组容器。它从配置文件或是从etcd 服务器上同步容器配置清单。容器配置清单是描述一个pod的文件。Kubelet采用一组使用各种机制提供的清单并确保这些清单描述的容器被启动并持续运行. 有以下几种方式提供给kubelet一个容器清单:
文件 通过一个命令行参数传递。此文件每20秒(可配置)重新检查.
HTTP URL 通过命令行参数传递HTTP URL参数。 此端点每20秒检查(也可配置), 通过查询获得容器清单.
Etcd服务器 Kubelet发现etcd服务器并watch相关的key。watch的etcd key是 /registry/nodes/$(hostname -f)。由于这是一种etcd watch机制,注意到改变并采取相应的行动非常迅速. Kubelet 的组成元素可以从如下代码-Kubelet结构体定义看出:
// Kubelet 结构体描述了kubelet使用到的重要元素.
type Kubelet struct {
hostname string
dockerClient dockertools.DockerInterface
rootDirectory string
networkContainerImage string
podWorkers *podWorkers
resyncInterval time.Duration
pods []api.BoundPod
etcdClient tools.EtcdClient
...
cadvisorClient cadvisorInterface
...
}
其中重要的是如下的几个元素:
dockerClient : 使用github.com/fsouza/go-dockerclient 作为docker client.
etcdClient : 使用 coreos/go-etcd/etcd 作为etcd client.
rootDirectory : 维护kubelet文件(volume mounts,etc) 的目录.默认值是/var/lib/kubelet
podWorkers : 记录上面有正在运行工作的workers的pod信息
cAdvisorClient : google cAdvisor 用来监测minion机器和之上容器的资源使用情况. 使用github.com/google/cadvisor/client
其中还有一个配置Kubelet的结构体,名为KubeletConfig, 他从启动命令行参数构造,最后作为启动kubelet的参数传入,源代码如下,具体可以参见后文的描述.
type KubeletConfig struct {
EtcdClient tools.EtcdClient
DockerClient dockertools.DockerInterface
CAdvisorPort uint
Address util.IP
...
AllowPrivileged bool
HostnameOverride string
RootDirectory string
...
ManifestURL string
FileCheckFrequency time.Duration
HttpCheckFrequency time.Duration
Hostname string
...
}
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....