本文为 CoreOS官方博客发布的新闻和说明,介绍了 CoreOS 中对 Kubernetes 的核心组件 kubelet 的集成和支持。通过在 CoreOS 中安装和使用 Kubelet ,演示了 Kubelet 的使用技巧,演示了如何在 Kubernetes 中更好的管理和监控容器资源 。
这周我们在 CoreOS Linux 的 alpha 开发版集成了 kubelet——Kubernetes 的一个核心内嵌组件。 Kubelet 负责维护 pod(应用实例)集合。Pod 集合由本地系统的一个或多个容器构成。在 Kubernetes 集群中,kubelet 用于作为本地代理,通过访问 Kubernetes 的 API 服务器,监控 PodSpecs 的状态。kubelet 也负责注册节点到 Kubernetes,发送事件和 pod 状态,汇报资源利用率。
kubelet 在 Kubernetes 集群中扮演重要角色的同时,也可以在单机模式工作。这篇文章接下来将会重点介绍在单机模式也即运行 Kubernetes 集群的但节点下使用 Kubelet 的技巧,和如何借助 cAdvisor 内建工具利用 Kubelet 监控容器资源利用率。
首先我们要安装 kubelet 并运行起来。请在 CoreOS Linux 773.1.0 或更新版本中使用本指南。
CoreOS Linux 默认合理集成了 kubelet,并做了安全性优化和易用性优化。但我们将会放宽安全限制以支持高级容器。这需要在单节点 Kubernetes 上跑代理组件,该组件需要iptables 的操作权限,以方便配置 Kubernetes 的服务发现模型。
创建 kubelet systemd(系统管理守护进程) 单元 sudo vim /etc/systemd/system/kubelet.service [Unit] Description=Kubernetes Kubelet Documentation=https://github.com/kubernetes/kubernetes [Service] ExecStartPre=/usr/bin/mkdir -p /etc/kubernetes/manifests ExecStart=/usr/bin/kubelet \ --api-servers=http://127.0.0.1:8080 \ --allow-privileged=true \ --config=/etc/kubernetes/manifests \ --v=2 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target 启动 kubelet 服务放置好 systemd 单元文件后,使用 systemctl 命令启动 kubelet
sudo systemctl daemon-reload sudo systemctl start kubelet
为确保 kubelet 能开机自启动,需要激活服务:
这时 kubelet 服务应该已经跑起来。你可以用 systemctl 状态命令确认:
kubelet 为本地系统管理容器提供了一个便利的接口。Kubelet 提供一个清单(manifest)字典,每20秒被监控一次以更新 pod 的 manifest 文件。在这之前, 在 kubelet systemd 单元中需要使用—config标志,配置文件目录 /etc/kubernetes/manifests。
Pod manifest 文件用 JSON 或 YAML 文件格式化并描述文件卷集合和一个或多个容器。我们可以使用一个在 manifest 目录的 pod manifest,部署一个单节点 Kubernets 集群。
在互联网下载 pod manifest 会有潜在安全风险,所以请确保在使用它们之前检查所有 pod manifest 的内容。
此时我们只需要拷贝 kubernetes.yaml 这个 pod manifest 到 kubelet 的 manifest 目录以启动单节点集群。
复制完成后,你可以使用标准 Docker 命令行工具看到Docker镜像和容器启动:
几分钟后你就有了一个运行的 Kubernetes 集群。接下来下载官方的 Kubernetes 客户端工具。
kubectl是官方的命令行工具,用于和 Kubernetes 集群交互。每个 Kubernetes 的发行版都包含一个新的 kublet 版本。下载并更改它为可执行程序:
wget https://storage.googleapis.com/kubernetes-release/release/v1.0.3/bin/linux/amd64/kubectl chmod +x kubectl
kubectl 可用于获取运行的集群信息。
Kubernetes master 运行在 :8080
kubectl 也可用于启动 pods
用 get pods 命令查看运行的 pods:
更多 Kubernets 细节请翻阅 Kubernetes on CoreOS docs。
kubelet 内置打包了 cAdvisor, 它用于收集,合计,处理并导出给定系统的运行中容器的信息。cAdvisor 包含内置 web 接口,可通过4194端口访问。
[ cadvisor web 界面 ]
通过 cAdvisor web UI ,可很方便查看系统资源利用状况和处理列表。
[ 系统利用状况图 ]
cAdvisor 也可用于监控特殊容器,例如 在 Kubernetes pod 里运行的 kube-apiserver:
[ 用 cadvisor查看容器信息 ]
想了解更多 cAdvisor 信息请翻阅 upstream docs。