什么是Kubernetes(k8s)
Kubernetes 是一个开源的容器编排系统,用于自动化地部署、扩展和管理容器化应用程序。
Kubernetes 源自谷歌内部的 Borg 系统,旨在实现容器化应用的高效管理。它提供了服务发现、负载均衡、自动扩缩容等功能,并支持跨主机的容器管理。Kubernetes 的设计以“一切以服务为中心”为指导思想,通过高级调度、自我修复、自动推出和回滚、水平扩展和负载均衡等特性,实现了对容器化应用的全面自动化管理。
具体来说,Kubernetes 的主要功能包括:
- 自动调度:Kubernetes 提供高级调度器来启动容器,优化资源利用率。
- 自我修复:它能重新调度、替换和重新启动已失效的容器,确保服务的可用性。
- 自动推出和回滚:支持针对容器化应用程序的所需状态进行推出和回滚操作。
- 服务发现与负载均衡:Kubernetes 提供服务发现机制,无需修改应用程序即可使用陌生的服务发现。
- 横向扩展:可以根据要求自动扩展和缩减应用程序。
- 存储编排:自动挂载所选存储系统,包括本地存储和网络存储系统。
- 配置管理:允许部署和更新 Secrets 和应用程序的配置,而无需重新构建容器镜像。
此外,Kubernetes 架构遵循客户端-服务器模式,包含主节点(Master)和工作节点(Node)。主节点负责整个集群的管理,工作节点则负责运行容器。
总之,通过这些功能,Kubernetes 不仅简化了应用部署,还实现了云环境的无缝迁移、资源高效利用以及促进 CI/CD 流程,成为现代云原生应用的重要基础设施
K8S 架构图及各个组件
具体来说,Kubernetes 架构主要包括主节点(Master)和工作节点(Node)。
- 主节点
- API Server:作为整个集群的中心,负责处理REST请求,更新对象状态,调度其他组件。
- Controller Manager:运行控制器,监控集群的状态,确保其处于预期状态。
- Scheduler:根据资源需求、硬件/软件/策略约束等为新创建的Pod选择合适的Node进行绑定。
- etcd:作为持久存储,保存整个集群的配置数据。
- 工作节点
- Kubelet:在每个Node上运行,负责该节点的容器生命周期管理。
- Kube-Proxy:为Service提供网络代理及负载均衡服务。
- Docker:或其他容器引擎,根据镜像运行容器实例。
- Volume:提供持久化存储,支持多种类型,如本地存储、网络存储等。
- 外部系统
- 云平台:与底层云平台交互,实现资源的动态扩展。
- 企业系统:例如身份验证、监控和日志记录系统,可以通过API Server与集群进行集成。
总之,Kubernetes 架构不仅具备强大的容器编排能力,还提供了丰富的组件和灵活的扩展性,使其成为现代云原生应用的重要基础设施。
Kubernetes(k8s)的工作流程:
- 用户提交请求:用户通过kubectl或其他客户端工具提交创建Pod等资源的请求。
- API Server处理请求:API Server接收请求,进行认证和授权检查,然后将资源对象的数据存储到etcd中。
- 调度器选择节点:调度器监听新的Pod创建请求,根据调度算法和策略选择合适的工作节点(Node),并将绑定结果存储回etcd。
- Kubelet执行任务:各个工作节点上的Kubelet定期从API Server获取需要运行的Pod清单,调用容器运行时接口(如Docker)创建和启动容器实例。
- 控制器确保状态同步:各类控制器(如部署控制器、副本集控制器)通过list-watch机制监控API Server中的资源对象状态,确保实际状态与期望状态一致,如有必要,会自动调整以维持期望状态。
这个流程展示了Kubernetes如何通过其组件的紧密协作来自动化管理容器化应用程序,包括服务的部署、更新、扩缩容等操作。
Kubernetes(k8s)主要的资源对象-
Pod:Pod 是 Kubernetes 的最小部署单元,它包含一个或多个紧密关联的容器。Pod 中的容器共享网络命名空间、存储卷和IP地址等资源。
-
Service:Service 是一种抽象概念,用于定义一组具有相同功能的Pod的逻辑集合,并为它们提供一个统一的访问入口。Service 通过标签选择器来识别后端的Pod,并提供负载均衡和服务发现功能。
-
Deployment:Deployment 是一种高级资源对象,用于描述应用程序的期望状态,并确保实际状态与期望状态一致。Deployment 可以自动管理Pod的创建、更新和删除,以实现应用程序的高可用性和滚动升级。
-
ReplicaSet:ReplicaSet 是一种控制器资源对象,用于确保指定数量的副本Pod始终处于运行状态。它通常由Deployment或其他控制器使用,以确保应用程序的高可用性。
-
ConfigMap:ConfigMap 是一种配置信息的资源对象,用于将非机密的配置数据从代码中分离出来,以便更好地管理和更新。ConfigMap 可以在Pod中作为环境变量或文件挂载到容器中。
-
Secret:Secret 是一种用于存储敏感信息(如密码、密钥等)的资源对象。它可以在Pod中作为环境变量或文件挂载到容器中,以提供安全的访问方式。
-
PersistentVolume:PersistentVolume(PV)是一种持久化存储资源对象,用于表示集群中的物理存储设备。它提供了一种独立于Pod生命周期的存储机制,可以被多个Pod共享和使用。
-
PersistentVolumeClaim:PersistentVolumeClaim(PVC)是一种请求存储资源的声明对象,用于申请特定大小和访问模式的持久化存储。当PVC被创建时,Kubernetes会自动为其分配合适的PV。
-
Namespace:Namespace 是一种逻辑隔离的资源对象,用于将集群中的资源划分为不同的虚拟集群。每个Namespace都有自己的资源配额和访问控制策略,有助于组织和管理大型集群中的资源。
-
Ingress:Ingress 是一种API对象,用于管理外部访问集群内部服务的规则。它允许您将外部流量路由到集群内部的服务,并提供负载均衡、SSL终止和其他HTTP/HTTPS相关的功能。
这些资源对象只是Kubernetes中的一部分,还有其他许多类型的资源对象可用于满足各种需求。
Kubernetes(k8s)Label资源
在Kubernetes(k8s)中,Label(标签)是一种附加到资源对象上的键值对,用于分类和组织这些对象。
Label是k8s中的核心概念之一,它允许用户根据自己的需求为资源对象(如Pod、Node、Service等)定义标签,以便于管理和操作。一个Label由键(key)和值(value)组成,例如:environment: production
。Label的定义和用法非常灵活,以下是其主要特点:
- 任意数量的标签:一个资源对象可以定义任意数量的Label,同时一个Label也可以被添加到多个资源对象上。
- 资源组织管理:Label常用于标记资源对象的属性、用途、环境等信息,以便更好地组织和管理这些资源。
- 动态添加删除:Label可以在资源对象创建时确定,也可以在对象创建后动态添加和删除,以实现灵活的资源管理。
Label的选择器(Label Selector)是与Label配套使用的重要工具,它允许用户根据Label的键值对来过滤和选择资源对象。例如,可以使用Label Selector选择所有带有app: nginx
标签的Pod。
总之,Label和Label Selector共同构成了Kubernetes中强大的资源管理和选择机制,使得集群的资源管理更加精细和高效。
请求访问过程
- service资源通过标签选择器关联具有相同标签的Pod
- 每个service都有一个固定的clusterip,可供在k8s集群内部被访问
- service可以把通过cluster ip发来的请求负载均衡 4层代理转发到它所关联的后端pod上
- ingress可以作为k8s对外暴露的网关接口接收k8s集群外部发来的请求流量
- ingress支持7层代理转发,它可以通过根据不同的域名或者URL访问路径把请求流量转发到不同的service上
以上是k8s的一些基本原理和工作流程,如果有不完整等我有空再补充!!!
标签:容器,Kubernetes,Label,原理,Pod,k8s,资源 From: https://www.cnblogs.com/yuzhifeng/p/18359375