K8s

来自云上百科


K8sKubernetes的简称,是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。K8s由Google于2014年开源,现由云原生计算基金会(CNCF)维护,已成为云原生应用的事实标准。

K8s架构示意图

开发背景

K8s源于Google内部使用超过15年的大规模集群管理系统Borg。2013年,Docker容器技术的兴起使应用容器化成为趋势,但缺乏成熟的容器编排工具。Google工程师团队基于Borg的经验,使用Go语言重新设计开发了Kubernetes,并于2014年6月在GitHub上开源。

2015年7月,Kubernetes发布1.0版本,同时Google与Linux基金会合作成立了云原生计算基金会,将Kubernetes捐赠给CNCF作为种子项目。此后,K8s迅速获得业界支持,微软IBMRed HatVMware等科技巨头纷纷加入贡献者行列。

核心概念与架构

基本概念

K8s引入了一系列抽象概念来描述容器化应用的部署和管理:

  • Pod:K8s中最小的部署单元,包含一个或多个容器,共享网络和存储资源
  • Node:集群中的工作节点,可以是物理机或虚拟机,负责运行Pod
  • Cluster:由多个Node组成的集群,提供统一的资源池
  • Service:为Pod提供稳定的网络访问入口,实现负载均衡
  • Namespace:用于资源隔离的虚拟集群
  • Deployment:声明式的应用部署和更新管理

架构设计

K8s采用主从架构,分为控制平面和数据平面:

控制平面(Master节点)包含:

  • API Server:集群的统一入口,处理REST请求
  • etcd:分布式键值存储,保存集群状态数据
  • Scheduler:负责Pod的调度分配
  • Controller Manager:运行各种控制器,维护集群期望状态

数据平面(Worker节点)包含:

  • Kubelet:节点代理,管理Pod生命周期
  • Kube-proxy:网络代理,实现服务发现和负载均衡
  • Container Runtime:容器运行时,如Docker、containerd
K8s集群管理界面

主要功能

自动化部署与回滚

K8s支持声明式配置,用户只需描述应用的期望状态,系统自动完成部署。通过YAMLJSON文件定义资源对象,K8s会持续监控并确保实际状态与期望状态一致。当应用更新出现问题时,可以快速回滚到之前的稳定版本。

服务发现与负载均衡

K8s为每个Service分配唯一的DNS名称和IP地址,容器可以通过服务名访问其他服务。内置的负载均衡器自动将流量分发到健康的Pod实例,支持多种负载均衡策略。

自动扩缩容

水平Pod自动扩缩容(HPA)根据CPU使用率、内存占用或自定义指标自动调整Pod副本数量。垂直Pod自动扩缩容(VPA)可以调整Pod的资源请求和限制。集群自动扩缩容(Cluster Autoscaler)根据负载自动增减节点数量。

存储编排

K8s支持多种存储后端,包括本地存储、网络文件系统(NFS)、云存储(如AWS EBS、Azure Disk)等。通过持久卷(PV)和持久卷声明(PVC)机制,实现存储资源的动态供应和管理。

自我修复

K8s持续监控容器健康状态,自动重启失败的容器、替换不响应的容器、杀死未通过健康检查的容器。当节点故障时,自动将Pod重新调度到健康节点上,确保应用高可用。

技术特点

声明式API

K8s采用声明式而非命令式的管理方式,用户描述「想要什么」而非「如何做」。这种设计使配置更易于版本控制、审计和自动化,符合基础设施即代码(IaC)理念。

可扩展性

K8s提供了丰富的扩展机制:

  • 自定义资源定义(CRD):扩展API对象类型
  • Operator模式:封装运维知识,实现应用自动化管理
  • 准入控制器:在资源创建前进行验证和修改
  • 调度器扩展:自定义Pod调度策略
  • 网络插件(CNI):支持多种网络方案
  • 存储插件(CSI):集成各类存储系统

多云与混合云支持

K8s提供统一的抽象层,屏蔽底层基础设施差异,可以运行在公有云私有云、混合云和边缘环境。主流云服务商都提供托管的K8s服务,如Amazon EKSGoogle GKEAzure AKS阿里云ACK等。

应用场景

微服务架构

K8s是部署微服务应用的理想平台,每个微服务可以独立打包为容器,通过Service实现服务间通信,利用Ingress提供统一的外部访问入口。配合服务网格(Service Mesh)如Istio,可以实现更精细的流量管理和安全控制。

持续集成与持续部署

K8s与CI/CD工具深度集成,支持JenkinsGitLab CIArgo CD等。开发团队可以实现代码提交后自动构建、测试、部署到K8s集群,大幅提升交付效率。

大数据与机器学习

K8s可以运行Apache SparkHadoop等大数据处理框架,以及TensorFlowPyTorch等机器学习训练任务。通过资源配额和优先级管理,实现多租户环境下的资源共享和隔离。

边缘计算

轻量级K8s发行版如K3sMicroK8s适用于边缘设备和物联网场景,可以在资源受限的环境中运行容器化应用,实现云边协同。

生态系统

K8s拥有庞大的生态系统,CNCF托管了数百个相关项目:

截至2024年,K8s已成为容器编排领域的绝对主导者,全球数百万开发者使用,超过90%的企业在生产环境中采用。K8s不仅改变了应用部署方式,更推动了云原生技术的普及和DevOps文化的发展。

相关条目