# 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.。

Last Updated: 4/15/2023, 8:33:17 PM