云原生 • Kubernetes—认识 k8s、k8s 架构、核心概念点介绍

云原生 • Kubernetes—认识 k8s、k8s 架构、核心概念点介绍
最新回答
大众电灯泡!

2026-03-12 12:00:47

认识 K8s、K8s 架构、核心概念点介绍

一、K8s 是什么及不是什么

K8s 是什么:K8s(Kubernetes)是谷歌开源的容器集群管理系统,是一个大规模容器编排系统,源于 Google 多年大规模容器管理技术 Borg 的开源版本。它主要用于完成基于容器的应用部署、维护和滚动升级,提供负载均衡和服务发现,支持跨机器和跨地区的集群调度,自动伸缩,广泛的 Volume 支持,并通过插件机制保证扩展性。

K8s 不是什么:

  • K8s 不是一个传统意义上的 PaaS 平台即服务的工具,它给使用者提供了很多选择的空间,不限制支持的应用程序类型、应用程序框架、支持的语言等。
  • K8s 不提供内置的中间件、数据处理框架、数据库或集群存储系统等。
  • K8s 不直接部署代码,也不会构建应用程序,但可以在其上构建所需的持续集成(CI)工作流。
  • K8s 不提供机器配置、维护、管理或自愈系统,也不提供应用程序配置语言或系统,以及点击即部署的服务市场。
  • K8s 不仅仅是一个“编排系统”,它消除了编排的需要,通过声明式的 API 和一系列独立、可组合的控制器保证应用总是在期望的状态。

二、K8s 核心基础概念

  1. Container(容器):

    容器是一种便携式、轻量级的操作系统级虚拟化技术。

    使用 namespace 隔离不同的软件运行环境,通过镜像自包含软件的运行环境,使得容器可以在任何地方运行。

    容器体积小且启动快,每个容器镜像中打包一个应用程序,解决了开发到生产环境的一致性问题。

  2. Pod:

    Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或多个紧密关联的容器。

    Pod 是一组紧密关联的容器集合,共享 PID、IPC、Network 和 UTS namespace,是 K8s 调度的基本单位。

    Pod 内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享组合完成服务。

  3. Node:

    Node 是 Pod 真正运行的主机,可以是物理机或虚拟机。

    每个 Node 节点上至少要运行 container runtime(如 docker 或 rkt)、kubelet 和 kube-proxy 服务。

  4. Label:

    Label 是识别 Kubernetes 对象的标签,以 key/value 的方式附加到对象上。

    Label 不提供唯一性,经常用于多个对象(如 Pods)来标志具体的应用。

    其他对象可以使用 Label Selector 来选择一组相同 label 的对象。

  5. Annotations:

    Annotations 是 key/value 形式附加于对象的注解,用于记录一些附加信息。

    不同于 Labels 用于标志和选择对象,Annotations 用来辅助应用部署、安全策略以及调度策略等。

  6. Service:

    Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。

    匹配 labels 的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。

    每个 Service 都会自动分配一个 cluster IP 和 DNS 名,其他容器可以通过该地址或 DNS 来访问服务。

三、K8s 架构

  1. K8s 的工作方式:

    Kubernetes Cluster = N Master Node + N Worker Node(N>=1)。

  2. 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 创建集群准备工作及注意事项

  • 集群中的所有机器的网络彼此均能相互连接,公网和内网都可以。
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
  • 禁用交换分区,以保证 kubelet 正常工作。
  • 基础环境准备包括设置域名、将 SELinux 设置为 permissive 模式、关闭 swap、允许 iptables 检查桥接流量等。