# k8s 组件
本文介绍了 k8s 集群所需的各种二进制组件。
# Master 组件
Master 组件提供集群的管理控制中心。
Master 组件可以在集群中任何节点上运行。但是为了简单起见,通常在一台 VM/机器上启动所有 Master 组件,并且不会在此 VM/机器上运行用户容器。请参考 构建高可用群集以来构建 multi-master-VM。
# kube-apiserver
kube-apiserver 用于暴露 k8s API。任何的资源请求/调用操作都是通过 kube-apiserver 提供的接口进行。请参阅构建高可用群集。
# ETCD
etcd 是 k8s 提供默认的存储系统,保存所有集群数据,使用时需要为 etcd 数据提供备份计划。
# kube-controller-manager
kube-controller-manager 运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。
这些控制器包括:
节点(Node)控制器。
副本(Replication)控制器:负责维护系统中每个副本中的 pod。
端点(Endpoints)控制器:填充 Endpoints 对象(即连接 Services&Pods)。
Service Account
和 Token 控制器:为新的
Namespace
创建默认帐户访问 API Token。
# cloud-controller-manager
云控制器管理器负责与底层云提供商的平台交互。云控制器管理器是 k8s 版本 1.6 中引入的,目前还是 Alpha 的功能。
云控制器管理器仅运行云提供商特定的(controller loops)控制器循环。可以通过将--cloud-provider flag 设置为 external 启动 kube-controller-manager,来禁用控制器循环。
cloud-controller-manager 具体功能:
节点(Node)控制器
路由(Route)控制器
Service 控制器
卷(Volume)控制器
# kube-scheduler
kube-scheduler 监视新创建没有分配到 Node 的 Pod,为 Pod 选择一个 Node。
# 插件 addons
插件(addon)是实现集群 pod 和 Services 功能的。Pod 由 Deployments,ReplicationController 等进行管理。Namespace 插件对象是在 kube-system Namespace 中创建。
# DNS
虽然不严格要求使用插件,但 k8s 集群都应该具有集群 DNS。
群集 DNS 是一个 DNS 服务器,能够为 k8s services 提供 DNS 记录。
由 k8s 启动的容器自动将这个 DNS 服务器包含在他们的 DNS searches 中。
了解更多详情
# 用户界面
kube-ui 提供集群状态基础信息查看。更多详细信息,请参阅使用 HTTP 代理访问 k8s API
# 容器资源监测
容器资源监控提供一个 UI 浏览监控数据。
# Cluster-level Logging
Cluster-level logging,负责保存容器日志,搜索/查看日志。
# 节点(Node)组件
节点组件运行在 Node,提供 k8s 运行时环境,以及维护 Pod。
# kubelet
kubelet 是主要的节点代理,它会监视已分配给节点的 pod,具体功能:
- 安装 Pod 所需的 volume。
- 下载 Pod 的 Secrets。
- Pod 中运行的 docker(或 experimentally,rkt)容器。
- 定期执行容器健康检查。
- Reports the status of the pod back to the rest of the system, by creating a mirror pod if necessary.
- Reports the status of the node back to the rest of the system.
# kube-proxy
kube-proxy 通过在主机上维护网络规则并执行连接转发来实现 k8s 服务抽象。
# docker
docker 用于运行容器。
# RKT
rkt 运行容器,作为 docker 工具的替代方案。
# supervisord
supervisord 是一个轻量级的监控系统,用于保障 kubelet 和 docker 运行。
# fluentd
fluentd 是一个守护进程,可提供 cluster-level logging.。