Kubernetes简介
一、云原生的基础概述
云原生的定义
1.1 云原生的发展介绍
云原生技术的主要发展历程如下:
2004年:Google开始在内部大规模使用容器技术。
2008年:Google将Cgroups技术合并进Linux内核,为容器化技术奠定基础。
2013年:Docker项目正式发布,推动容器技术进入开源领域。
2014年:Kubernetes项目正式发布,成为容器编排的行业标准。
2015年:Google、Redhat、微软等共同发起成立CNCF(云原生计算基金会),推进云原生技术 的开源生态。
2017年:CNCF成员达到170个,基金项目数量为14个。
2018年:CNCF迎来三周年,成员数达195个,基金项目19个
1.2 云原生的定义
云原生技术帮助企业在公有云、私有云和混合云等动态环境中构建和运行可弹性扩展的应用。
公有云:公有云是一种云计算服务,其基础设施由云服务提供商在互联网上公开提供。与私有云不 同,公有云上的资源是共享的,用户可以按需使用和付费,无需拥有或管理基础设施。公有云服务 通常提供存储、计算、网络和应用程序服务等资源。常见的公有云服务提供商包括亚马逊云、微软 Azure、谷歌云等。
私有云:私有云是指一种云计算模式,是企业或组织在自己的数据中心中搭建的基于云计算技术的 自有云平台。与公有云不同,私有云完全由企业自己拥有和控制,可以提供更高的安全性和灵活 性,因为企业可以根据自身需求对云计算环境进行定制和管理,同时也不需要担心基础设施和数据 被外部访问。因此,私有云通常被用于托管企业核心应用程序和敏感数据,以满足严格的规定和监 管要求
混合云:混合云(Hybrid Cloud)是指由多个云计算架构、不同的云服务提供商或多种云计算部署 模式组成的一个集成的云计算环境。混合云将公有云、私有云、本地IT基础设施和第三方云服务有 机地结合起来,以满足企业不同的应用场景和需求。
混合云由多个云环境组成,使得企业可以根据应用的不同需要选择最合适的云环境,使其最大化利用公 有云提供的高度灵活性和弹性,同时也可以保留私有云提供的安全性、控制性和可靠性。
混合云的部署方式比较复杂,但能够提供更加灵活的云计算解决方案。在混合云中,企业可以将敏感数 据存储在私有云中,同时运行不太敏感的应用程序和工作负载则可以在公有云中进行部署,这能够使得 企业在降低成本的同时保持数据和隐私的安全性。
1.3 云原生的技术栈
云原生技术栈包括以下关键技术:
容器化:如Docker、containerd,提供应用的轻量级封装和环境一致性。
服务网格:例如Istio,管理服务之间的通信、安全性和流量控制。 微服务架构:将应用拆解为多个独立的服务,支持灵活扩展和独立部署。
不可变基础设施:服务一旦部署,便不再修改,通常使用版本化的镜像来保持一致性。
声明式API:通过定义期望的状态,由系统自动管理资源。
云原生 = 容器化(docker+k8s) + 微服务(Microservices)+ 无服务(Serverless) + DevOps + Service Mesh(服务网格) + 云(Cloud)

云元素的四要素
微服务:几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础, 那就是康威定律,指导服务怎么切分,很玄乎,凡是能称为理论定律的都简单明白不了,不然就忒 没b格,大概意思是组织架构决定产品形态,不知道跟马克思的生产关系影响生产力有无 系。
微服务架构的好处就是按function切了之后,服务解耦,内聚更强,变更更易;另一个划分服务的 技巧据说是依据DDD来搞。
容器化:Docker是应用最为广泛的容器引擎,在思科谷歌等公司的基础设施中大量使用,是基于 LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容 器管理,容器间的负载均衡,谷歌搞的,Docker和K8S都采用Go编写,都是好东西。
DevOps:这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见,实 际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云 原生提供持续交付能力。
持续交付:持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发 版本和稳定版本并存,其实需要很多流程和工具支撑。
1.4 云原生的特征
云原生系统具备以下特征,确保其适应现代云计算环境的需求:
1. 符合12因素应用:应用遵循12因素开发原则,确保可扩展性、无状态性、易维护等。
2. 面向微服务架构:应用拆解为独立的、松耦合的服务。
3. 自服务敏捷架构:开发人员可以自主创建和管理云资源,减少对运维的依赖。
4. 基于API的协作:通过API进行服务间的通信。
5. 抗脆弱性:系统具有自愈能力,能够应对不稳定的环境因素
12因素应用的具体原则:
1. 基准代码:使用同一代码库进行版本控制,并支持多次部署。
2. 依赖管理:显式声明和隔离各依赖项,确保环境一致性。
3. 配置管理:配置项存储在环境中,避免硬编码。
4. 后端服务:外部服务作为附加资源使用。
5. 构建、发布、运行分离:清晰区分应用构建和运行阶段。
6. 无状态进程:应用以无状态进程运行,便于水平扩展。
7. 端口绑定:通过端口提供服务,确保应用独立性。
8. 并发处理:通过进程模型进行扩展。
9. 快速启动与优雅终止:应用启动迅速,并在终止时确保数据一致性。
10. 开发环境与生产环境一致:确保开发、预发布和生产环境尽量一致。
11. 日志管理:统一收集并展示日志信息,确保可追溯性。
12. 管理进程:管理性任务(如数据备份)应使用与常驻进程相同的运行环境。 通过遵循这些原则,云原生应用能够在云环境中灵活、安全且高效地运行。
二、 K8S 是什么?
K8S 是 Kubernetes 的简写(K + “ubernete” 中的 8 个字母 + S)
Kubernetes 是一个开源平台,用于 自动部署、扩展和管理容器化(containerized)应用程序
它可以看作一个负责自动化运维、编排多个容器(如由 containerd 驱动的容器)的集群管理系统
源起:Kubernetes 受 Google 的 Borg 系统启发,后使用 Go 语言重写并捐赠给 CNCF
名称含义:源自希腊语,意为 “舵手 / 导航者”

官网:
– 英文: https://kubernetes.io
– 中文: https://kubernetes.io/zh-cn/docs
版本节奏:每年约四个发布版本(例如 1.12、1.15、1.17 … 到 1.30、1.34等)
2014年 Docker & Kubernetes蜜月期
2015~2016年 Kubernetes & RKT vs Docker,最终Docker胜出
2016年 Kubernetes逐渐赢得任务编排的胜利
2017年rkt和containerd 捐献给CNCF
2020年kubernetes宣布废弃dockershim,但 Mirantis和 Docker宣布维护dockershim
2022年5月3日,Kubernetes v1.24正式发布,此版本提供了很多重要功能。该版本涉及46项增强 功能:其中14项已升级为稳定版,15项进入beta阶段,13项则刚刚进入alpha阶段。此外,另有2项 功能被弃用、2项功能被删除。
关键变动:从 Kubernetes 1.24 起,官方移除对 Docker 的内建支持(即移除 dockershim),节 点必须使用符合 CRI(Container Runtime Interface)的运行时(如 containerd、CRI-O 等)

三、为什么要用 K8S?
Kubernetes 的设计初衷是解决传统部署方式在扩展、管理、容错等方面的困难。
以下是它主要解决的问题和带来的好处:
自动化运维:无须人工干预,实现一条命令或声明式方式完成部署、更新、扩容、缩容、删除等 弹性伸缩:依据指标(CPU、内存、自定义指标等)自动扩展或缩减 Pod 副本数 容灾 / 自愈:当某个节点或容器失败时,K8S 会自动重建或迁移 Pod,保证副本数量和期望状态 服务发现与负载均衡:通过 Service 为 Pod 提供稳定的访问入口,并自动分发请求 滚动升级与回滚:支持渐进式升级,一旦出错可以回滚到之前版本 集中配置与密钥管理:通过 ConfigMap 、 Secret 等资源集中管理配置与敏感数据 存储编排:支持将外部存储(NFS、Ceph、云存储等)纳入集群资源管理 批处理 / 定时任务:支持 Job 、 CronJob 用于一次性或定时任务
四、 Kubernetes 集群架构与组件
K8S集群由两大部分组成:控制平面(Control Plane)和节点(Node)。可以把控制平面理解为“指挥部”,负责全局决策;节点则是“作战部队”,负责实际运行容器应用。
1. Master控制平面:集群的“大脑”
控制平面的核心作用是管理集群状态,比如调度容器、监控故障、执行更新等。它包含以下关键组件:
-
kube-apiserver:所有操作的统一入口,提供RESTful API。无论是kubectl命令行工具,还是图形化界面,都必须通过它与集群交互,同时负责认证、授权和数据验证。
-
etcd:分布式键值数据库,是集群的“数据中心”。集群内所有重要信息(比如容器部署位置、资源配置)都存储在这里,确保数据一致且高可用。生产环境中,一定要做好etcd的数据备份。
-
kube-scheduler:“调度员”,负责为新创建的容器(Pod)选择合适的节点。它会根据节点的资源剩余情况、应用的资源需求、亲和性规则等因素,智能分配运行节点。
-
kube-controller-manager:“控制器管理器”,运行着多种控制器进程,比如节点控制器(监控节点故障)、Deployment控制器(确保容器副本数量符合预期)、Service控制器(维护容器间的网络连接)等。这些控制器持续监控集群状态,一旦发现实际状态与预期不符,就会自动执行修复操作。
-
cloud-controller-manager:对接云服务提供商(如AWS、阿里云)的API,管理云平台特有的资源(比如云服务器、负载均衡器)。如果是本地集群(比如测试环境),则不需要这个组件。
2. Node节点:集群的“手脚”
节点是实际运行容器的工作机器(可以是物理机或虚拟机),每个节点都运行着以下组件,确保容器能正常运行并与控制平面通信:
-
kubelet:“节点代理人”,在每个节点上运行,负责监听控制平面的指令,确保容器按照配置要求(PodSpec)运行。它还会定期向控制平面汇报节点和容器的状态。
-
kube-proxy:“网络代理”,维护节点上的网络规则,实现容器间的通信和负载均衡。比如,当多个容器副本提供同一个服务时,kube-proxy会将请求均匀分发到各个副本上。
-
容器运行时:负责实际运行容器的软件,比如containerd、CRI-O等。K8S通过容器运行时接口(CRI)与它交互,只要符合CRI规范,就能对接不同的容器运行时。
关于 Docker / dockershim 与 containerd 的变动
Kubernetes 从 1.20 开始宣布弃用内建对 Docker 的支持,逐步推动移除 dockershim
在 Kubernetes 1.24 中,dockershim 被正式移除,节点必须使用 CRI 兼容的运行时(如 containerd、CRI-O 等)
虽然 Docker 的引擎不再被 Kubernetes 直接使用(即不作为 CRI 运行时),但其构建的镜像仍然 兼容,因为镜像符合 OCI 标准
containerd 是当前主流的轻量级 CRI 运行时,性能稳定、社区活跃
Kubernetes架构

Kubernetes 工作流程

五、Kubernetes 核心概念与资源对象
| 概念 / 资源 | 含义与用途 |
| Pod(最小部署单元) | Kubernetes 中最小的可调度单位。可包含一个或多个容器,这些容器共享 网络、存储等资源。 |
| 控制器 (Controller) | 用来确保一定数量的 Pod 在运行、自动修复、扩缩、升级等。典型的控制器 有:• Deployment(管理无状态应用),• ReplicaSet(维持 Pod 副本 数),• StatefulSet(有状态服务),• DaemonSet(每节点运行一个 Pod),• Job / CronJob(批处理 / 定时任务 |
| Service(固定访问入口) | 为一组 Pod 提供稳定且可达的访问入口,具有负载均衡功能。Service 通过 标签选择器关联 Pod。 |
| Ingress | 在 HTTP/HTTPS 层面上管理外部访问路由,将外部流量导入集群内的 Service。 |
| Label / Annotation / Selector | Label 是资源的键值对标签,用于标识、组织和筛选资源;Annotation 是用 于存放非标识性、较大元数据的字段;Selector 用于根据 Label 选择资源。 |
| Namespace(命 名空间) | 用于将一个 Kubernetes 集群逻辑上划分为多个隔离空间,以实现资源隔 离、权限管理等。 |
| 资源定义结构 | Kubernetes 资源通常以 YAML/JSON 定义,具有 apiVersion、kind、 metadata、spec、status 等字段结构。 |
六、部署方式 / 常见部署方案
| 部署方式 | 主要适用场景 |
| Minikube | 在本地启动单节点 Kubernetes,适合实验、学习、 演示 |
| kubeadm | 官方推荐的快速部署工具,适合中小型集群 |
| 二进制 / 源码部署 | 手动控制所有组件、TLS 证书等细节,适合高可控的 生产环境 |
| 云托管服务(如 GKE / EKS / AKS / 阿里 ACK 等) | 云厂商管理控制平面、节点、升级等,适合企业生 产环境 |
总结
K8S不是一个孤立的工具,而是一套完整的云原生应用管理体系。它通过自动化、弹性伸缩、高可用等能力,解决了大规模容器化部署的核心痛点,成为企业数字化转型的“基础设施”。
虽然K8S的概念较多,入门有一定门槛,但只要循序渐进,从基础到实践,就能逐步掌握它的核心逻辑。对于开发者和运维人员来说,掌握K8S已经成为一项必备技能,也是拥抱云原生时代的关键一步。
更多推荐
所有评论(0)