文章目录
- 前言
- 一、docker运行机制
- 二、云原生概念
- 三、云原生技术栈
- 四、Kubernetes
- 1、k8s是什么
- 2、K8s 与容器运行时的对接流程
- 3、为什么要使用k8s
- 4、k8s集群架构及其组件
- 5、k8s工作流程
- 6、k8s核心概念和资源对象
- 总结
前言
本文围绕云原生核心体系展开,从 Docker 运行机制切入,厘清云原生核心概念与技术栈,深度解析 Kubernetes 核心原理、架构、流程及资源对象,系统梳理云原生落地核心知识体系。
一、docker运行机制
在了解k8s前,本文介绍下关于docker的运行机制,这样可以方便理解k8s具体是什么。
- docker-cli:用户发容器操作命令(调用 Docker API)
- Docker Engine:接收请求,管理容器生命周期
- containerd:转发请求,为容器启动专属containerd-shim
- containerd-shim:调用runc创建容器(命名空间 /cgroup)
- runc:创建容器后立即退出(仅负责初始化)
- containerd-shim:持续监控容器进程,向 containerd 同步状态
二、云原生概念
云原生技术帮助企业在公有云、私有云和混合云等动态环境中构建和运行可弹性扩展的应用。
公有云:公有云是一种云计算服务,其基础设施由云服务提供商在互联网上公开提供。与私有云不同,公有云上的资源是共享的,用户可以按需使用和付费,无需拥有或管理基础设施。公有云服务通常提供存储、计算、网络和应用程序服务等资源。常见的公有云服务提供商包括亚马逊云、微软Azure、谷歌云等。
私有云:私有云是指一种云计算模式,是企业或组织在自己的数据中心中搭建的基于云计算技术的自有云平台。与公有云不同,私有云完全由企业自己拥有和控制,可以提供更高的安全性和灵活性,因为企业可以根据自身需求对云计算环境进行定制和管理,同时也不需要担心基础设施和数据被外部访问。因此,私有云通常被用于托管企业核心应用程序和敏感数据,以满足严格的规定和监管要求
混合云:混合云(Hybrid Cloud)是指由多个云计算架构、不同的云服务提供商或多种云计算部署模式组成的一个集成的云计算环境。混合云将公有云、私有云、本地IT基础设施和第三方云服务有机地结合起来,以满足企业不同的应用场景和需求。
三、云原生技术栈
云原生 = 容器化(docker+k8s) + 微服务(Microservices)+ 无服务(Serverless) + DevOps + Service Mesh(服务网络) + 云(Cloud)
- 容器化 (docker+k8s):基于 Docker 打包应用为容器,通过 K8s 实现容器的自动化部署、调度、扩缩容与运维,是云原生的基础设施核心。
- 微服务:将单体应用拆分为独立自治、松耦合的小服务,按需部署 / 扩展,服务间轻量化通信,适配云原生弹性架构。
- 无服务 (Serverless):云厂商托管服务器资源,开发者仅写业务代码,按执行计费、事件驱动,自动弹性扩缩容,彻底免管基础设施。
- DevOps:开发与运维一体化的流程 + 工具体系,打通研运壁垒,实现持续集成 / 交付 / 部署,支撑云原生应用快速迭代。
- Service Mesh(服务网格):以轻量代理层(如 Sidecar)接管微服务间通信,解耦网络治理(限流 / 熔断 / 监控)与业务代码,统一管控服务通信。
- 云(Cloud):按需弹性使用云端的计算、存储、网络等资源池,替代自建物理机房,是云原生的资源底座。
四、Kubernetes
1、k8s是什么
- K8S 是 Kubernetes 的简写(K + “ubernetes” 中的 8 个字母 + S)
- Kubernetes 是一个开源平台,用于 自动部署、扩展和管理容器化(containerized)应用程序
- 它可以看作一个负责自动化运维、编排多个容器(如由 containerd 驱动的容器)的集群管理系统
- 源起:Kubernetes 受 Google 的 Borg 系统启发,后使用 Go 语言重写并捐赠给 CNCF
- 名称含义:源自希腊语,意为 “舵手 / 导航者”
关键变动:从 Kubernetes 1.24 起,官方移除对 Docker 的内建支持(即移除 dockershim),节点必须使用符合 CRI(Container Runtime Interface)的运行时(如 containerd、CRI-O 等)
2、K8s 与容器运行时的对接流程
K8s 1.24 之前:
K8s → CRI(容器运行时接口) → dockershim(K8s 内置的 Docker 适配层) → Docker → 创建容器;
K8s 1.24 之后:
K8s → CRI → containerd(轻量容器运行时) → 创建容器;
3、为什么要使用k8s
Kubernetes 的设计初衷是解决传统部署方式在扩展、管理、容错等方面的困难。
以下是它主要解决的问题和带来的好处:
- 自动化运维:无须人工干预,实现一条命令或声明式方式完成部署、更新、扩容、缩容、删除等
- 弹性伸缩:依据指标(CPU、内存、自定义指标等)自动扩展或缩减 Pod 副本数
- 容灾 / 自愈:当某个节点或容器失败时,K8S 会自动重建或迁移 Pod,保证副本数量和期望状态
- 服务发现与负载均衡:通过 Service 为 Pod 提供稳定的访问入口,并自动分发请求
- 滚动升级与回滚:支持渐进式升级,一旦出错可以回滚到之前版本 (滚动升级:多个微服务按次序升级,前一个无问题才会升级下一个)
- 集中配置与密钥管理:通过 ConfigMap 、 Secret 等资源集中管理配置与敏感数据
- 存储编排:支持将外部存储(NFS、Ceph、云存储等)纳入集群资源管理
- 批处理 / 定时任务:支持 Job 、 CronJob 用于一次性或定时任务。(定时任务,创建100个服务应用,因为瞬间创建100个可能不行)
4、k8s集群架构及其组件
控制平面(Master / Control Plane)组件
1、api server
集群的 API 接口入口,负责接收所有资源操作请求(增删改查、Watch)
2、controller-manager
运行多种控制器(Node 控制器、ReplicaSet 控制器、Service 控制器
等),确保资源状态符合期望。实现自愈的关键。比如:k8s管理的是3个nginx,挂了一个会再创一个,保证始终有3个
3、scheduler
对尚未调度的 Pod 选择合适的节点,基于预选(predicates)与优选(priorities / scoring)策略
4、etcd
分布式键值存储,用于持久化保存所有 Kubernetes 资源的状态数据
高可用建议:在生产环境中,控制平面组件建议部署为多实例、高可用配置,避免单点故障。
工作节点(Node / Worker)组件
1、kubelet
节点上的代理,负责接收控制平面下发的 Pod 任务,监控、执行、汇报节点与 Pod 状态
2、kube-proxy
在节点上实现 Service 的网络规则与负载转发,通常通过iptables、ipvs 或其他网络模型
3、container runtime(containerd 或 CRI-O 等)
负责容器镜像拉取、容器启动/停止、资源隔离等底层行为(在Kubernetes ≥1.24 中为必选 CRI 运行时)
5、k8s工作流程
核心逻辑:用户发请求→控制平面决策→工作节点执行→持续监控自愈
- 「api server」接收用户操作请求(创 Pod / 扩缩容等),认证校验后,将期望状态存入「etcd」;
- 「scheduler」从 etcd 读取未调度 Pod,按预选 + 优选策略选定最优 Node 节点;
- 「controller-manager」保障资源期望状态,触发 Pod 创建指令并同步至 api server;
- 目标 Node 的「kubelet」接收 api server 指令,执行 Pod / 容器创建,实时向 api server 汇报节点 + Pod实际状态,同步至 etcd;
- Node 的「kube-proxy」自动配置 Service 网络规则,实现请求负载转发到后端 Pod;
- 「controller-manager」持续对比 etcd 中「期望状态」与「实际状态」,异常时自动重建 Pod / 调度节点(自愈),全程由 api server 中转、etcd 持久化所有状态。
6、k8s核心概念和资源对象
1)Pod
Kubernetes 中最小的可调度单位。可包含一个或多个容器,这些容器共享网络、存储等资源。
2)控制器 (Controller)
用来确保一定数量的 Pod 在运行、自动修复、扩缩、升级等。典型的控制器有:
• Deployment(管理无状态应用),
• ReplicaSet(维持 Pod 副本数),
• StatefulSet(有状态服务),
• DaemonSet(每节点运行一个Pod),
• Job / CronJob(批处理 / 定时任务)
3)Service
为一组 Pod 提供稳定且可达的访问入口,具有负载均衡功能。Service 通过标签选择器关联 Pod。
4)Ingress
在 HTTP/HTTPS 层面上管理外部访问路由,将外部流量导入集群内的Service。
5)Label / Annotation / Selector
Label 是资源的键值对标签,用于标识、组织和筛选资源;Annotation 是用于存放非标识性、较大元数据的字段;Selector 用于根据 Label 选择资源。
6)Namespace(命名空间)
用于将一个 Kubernetes 集群逻辑上划分为多个隔离空间,以实现资源隔离、权限管理等。
7)资源定义结构
Kubernetes 资源通常以 YAML/JSON 定义,具有 apiVersion 、 kind 、metadata 、 spec 、 status 等字段结构。
总结
本文系统讲解 Docker 与 K8s 核心机制、云原生概念及技术栈,明晰 K8s 架构与工作逻辑,掌握这些知识可夯实云原生技术基础,支撑微服务容器化落地与集群运维。