云计算主题 什么是Kubernetes(K8s)?

什么是Kubernetes(K8s)?

更新时间: 2024-02-02 16:41:38

Kubernetes(通常简称为K8s)是一款用于自动部署、扩缩和管理容器化应用程序的开源容器编排平台Kubernetes已发展为现代企业实现敏捷开发、快速迭代、资源优化及灵活扩展的关键技术组件之一。它拥有庞大的开源社区和丰富的生态系统。围绕Kubernetes已经形成了众多工具、插件和解决方案,其使企业能够实现更高的资源利用率、更优的业务连续性和稳定性、更快的创新速度

为什么需要Kubernetes

随着微服务架构和容器化技术的普及,Kubernetes已发展为容器管理和编排系统的事实标准。对于希望提高资源利用效率、增强应用灵活性、加速产品迭代速度以及实现跨平台一致性的现代企业而言,Kubernetes已成为不可或缺的技术基石。企业选择使用Kubernetes的原因有很多,比如:

  • 标准和可移植性:由于Kubernetes是一个开源的标准,应用只要适应了Kubernetes的接口和规范,就可以在任何符合该标准的基础设施上运行,极大地提高了应用的可移植性。Kubernetes不仅可在私有数据中心部署,也能无缝对接各大公有云平台,帮助企业实现跨云环境的应用部署和迁移,实现真正的云中立(Cloud Neutrality)。

  • 提升开发与运维效率:通过声明式配置和CI/CD流程集成,Kubernetes简化了软件交付过程,使DevOps团队能够更快更可靠地发布新功能和服务。

  • 弹性与可扩展性:Kubernetes可以根据预定义的策略自动扩缩应用实例数量,以应对业务水位的周期性和突发性变化,这对于处理突发流量或节约成本至关重要,并在出现故障时实现快速恢复和自我修复,从而保证服务的高可用。

  • 安全性与合规性:Kubernetes提供了一系列的安全特性,比如网络策略、角色访问控制(RBAC)、密钥和证书管理等,帮助企业确保容器环境的安全并符合合规要求。

  • 社区支持与生态系统完善:Kubernetes拥有庞大的开源社区支持,以及丰富的周边工具和生态体系,为企业提供了大量成熟的解决方案和持续创新的可能性。

Kubernetes的工作原理和核心组件

Kubernetes的设计哲学是“自动化一切可能的自动化”,这意味着它会尽可能地自动化容器的部署、扩展和管理,使开发人员和运维工程师可以更加关注应用程序的开发和优化,而非容器的管理和运维。Kubernetes由多个组件共同组成,其核心组件包括调度器、API服务器和控制器。

下图展示了一个典型的Kubernetes集群(Cluster)的架构图

image

图中包括:

  • Control Plane:

    Control Plane是Kubernetes集群的大脑,它是一组核心组件,负责管理和维护集群的状态,是kubernetes的控制平面,比如可以调度资源及检测和响应集群事件等。

    • cloud-controller-manager:云控制器管理器,是一个Kubernetes控制平面组件,允许将Kubernetes与云基础产品能力的对接,提供负载均衡(SLB)、VPC路由表等常见云产品的创建和管理功能,实现业务应用的服务暴露等需求。

    • etcd:是一个分布式的、一致性的键值存储系统,用作Kubernetes所有集群数据的后台数据库,etcd使用Raft算法来实现强一致性,确保在分布式环境中的数据可靠性与正确性。

    • kube-api-server:在集群中起到关键的协调和管理作用的组件。kube-apiserver提供了一个RESTful API服务,使用户、管理员以及集群内部的其他组件能够通过统一的协议与集群控制平面进行通信。

    • kube-scheduler调度器负责监听新创建的、未指定运行节点的Pods,scheduler会依据一系列调度原则,将所发现的每一个未调度的Pod调度到一个合适的节点上来运行。

    • kube-controller-manager控制器管理器是一个守护进程,内嵌随Kubernetes一起发布的核心控制回路。目前,Kubernetes自带的控制器例子包括副本控制器、节点控制器、命名空间控制器和服务账号控制器等。

  • Node:

    Node节点是集群中的一台工作机器,可以是虚拟机实例或者物理服务器,个节点包含运行Pod所需的服务,这些节点由控制面负责管理。

    • kubelet:是在每个节点上运行的代理组件,主要功能是定时从某个地方获取节点上pod/container的期望状态(如运行什么容器、运行的副本数量、网络或者存储如何配置等),并调用对应的容器平台接口达到这个状态。

    • kube-proxy:工作节点上的网络代理组件,负责实现集群内部的Service发现和负载均衡功能。

    • pod:容器组是Kubernetes部署应用或服务的最小的基本单位。每个容器组封装了一个或多个应用容器,以及其运行所依赖的存储资源、独立网络IP地址和一系列控制其运行逻辑的策略选项。

    • CRI:容器运行时接口。容器运行时是负责运行容器的软件。Kubernetes支持多种容器运行时,包括Docker、containerd等。

您可以前往基本概念,了解Kubernetes的基本概念和简要描述。

如何在阿里云上高效运行Kubernetes

阿里云提供了基于Kubernetes的托管服务容器服务 Kubernetes 版(简称ACK其经过了Kubernetes一致性认证,确保与原生Kubernetes功能兼容,同时整合了阿里云的虚拟化、存储、网络和安全能力,帮助企业在云上高效安全地部署、管理和运维容器化应用。

使用阿里云容器服务 Kubernetes 版 ACK可以让您轻松高效地在云端运行Kubernetes容器化应用。ACK是全球首批通过Kubernetes一致性认证的服务平台,支持企业级Kubernetes容器化应用的生命周期管理,相较于自建的Kubernetes集群,ACK集群在应用、网络、存储、安全等多个方面均提供能力兼容与增强,无需您自行探索和开发,大大降低集群管理和运维成本。

典型应用场景

DevOps持续交付

阿里云ACK可以搭配容器镜像服务ACR、Jenkins等平台帮您自动完成从代码提交到应用部署的DevOps完整流程,确保只有通过自动测试的代码才能交付和部署,高效替代业内部署复杂、迭代缓慢的传统方式,从而实现以下能力

  • DevOps自动化

    从代码变更到代码构建、镜像构建和应用部署的全流程自动化。

  • 环境一致性

    容器技术让您交付的不仅是代码,还有基于不可变架构的运行环境。

  • 持续反馈

    每次集成或交付,都会将结果实时反馈。

基于云原生技术的机器学习

阿里云ACK可以帮助数据工程师在异构计算资源集群上轻松开发、部署机器学习应用,跟踪试验和训练、发布模型,自动集成多种数据,部署在分布式存储系统,加速训练数据读写。您无需关心繁琐部署运维,只需专注核心业务,快速实现从0到1,优势包括:

  • 生态支持

    内置对TensorFlow、Caffe、MXNet、Pytorch等主流深度学习计算框架的支持和优化。

  • 快速弹性

    一键部署机器学习开发、训练、推理服务,秒级启动和弹性伸缩。

  • 简单可控

    轻松创建、管理大规模GPU计算集群,并且可以监控GPU利用率等核心指标。

  • 深度整合

    无缝接入阿里云存储、日志监控和安全基础架构能力。

微服务架构

企业生产环境中,通过合理微服务拆分,将每个微服务应用存储在阿里云镜像仓库。您只需迭代每个微服务应用,由阿里云提供调度、编排、部署和灰度发布能力。企业生产环境中,通过合理的微服务拆分,可以享受微服务带来的高内聚、低耦合、高容错性的优势。在微服务上生产的过程,依托于阿里云产品提供的微服务治理能力。在不修改任何代码和配置的情况下,实现:

  • 全面消除变更过程中的风险

    依托于配置管理、无损上下线和全链路灰度能力,全面消除变更过程中的风险。

  • 全面消除偶发问题引发的风险

    依托于限流、降级、熔断、隔离等能力,可以在出现偶发的流量洪峰和依赖服务出现异常时,有效地限流保护、削峰填谷、隔离故障、降级保护。

  • 低成本实现微服务敏捷开发

    依托于开发环境隔离能力,可以在不增加物理机器成本的前提下,低成本扩展出多套逻辑隔离的开发环境,有效地解决环境抢占和冲突问题,实现敏捷开发。

弹性伸缩架构

ACK可以根据业务流量自动对业务扩容、缩容,不需要人工干预,避免流量激增扩容不及时导致系统崩溃,以及平时大量闲置资源造成浪费,能够实现:

  • 快速响应

    业务流量达到扩容指标,秒级触发容器扩容操作。

  • 全自动

    整个扩容、缩容过程完全自动化,无需人工干预。

  • 低成本

    流量降低自动缩容,避免资源浪费。

  • 灵活算力供给

    支持灵活的实例规格选择,便于利用阿里云强大算力资源供给。

混合云架构

在ACK控制台上同时管理云上云下的资源,不需在多种云管理控制台中反复切换。基于容器基础设施无关的特性,使用同一套镜像和编排同时在云上云下部署应用,可以实现:

  • 在云上伸缩应用

    业务高峰期,在云端快速扩容,把一些业务流量引到云端。

  • 云上容灾

    业务系统同时部署到云上和云下,云下提供服务,云上容灾。

  • 云下开发测试

    云下开发测试后的应用无缝发布到云上。

相关产品和服务

容器服务ACK产品形态主要包含ACK托管集群和ACK专有集群。其中,ACK托管集群的控制平面由ACK管理,为您提供稳定、高可用、高性能、安全的Kubernetes服务。托管组件包括kube-apiserver、kube-controller-manager、kube-scheduler和etcd。每一个托管集群的控制平面包含至少两个kube-apiserver实例和三个etcd实例,并且部署在不同的可用区以提供99.95%的可用性SLA。控制平面的版本管理、服务SLA和安全漏洞修复均由ACK保障。

ACK产品形态的整体架构如下图所示。

image
  • 容器服务Kubernetes版ACK:全球首批通过Kubernetes一致性认证的服务平台,提供高性能的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。ACK主要的集群类型包括ACK托管集群、ACK Serverless集群、ACK Edge集群等,能够满足企业在不同场景下的容器应用管理需求。

  • 云原生AI套件概述:阿里云容器服务ACK提供的云原生AI技术和产品方案。使用云原生AI套件,您可以充分利用云原生架构和技术,在Kubernetes容器平台上快速定制构建AI生产系统,并为AI/ML应用和系统提供全栈优化。

  • 容器镜像服务ACR:ACR是面向容器镜像、Helm Chart等符合OCI标准的云原生制品安全托管及高效分发平台。ACR支持全球同步加速、大规模/大镜像分发加速、多代码源构建加速等全链路提效,与容器服务ACK无缝集成,帮助企业降低交付复杂度,打造云原生应用一站式解决方案。

  • 分布式云容器平台ACK One:阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级云原生平台。ACK One可以连接并管理您任何地域、任何基础设施上的Kubernetes集群,并提供一致的管理和社区兼容的API,支持对计算、网络、存储、安全、监控、日志、作业、应用、流量等进行统一运维管控。

  • 服务网格ASM:ASM是一个统一管理微服务应用流量、兼容Istio的托管式平台。通过流量控制、网格观测以及服务间通信安全等功能,ASM可以全方位地简化您的服务治理,并为运行在异构计算基础设施上的服务提供统一的管理能力,适用于Kubernetes集群、Serverless Kubernetes集群、ECS虚拟机以及自建集群。

  • 弹性容器实例ECI:ECI是Serverless和容器化的弹性计算服务。使用ECI,您无需管理底层ECS服务器,只需要提供打包好的镜像,即可运行容器,实现与ACK无缝对接并仅为容器实际运行消耗的资源付费。

最佳实践

  • 自建Kubernetes迁移镜像、应用至ACK最佳实践:自建Kubernetes相关的容器镜像服务、集群管理、稳定性保障也让企业IT人员感觉到压力,所以上云成了一些企业的选择,将底层的IaaS基础设施和Kubernetes的基础PaaS能力交给阿里云来管理,企业本身抽出更多精力聚焦业务的创新。

  • 授权最佳实践:容器服务ACK的授权体系包含对基础资源层的RAM授权和对ACK集群层的RBAC授权,不同用户角色在这两个层面都具有不同的权限要求。本实践介绍针对集群与应用运维人员、应用开发人员、以及权限管理人员三类对象的授权最佳实践。

  • 搭建高性能网络ACK集群:容器的网络协议栈实现方式,导致容器之间的网络性能,相比服务器之间直接通信方式,会有一定程度的下降。阿里云托管版容器服务ACK集群,支持自研的Terway网络插件,该插件可以有效减少因容器而引入的网络性能下降,可以基本达到服务器之间直接通信的网络性能。本实践是一个性能测试方面的实践,指导用户进行POC测试等。

  • ACK Serverless弹性低成本CI/CD:基于阿里云弹性容器实例ECI的轻量化,阿里云容器服务Kubernetes(ACK Serverless)以及文件存储NAS可以帮助用户实现服务高可用、弹性伸缩、资源扩展性好、低成本的自动化CI/CD系统。

  • 使用Prometheus配置报警规则的最佳实践:ACK集群默认提供阿里云Prometheus监控和开源Prometheus监控。本实践介绍在使用Prometheus监控ACK集群时,如何配置报警规则,以及报警规则说明。

  • 基于ack-autoscaling-placeholder实现容器秒级伸缩:ack-autoscaling-placeholder为集群的自动扩展提供了缓冲区,它适用于工作负载需要快速启动而无需考虑节点资源不足的使用场景。本实践介绍如何使用ack-autoscaling-placeholder实现容器秒级伸缩。

  • ACK集群实现GPU成本优化:利用阿里云容器服务ACK部署GPU集群之后,出于成本优化的考虑,对于集群中GPU利用率不高的应用,例如推理的应用,建议利用阿里云cGPU技术将一定数量的应用运行至一块GPU卡上,以提高利用率。对于GPU利用率比较高的应用,不做改动。这样既可以实现灵活管理,又能降低整体成本。

  • 通过注册集群统一管理任意环境下的Kubernetes集群:注册集群帮助您将云下Kubernetes集群接入云端,快速搭建混合云集群,同时支持本地数据中心Kubernetes集群或其他云厂商Kubernetes集群接入阿里云容器服务管理平台,进行统一管理。本实践介绍注册集群如何统一管理任意环境下的Kubernetes集群。