2026-03-12 12:00:47
一、K8s 是什么及不是什么
K8s 是什么:K8s(Kubernetes)是谷歌开源的容器集群管理系统,是一个大规模容器编排系统,源于 Google 多年大规模容器管理技术 Borg 的开源版本。它主要用于完成基于容器的应用部署、维护和滚动升级,提供负载均衡和服务发现,支持跨机器和跨地区的集群调度,自动伸缩,广泛的 Volume 支持,并通过插件机制保证扩展性。
K8s 不是什么:
二、K8s 核心基础概念
Container(容器):
容器是一种便携式、轻量级的操作系统级虚拟化技术。
使用 namespace 隔离不同的软件运行环境,通过镜像自包含软件的运行环境,使得容器可以在任何地方运行。
容器体积小且启动快,每个容器镜像中打包一个应用程序,解决了开发到生产环境的一致性问题。
Pod:
Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或多个紧密关联的容器。
Pod 是一组紧密关联的容器集合,共享 PID、IPC、Network 和 UTS namespace,是 K8s 调度的基本单位。
Pod 内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享组合完成服务。
Node:
Node 是 Pod 真正运行的主机,可以是物理机或虚拟机。
每个 Node 节点上至少要运行 container runtime(如 docker 或 rkt)、kubelet 和 kube-proxy 服务。
Label:
Label 是识别 Kubernetes 对象的标签,以 key/value 的方式附加到对象上。
Label 不提供唯一性,经常用于多个对象(如 Pods)来标志具体的应用。
其他对象可以使用 Label Selector 来选择一组相同 label 的对象。
Annotations:
Annotations 是 key/value 形式附加于对象的注解,用于记录一些附加信息。
不同于 Labels 用于标志和选择对象,Annotations 用来辅助应用部署、安全策略以及调度策略等。
Service:
Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。
匹配 labels 的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。
每个 Service 都会自动分配一个 cluster IP 和 DNS 名,其他容器可以通过该地址或 DNS 来访问服务。
三、K8s 架构
K8s 的工作方式:
Kubernetes Cluster = N Master Node + N Worker Node(N>=1)。
K8s 的组件架构:
控制平面组件(Control Plane Components):
kube-apiserver:API 服务器,公开 Kubernetes API,是 Kubernetes 控制面的前端。
etcd:兼具一致性和高可用性的键值数据库,作为保存 K8s 所有集群数据的后台数据库。
kube-scheduler:监视新创建的、未指定运行节点的 Pods,选择节点让 Pod 在上面运行。
kube-controller-manager:在主节点上运行控制器的组件,包括节点控制器、任务控制器、端点控制器等。
cloud-controller-manager:嵌入特定云的控制逻辑的控制平面组件,允许链接集群到云提供商的应用编程接口中。
Node 组件:
kubelet:在每个节点上运行的代理,保证容器都运行在 Pod 中,接收 PodSpecs 并确保描述的容器处于运行状态且健康。
kube-proxy:在每个节点上运行的网络代理,实现 Kubernetes 服务概念的一部分,维护节点上的网络规则。
四、K8s 创建集群准备工作及注意事项