1. 集群
1.1 Master
Master 负责管理和维护 Kubernetes 集群信息,并向 Node 下放任务和接收反馈信息。
Master 上运行的组件有 kube-apiserver、kube-scheduler、kube-controller-manager、cloud-controller-manager 等。
1.2 Node
Node 负责集群负载,可以是物理机,也可以是虚拟机。为了管理 Pod ,每个 Node 都会运行 Container Runtime、Kubelet、Kube-proxy 。
2. 基本组件
2.1 kube-apiserver
kube-apiserver 为 Kubernetes 集群提供了 RESTful API,是操作集群的唯一入口。
2.2 kube-scheduler
kube-scheduler 负责分配调度 Pod 到集群内的节点上。它监听 kube-apiserver,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点。
2.3 kube-controller-manager
kube-controller-manager 通过 apiserver 监控整个集群的状态,并确保集群处于预期的工作状态。
2.4 cloud-controller-manager
cloud-controller-manager 主要负责与底层云提供商的平台交互。
2.5 kubelet
kubelet 运行在 Node 节点,在 apiserver 上注册节点信息,定期向 Master 上报节点的资源使用情况。此外,kubelet 还接受并执行 Master 节点发送的指令,管理 Pod 和 Pod 中的容器。
2.6 kube-proxy
kube-proxy 运行在 Node 节点上,负责 service 的通信和负载均衡。
2.7 kube-dns
kube-dns 为 Kubernetes 提供命名服务。
2.8 kubeadm
kubeadm 是一个构建 Kubernetes 集群的工具。它提供的 kubeadm init
和 kubeadm join
两个命令是快速构建 Kubernetes 集群的最佳实践。kubeadm 只关心集群中最基础的组件,不涉及 dashboard、CNI 等插件。
2.9 federation
Kubernetes 的设计定位是单一集群在同一个地域内。同一个地区的网络性能才能满足 Kubernetes 的调度和计算存储连接要求。
federation 提供了跨集群同步资源、跨集群服务发现的功能,可以用于管理多集群。
2.10 kubectl
kubectl 是 Kubernetes 的命令行工具。
3. 基础对象
3.1 Pod
Pod 是 Kubernetes 中最基本的调度单元。
Pod 可以运行多个 Docker 容器,容器间共享 PID、IPC、Network 和 UTS namespace。Pod 在创建时会被分配一个 IP 地址,Pod 间的容器可以相互通信。
3.2 Service
Service 用于将一组 Pod 暴露为一个服务。由于 Pod 的 IP 会随着 Pod 的重启而变化,不能直接对外提供服务。Service 为一组 Pod 提供了一个统一的访问入口。Kube-proxy 完成多个 Pod 上的负载均衡。
3.3 Label
Label 标签以 key/value 的方式附加到对象上,用于识别 Kubernetes 对象。Label Selector 可以用于选择一组相同 Label 的对象。
3.4 Replication Controller
Replication Controller 用于保证一定数量的 Pod 在集群中正常运行。Replication Controller 会持续监听 Pod 的运行状态,当 Pod 发生故障数量减少时,重新运行新的 Pod 副本。
3.5 Replica Set
Replica Set 是 Replication Controller 的升级版本。Replication Controller 仅支持 equality-based 的选择器,而 Replica Set 支持 labels user guide 中描述的 set-based 选择器。
3.6 Deployment
Deployment 是 Kubernetes 中用于处理无状态服务的资源,提供了更新 Pod 和 Replica Set 的方法,集成了上线部署、滚动升级、创建副本、暂停上线任务,恢复上线任务、回滚到以前某一版本等功能。
3.7 Job
Job 用于批量处理短暂的一次性任务,并保证指定数量的 Pod 成功结束。
3.8 DaemonSet
DaemonSet 可以保证集群中所有的或者部分的节点都能够运行同一份 Pod 副本,每当有新的节点被加入到集群时,Pod 就会在目标的节点上启动。
3.9 StatefulSet
StatefulSet 是用于支持有状态服务的资源,所管理的 Pod 拥有固定的Pod 名称,启停顺序。