Kubernetes容器编排简介

发布于:2024-05-04 ⋅ 阅读:(24) ⋅ 点赞:(0)

1.1 Kubernetes的诞生到应用

  • Kubernetes的诞生源于对高效管理和部署大规模容器化应用的需求,它由Google基于其内部使用的Borg系统的核心理念而设计,并在2014年开源,迅速吸引了全球开发者和企业的关注。凭借其开放性和灵活性,Kubernetes快速聚集了一个活跃的社区,并得到了包括Red Hat、IBM、Microsoft等在内的众多企业的支持。2015年,Kubernetes加入云原生计算基金会(CNCF),进一步加速了其发展。

  • 随着技术的成熟,Kubernetes开始被广泛应用于企业级生产环境,以其自动化部署、无缝扩展和自我修复的特性,极大地提升了运维效率和系统稳定性。云服务提供商的支持也使得Kubernetes的部署和管理变得更加便捷。如今,Kubernetes不仅是容器编排领域的一个标杆,更成为了云原生技术栈的核心,持续推动着云计算和微服务架构的发展。

1.2 Kubernetes主要特点

  • 自动化部署和扩展:Kubernetes可以自动部署容器并根据需求进行扩展。

  • 自我修复能力:能够自动替换失败的容器,确保服务的持续运行。

  • 服务发现和负载均衡:提供内置的服务发现和负载均衡功能。

  • 滚动更新:支持无停机的滚动更新,以及必要时的回滚操作。

  • 跨主机网络:为容器提供跨主机的网络连接。

  • 安全性:提供包括访问控制和安全策略在内的多种安全特性。

  • 生态系统:拥有一个庞大且活跃的生态系统,支持广泛的工具和服务。

  • 可扩展性:设计上支持大规模集群,能够管理成千上万的节点。

image-20240502200336742

1.3 Kubernetes的应用

1.3.1 为什么Kubernetes被广泛应用

Kubernetes(通常称为K8s)之所以受到广泛欢迎,是因为它提供了一系列的优势,特别是在支持微服务架构、系统迁移、扩容能力以及管理工具方面。

  • 多容器支持:K8s不仅支持Docker,还能运行其他容器技术如Rocket。

  • 微服务架构:K8s非常适合微服务架构,简化了服务的部署和管理。

  • 灵活迁移:系统可以轻松地整体迁移,无论是跨云还是到本地环境。

  • 横向扩容:K8s具备强大的横向扩容能力,可以根据需求动态调整资源。

  • 管理工具:提供了一系列工具,覆盖开发、部署、测试和运维监控的全流程。

1.3.2 具体事件举例

  • Twitter宣布全面采用Kubernetes来管理其容器化基础设施,这一决策反映了Kubernetes在容器编排领域的领先地位和广泛认可。

image-20240502200941285

  • 阿里云在2019年年底停止对Docker Swarm的支持

image-20240502201033497

1.4 kubernetes概念

  • Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控

  • Node:Kubernetes中的工作负载节点,负责运行容器。Master节点负责调度并将容器分配到这些Node上。

  • Pod:Kubernetes的最小控制单元,容器化应用程序运行在Pod中。一个Pod可以包含一个或多个紧密相关的容器。

  • Controller:用于管理Pod的生命周期,包括创建、扩展、缩减和删除Pod。常见的控制器有Deployment、ReplicaSet等。

  • Service:为一组执行相同功能的Pod提供统一的访问接口,无论Pod如何变化,Service都保持稳定。

  • Scaling(伸缩):自动调整容器数量。

  • Label:用于在资源上添加标识符,允许通过Selector选择和操作具有相同标签的资源。

  • Namespace:用于隔离集群资源,Pod、Service等可以被分配到不同的Namespace中,实现环境隔离。

  • Volume:用于持久化存储数据。

  • Ingress:管理外部网络访问集群服务的规则。

  • Deployment:负责Pods的部署和更新。

1.5 Kubernetes组件

1.5.1 Master节点

Master节点负责整个Kubernetes集群的管理和控制。它的核心组件包括:

  • API Server:作为系统的大脑,提供Kubernetes API的接口,处理所有的RESTful请求和集群内的数据变化。

  • Scheduler:负责监视新创建的Pods,决定将它们放置在哪个Node上,以达到最优的资源利用和负载均衡。

  • Controller Manager:运行各种控制器进程,例如负责Deployment的控制器会确保指定数量的Pod副本始终运行。

  • etcd:作为集群的数据库,存储了整个Kubernetes集群的状态信息,包括Pods、Service、ConfigMaps等所有资源的信息。

1.5.2 Node节点

Node节点是Kubernetes集群中的工作节点,负责运行应用程序容器。每个Node节点上运行的组件包括:

  • Kubelet:直接与Master节点通信,负责启动Pods中的容器、监控容器运行状态,并上报状态信息回Master。

  • Container Runtime:负责实际运行容器,如Docker、containerd等,Kubernetes通过容器运行时接口(CRI)与这些运行时进行交互。

  • Kube-proxy:负责Pods的网络代理,实现服务发现和负载均衡,确保Pods可以互相通信,以及外部请求能够分发到正确的Pod。

  • Docker或类似的工具:作为容器运行时,负责拉取容器镜像,并运行容器。

image-20240502222719319

1.5.3 核心组件

组件名称 功能描述
etcd 轻量级且可靠的分布式键值存储系统,用于保存Kubernetes集群的所有数据。
apiserver Kubernetes API的前端,处理资源的增删改查操作,提供认证、授权、访问控制等安全机制。
controller manager 执行集群事件的后台处理,包括故障检测、自动扩展、滚动更新等任务。
scheduler 决定将新的Pods调度到哪个Node上运行,实现资源的最优分配。
kubelet 在每个Node上运行,负责维护容器的生命周期,包括启动容器、监控容器运行状态、管理Volume和网络。
Container runtime 负责镜像管理以及Pod和容器的运行,是容器运行时接口(CRI)的实现。
kube-proxy 实现Kubernetes服务的负载均衡,提供服务发现功能。

1.5.4 附加组件

组件名称 功能描述
CoreDNS 集群内的DNS服务,允许Pods通过DNS名称进行通信。
Ingress Controller 管理外部访问集群服务的规则,通常用于HTTP路由到集群内的多个服务。
Monitoring and Logging 集群通常会集成监控和日志系统,如Prometheus和Elasticsearch,以便于监控和分析集群状态。
Network Plugin 实现Pods之间的网络通信和Pod与外部网络的交互。

1.5.5 其他额外的功能组件

组件/工具名称 功能描述
Fluentd/Elasticsearch 日志收集和存储,通常与Kibana结合使用进行日志可视化和分析。
Prometheus 开源监控系统,用于收集和存储指标,监控Kubernetes集群和应用。
Helm Kubernetes的包管理器,用于定义、安装和升级Kubernetes应用。
Rook 在Kubernetes上部署和管理存储系统的开源项目。
Istio 服务网格,提供智能路由、流量管理、策略执行和数据收集。
Cert-Manager 自动化证书管理工具,为Kubernetes服务提供和续订TLS证书。
Argo CD GitOps风格的持续交付工具,用于Kubernetes。
Strimzi 在Kubernetes上运行Apache Kafka的支持。
Voyager Ingress控制器和HAProxy负载均衡器的云原生解决方案。
Tiller Helm的后端服务,管理Helm charts的状态。
Cilium 提供网络和安全的扩展,支持细粒度的安全性和网络策略。
Knative 构建现代、源代码驱动的、Kubernetes-native应用的库和工具。
MetalLB 为Kubernetes集群提供额外的负载均衡层的负载均衡器。
Multus 允许Pods使用多个网络接口的网络插件。
Kube-state-metrics 提供Kubernetes集群中各种资源的指标收集。
Kubecost 成本监控工具,帮助用户理解Kubernetes集群的资源使用和成本。
OpenEBS 为Kubernetes提供动态存储的开源存储解决方案。
SPIRE 用于Kubernetes的零信任网络和安全的项目。
Kong 可以与Kubernetes集成的API网关和服务网格。
GitOps 使用Git管理基础设施和应用交付的方法论,通过Git仓库维护Kubernetes集群状态。

1.5.6 Kubernetes系统各个组件调用关系示例

在Kubernetes中部署nginx服务的过程涉及多个组件的协同工作:

步骤 组件/角色 功能描述
用户请求 用户 通过kubectl命令行工具发起部署nginx服务的请求。
API Server Kubernetes API Server 接收请求并验证,将请求信息写入etcd
Scheduler Kubernetes Scheduler 监听到Pod创建请求后,选择合适的Node节点部署Pod。
Controller Manager Kubernetes Controller Manager 根据Scheduler的决策更新状态并指导Pod在选定的Node上创建。
Kubelet Kubernetes Kubelet 在Node节点上接收Master指令,启动容器运行时拉取镜像并启动Pod。
Pod启动 Pod 容器运行时创建nginx容器,Pod开始在Node上运行。
Service和kube-proxy Service, kube-proxy 创建Service对象以访问nginx服务,kube-proxy实现服务发现和负载均衡。
访问服务 外部请求 通过Service访问nginx服务,Service确保请求分配到所有运行的nginx Pod上。

1.6 Kubernetes架构

1.6.1 基本架构

  • Master节点:负责整个集群的管理和调度工作。它由以下几个主要组件组成:

    • API Server:集群的前端,提供Kubernetes API接口。

    • Scheduler:负责决定将新的Pods分配到哪个Node上。

    • Controller Manager:运行各种控制器,如Deployment Controller、Service Controller等。

    • etcd:轻量级数据库,存储集群的所有数据。

  • Node节点:执行实际工作,运行Pods。每个Node上运行着:

    • Kubelet:负责启动Pods中的容器,以及与Master节点通信。

    • Kube-proxy:负责Pods的网络代理,实现服务发现和负载均衡。

1.6.2 应用部署架构分类

  • 无中心节点架构

    • GlusterFS:一个分布式文件系统,提供可扩展的存储解决方案。

    • Ceph:一个统一的分布式存储系统,支持块设备、对象存储和文件系统。

  • 有中心节点架构

    • HDFS (Hadoop Distributed File System):一个高度可靠的、可扩展的分布式文件系统,设计用于存储大规模数据集。

    • Kubernetes:虽然Kubernetes本身不直接提供存储服务,但它可以与GlusterFS、Ceph等分布式存储系统配合使用,提供强大的存储解决方案。

1.6.3 Kubernetes Cluster组成

  • Master和Node:Kubernetes Cluster由一个或多个Master节点和多个Node节点组成。

  • Kubernetes服务在Node节点上运行的服务,包括但不限于:

    • 容器运行时:如Docker或containerd,负责运行容器。

    • 网络插件:提供Pods之间的网络连接和外部访问。

    • 存储插件:与外部存储系统集成,提供持久化存储。

1.6.4 Kubernetes设计架构

  • Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。

image-20240502222140179


1.6.5 Kubernetes体系结构

image-20240502223518737

步骤 组件/角色 功能描述
用户提交请求 用户 通过kubectl提交Pod配置文件(YAML或JSON格式)。
API Server Kubernetes API Server 接收并验证Pod创建请求,将配置存储在etcd中。
Scheduler Kubernetes Scheduler 监听Pod创建请求,选择最合适的Node运行Pod。
Kubelet Kubernetes Kubelet 在选定Node上启动Pod,与容器运行时交互拉取镜像并启动容器。
Replication Controller (RC) Kubernetes Replication Controller 监视Pod状态和数量,替换故障Pod以维持指定数量。
Service Kubernetes Service 提供一组相同功能Pods的统一访问接口,保持IP和端口不变。
Kube-proxy Kubernetes Kube-proxy 实现Service的功能,进行服务发现和负载均衡。

1.6.6 Kubernetes控制节点Master

在Kubernetes中,Master节点的作用就像是一个指挥官,它负责整个集群的管理和决策。

  • 接收命令:当用户通过kubectl命令行工具发起操作,比如部署一个新的Pod,这个命令会发送到Master节点的API Server。

  • 存储状态:API Server是所有请求的入口,它处理这些请求,并将相关的信息持久化到etcd。etcd是一个关键的存储系统,它保存了集群的所有状态信息,包括所有的Pods、Service和配置数据。

  • 调度决策:一旦Pod的创建请求被API Server接受并存储,Scheduler就会介入。Scheduler的角色是策略制定者,它根据集群当前的状态和Pod的调度要求,决定将这个Pod放在哪个Node上运行。

  • 执行操作:Scheduler做出决策后,会通知API Server,API Server更新Pod的状态,指派给选定的Node。然后,Controller Manager会监控这个状态的变化。

  • Node执行:在Node节点上,Kubelet这个组件会定期向API Server报告自己的状态,一旦它接收到新的Pod创建指令,就会与容器运行时(比如Docker)协作,拉取所需的容器镜像,并在Node上启动Pod。

  • 监控和维护:Controller Manager会持续监控集群的状态,确保一切运行如预期。如果有Pod失败,Deployment Controller会替换新的Pod来保持应用的稳定性和可用性。

  • 服务发现和负载均衡:当Pod运行起来后,为了使服务对内部或外部可见,用户可能会创建Service对象。Kube-proxy负责实现服务发现和负载均衡,确保流量可以正确地分配到后端的Pods。

image-20240502223938495

1.6.7 Etcd概述

etcd是Kubernetes集群中不可或缺的组件,它作为一个高可用的键值存储系统,承担着存储集群状态信息的重要职责。

  • 高可用性:etcd通过复制数据到多个节点来保证系统的高可用性,即使部分节点失效,集群仍能正常工作。

  • 键值存储:它提供了一个简单的键值存储接口,用于存储和检索数据。

  • 服务发现:在分布式系统中,etcd可用于服务发现,允许节点相互发现并通信。

  • 轻量级:与ZooKeeper相比,etcd更加轻量级,易于集成和使用。

  • 安全性:支持SSL/TLS,提供了数据传输过程中的加密和认证。

  • 性能:能够支持高并发写操作,满足高性能需求。

  • 一致性:使用Raft一致性算法,保证了分布式系统中数据的强一致性。

1.6.7.1 Etcd的特点
  • 简单性:提供了基于HTTP+JSON的API,使得使用curl命令行工具就能轻松操作。

  • 安全性:支持SSL客户端认证,增强了数据传输的安全性。

  • 快速性:高性能的读写能力,能够应对大量的并发操作。

  • 可信性:基于Raft算法,确保了数据的可靠性和一致性。

1.6.7.2 应用场景
  • Kubernetes Node:存储集群的状态信息,如Pods、Service、ConfigMaps等。

  • Worker Node:在分布式工作节点中,etcd可用于存储和同步工作状态。

  • 服务发现:作为服务注册与发现中心,允许服务实例动态地加入和离开。

  • 消息发布与订阅:可以作为发布/订阅模型的消息中心。

  • 负载均衡:存储负载均衡器的配置信息,以便进行流量分发。

  • 分布式通知与协调:在分布式系统中,用于节点间的通知和协调工作。

  • 分布式锁:提供锁服务,以支持跨多个实例的同步操作。

  • 分布式队列:可以作为分布式队列系统,协调任务的执行。

  • 集群监控:存储集群监控数据,便于跟踪和分析集群状态。

  • Leader选举:在集群中,用于Leader节点的选举过程。

1.6.7 Kubernetes工作节点Node

在Kubernetes集群中,除了Master节点,其他所有机器都被称为Node节点(在早期的版本中也称为Minion节点)。Node节点是集群中执行实际工作负载的地方,它们负责运行容器化的应用程序。

  • 接收任务:Node节点通过Kubelet与Master节点通信,接收运行Pods的任务。这些任务由Master节点的调度器根据资源需求和策略决定。

  • 容器运行时:Kubelet使用容器运行时(如Docker或containerd)来拉取容器镜像,并在Node上启动容器。这是Node节点上实际运行应用程序的地方。

  • 监控和报告:Kubelet持续监控Pods的状态,包括它们的健康状态和资源使用情况,并将这些信息反馈给Master节点。

  • 网络配置:Node上的网络插件负责为Pods配置网络,确保Pods可以相互通信,以及与外部世界通信。

  • Pod管理:Kubelet管理Pods的生命周期,处理Pods的创建、运行和销毁。

  • 日志管理:Node节点还负责收集容器的日志,这些日志对于调试和监控应用程序至关重要。

  • 服务发现和负载均衡:kube-proxy在Node上运行,负责服务发现和实现Pods之间的负载均衡,以及对外提供稳定的服务访问点。

  • 资源监控:Node节点上的资源监控工具(如cAdvisor)收集节点和容器的性能指标,这些信息可以用于监控和调试。

  • 自我修复:如果Pod因为某些原因失败,Kubelet会尝试重启Pod,实现自我修复。

image-20240502224540581

Node节点的主要角色和组件的描述:

组件/概念 功能描述
工作负载执行 Node节点接收并执行由Master节点分配的Docker容器,运行应用程序。
故障转移 Node节点故障时,Master节点自动将工作负载转移到其他健康节点,保证服务连续性。
Kubelet 负责启动和管理Pods中的容器,监控容器状态,与Master节点通信,汇报节点健康状况。
资源调度 Master节点根据Kubelet提供的信息进行资源使用情况的监控和调度。
通信中断 Node节点若在指定时间内未向Master汇报,将被判定为“失联”,Master将转移其工作负载。
Kube-proxy 负责实现Kubernetes Service的通信和负载均衡,监控Pods变化,实现服务发现。
Docker Engine 提供容器运行时环境,创建和管理容器,保证应用程序在隔离且一致的环境中运行。

1.7 Kubernetes分层架构

  • Kubernetes的架构设计采用了分层的方法,每一层都为上一层提供服务,同时抽象掉底层的复杂性。

层次 组件/概念 功能描述
核心层 API Server, Scheduler, Controller Manager, etcd Kubernetes最核心的功能,提供API构建高层应用,对内提供插件式应用执行环境。
应用层 Deployment, Service, Ingress 定义应用程序的部署状态和访问方式,提供服务发现和负载均衡功能。
服务发现与负载均衡层 Service, Ingress 管理服务发现和负载均衡,实现外部和内部通信。
集群管理层 Node, Pod, kubelet, kube-proxy Node运行Pods,kubelet管理Pods生命周期,kube-proxy负责网络代理。
集群基础设施层 Master节点, API Server, Scheduler, Controller Manager Master节点控制集群,API Server提供API接口,Scheduler进行Pod调度,Controller Manager运行控制器。
节点基础设施层 容器运行时 (如Docker或containerd), OS 容器运行时管理容器,操作系统提供运行环境。
存储层 Persistent Volumes, Persistent Volume Claims 提供持久化存储解决方案,供Pods使用。
安全层 认证, 授权, 网络策略 确保集群安全性,包括访问控制和网络安全。
底层基础设施 硬件资源 提供服务器、网络和存储等物理或虚拟硬件资源。
管理层 系统度量, 自动化, 策略管理 系统度量(基础设施、容器、网络度量), 自动化(自动扩展、动态Provision等), 策略管理(RBAC、Quota、PSP、NetworkPolicy等)
接口层 kubectl命令行工具, 客户端SDK, 集群联邦 提供与Kubernetes集群交互的方法。
生态系统 Kubernetes外部, Kubernetes内部 外部:日志、监控、配置管理、CI/CD、Workflow、FaaS、OTS应用、ChatOps等。内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群配置和管理等。
  • Kubernetes设计理念和功能其实就是一个类似Linux的分层架构,如下图所示

image-20240502225223322


网站公告

今日签到

点亮在社区的每一天
去签到