NOTE
2.Kubernetes
1. Kubernetes历史 Docker公司推出了Docker Swarm,开启PaaS战略,优势在于与Docker生态的无缝整合 Mesos公司推出了Marathon,优势在于大规模集群的调度与管理 Google基于内部的Borg 和 Omega 系统,推出了Kubernetes,优势在于设计
这是历史学习笔记,可能存在过时或不完整的理解。
1. Kubernetes历史
Docker公司推出了Docker Swarm,开启PaaS战略,优势在于与Docker生态的无缝整合 Mesos公司推出了Marathon,优势在于大规模集群的调度与管理 Google基于内部的Borg 和 Omega 系统,推出了Kubernetes,优势在于设计理念先进 Google和RedHat成立了CNCF,以 Kubernetes 项目为基础,建立一个由开源基础设施领域厂商主导的、按照独立基金会方式运营的平台级社区,来对抗以 Docker 公司为核心的容器商业生态
2. 什么是Kubernetes
Kubernetes是容器编排工具,用于容器应用的自动部署、扩缩容以及管理
3. 为什么需要Kubernetes
3.1. 为什么需要容器编排
所谓容器编排,按照用户的意愿和整个系统的规则,完全自动化地处理好容器之间的各种关系
3.2. 为什么需要Kubernetes
Docker Swarm+Docker Compose项目可以做到调度单容器+处理简单的依赖关系,但是对于复杂的依赖关系就不行了,所以才需要Kubernetes
4. 如何使用Kubernetes
5. kubeadm
5.1. kubeadm是什么
Kubernetes一键部署工具
5.2. 为什么需要kubeadm
Kubernetes的每个组件都是一个可执行文件,集群模式下需要传到每台服务器上进行部署,这个操作很麻烦,一般配合SaltStack、Ansible使用 为了支持一键部署Kubernetes,出来了kubeadm
5.3. 如何使用kubeadm
- 安装 kubeadm、kubelet 和 kubectl 这三个二进制文件
apt-get install kubeadm
- 部署 Master 节点
kubeadm init
- 将一个 Node 节点加入到当前集群中
kubeadm join <Master 节点的 IP 和端口 >
5.4. kubeadm的问题
无法一键部署高可用的Kubernetes集群
2026 注:这一点已经过时;当前 kubeadm 已支持高可用 control plane 的部署流程。
5.5. kubeadm原理
5.5.1. apt-get install kubeadm
把 kubelet 直接运行在宿主机上,然后使用容器部署其他的 Kubernetes 组件。
5.5.2. kubeadm init
- 环境检查
- 生成证书
/etc/kubernetes/pki/ca.{crt,key}
- 生成kube-apiserver 所需的配置文件,位于/etc/kubernetes/
admin.conf controller-manager.conf kubelet.conf scheduler.conf
- 为 Master 组件生成 Pod 配置文件并容器化启动这些组件,配置文件位于/etc/kubernetes/manifests
- 为 Etcd 生成Pod配置文件并容器化启动,配置文件位于/etc/kubernetes/manifests/
- 通过 localhost:6443/healthz 检查Master组件的健康
- 为集群生成一个bootstrap token,用于后续的kubeadm join
- 把 ca.crt 等 Master 节点的重要信息,通过 ConfigMap 的方式保存在 Etcd 当中,供后续部署 Node 节点使用
- 安装默认插件:kube-proxy 和 DNS
5.5.3. kubeadm join
就是和 kube-apiserver打交道把某台机器加入集群
6. Kubernetes架构

6.1. Etcd
存储整个集群的持久化数据
6.2. Master
2026 注:现代 Kubernetes 文档通常使用 control plane,不再推荐 Master 这一术语。
Cluster中的Node,它的主要职责是调度,即决定将应用放在哪里运行 这个角色也是Borg项目对Kubernetes最大的指导意义 控制节点由三个组件组成:
- kube-apiserver:负责 API 服务
- kube-scheduler:负责调度
- kube-controller-manager:负责容器编排
6.3. Node
Cluster中的Node,它的职责是运行Pod 计算节点的入口是kubelet组件
- kubelet
- 作用一:和容器运行时打交道
- 通过CRI和Container Runtime打交道
- Container Runtime:通过OCI和Linux操作系统打交道
- 通过gRPC和Device Plugin打交道
- Device Plugin:管理 GPU 等宿主机物理设备的主要组件
- 通过CRI和Container Runtime打交道
- 作用二:和容器配置网络打交道
- 通过CNI和Networking打交道
- 作用三:和容器持久化存储打交道
- 通过CSI和Volume Plugin打交道
- 作用一:和容器运行时打交道
6.4. 容器间关系
 为了解决容器间访问的问题,有了Pod 为了解决一次启动多个应用实例,有了Deployment 为了解决使用固定IP地址和端口访问多个实例,有了Service 为了解决容器间授权的问题,有了Secret 为了支持一次性任务、定时任务、守护进程服务,有了Job、CronJob、DaemonSet
6.4.1. Pod
Kubernetes的最小工作单元。每个Pod包含一个或多个容器。Pod中的容器会作为一个整体被Master调度到一个Node上运行 有两种使用方式
- 运行单一容器
- 运行多个容器
6.4.2. Controller
定义了Pod的部署特性,比如有几个副本、在什么样的Node上运行等 Deployment、ReplicaSet、DaemonSet、StatefulSet、Job
6.4.3. Service
Kubernetes Service定义了外界访问一组特定Pod的方式。Service有自己的IP和端口,Service为Pod提供了负载均衡
6.4.4. Namespace
Namespace可以将一个物理的Cluster逻辑上划分成多个虚拟Cluster,不同Namespace里的资源是完全隔离的
2026 注:Namespace 主要提供资源作用域;完整隔离还需要 RBAC、NetworkPolicy、ResourceQuota 等机制。