首页 > 其他分享 >Kubernetes(k8s)基础及原理

Kubernetes(k8s)基础及原理

时间:2024-08-15 10:26:36浏览次数:9  
标签:容器 Kubernetes Label 原理 Pod k8s 资源

什么是Kubernetes(k8s)

Kubernetes 是一个开源的容器编排系统,用于自动化地部署、扩展和管理容器化应用程序

Kubernetes 源自谷歌内部的 Borg 系统,旨在实现容器化应用的高效管理。它提供了服务发现、负载均衡、自动扩缩容等功能,并支持跨主机的容器管理。Kubernetes 的设计以“一切以服务为中心”为指导思想,通过高级调度、自我修复、自动推出和回滚、水平扩展和负载均衡等特性,实现了对容器化应用的全面自动化管理。

具体来说,Kubernetes 的主要功能包括:

  1. 自动调度:Kubernetes 提供高级调度器来启动容器,优化资源利用率。
  2. 自我修复:它能重新调度、替换和重新启动已失效的容器,确保服务的可用性。
  3. 自动推出和回滚:支持针对容器化应用程序的所需状态进行推出和回滚操作。
  4. 服务发现与负载均衡:Kubernetes 提供服务发现机制,无需修改应用程序即可使用陌生的服务发现。
  5. 横向扩展:可以根据要求自动扩展和缩减应用程序。
  6. 存储编排:自动挂载所选存储系统,包括本地存储和网络存储系统。
  7. 配置管理:允许部署和更新 Secrets 和应用程序的配置,而无需重新构建容器镜像。

此外,Kubernetes 架构遵循客户端-服务器模式,包含主节点(Master)和工作节点(Node)。主节点负责整个集群的管理,工作节点则负责运行容器。

总之,通过这些功能,Kubernetes 不仅简化了应用部署,还实现了云环境的无缝迁移、资源高效利用以及促进 CI/CD 流程,成为现代云原生应用的重要基础设施

 

K8S 架构图及各个组件

 

具体来说,Kubernetes 架构主要包括主节点(Master)和工作节点(Node)。

  1. 主节点
    • API Server:作为整个集群的中心,负责处理REST请求,更新对象状态,调度其他组件。
    • Controller Manager:运行控制器,监控集群的状态,确保其处于预期状态。
    • Scheduler:根据资源需求、硬件/软件/策略约束等为新创建的Pod选择合适的Node进行绑定。
    • etcd:作为持久存储,保存整个集群的配置数据。
  2. 工作节点
    • Kubelet:在每个Node上运行,负责该节点的容器生命周期管理。
    • Kube-Proxy:为Service提供网络代理及负载均衡服务。
    • Docker:或其他容器引擎,根据镜像运行容器实例。
    • Volume:提供持久化存储,支持多种类型,如本地存储、网络存储等。
  3. 外部系统
    • 云平台:与底层云平台交互,实现资源的动态扩展。
    • 企业系统:例如身份验证、监控和日志记录系统,可以通过API Server与集群进行集成。

总之,Kubernetes 架构不仅具备强大的容器编排能力,还提供了丰富的组件和灵活的扩展性,使其成为现代云原生应用的重要基础设施。

Kubernetes(k8s)的工作流程:

  1. 用户提交请求:用户通过kubectl或其他客户端工具提交创建Pod等资源的请求。
  2. API Server处理请求:API Server接收请求,进行认证和授权检查,然后将资源对象的数据存储到etcd中。
  3. 调度器选择节点:调度器监听新的Pod创建请求,根据调度算法和策略选择合适的工作节点(Node),并将绑定结果存储回etcd。
  4. Kubelet执行任务:各个工作节点上的Kubelet定期从API Server获取需要运行的Pod清单,调用容器运行时接口(如Docker)创建和启动容器实例。
  5. 控制器确保状态同步:各类控制器(如部署控制器、副本集控制器)通过list-watch机制监控API Server中的资源对象状态,确保实际状态与期望状态一致,如有必要,会自动调整以维持期望状态。

这个流程展示了Kubernetes如何通过其组件的紧密协作来自动化管理容器化应用程序,包括服务的部署、更新、扩缩容等操作。

Kubernetes(k8s)主要的资源对象 
  1. Pod:Pod 是 Kubernetes 的最小部署单元,它包含一个或多个紧密关联的容器。Pod 中的容器共享网络命名空间、存储卷和IP地址等资源。

  2. Service:Service 是一种抽象概念,用于定义一组具有相同功能的Pod的逻辑集合,并为它们提供一个统一的访问入口。Service 通过标签选择器来识别后端的Pod,并提供负载均衡和服务发现功能。

  3. Deployment:Deployment 是一种高级资源对象,用于描述应用程序的期望状态,并确保实际状态与期望状态一致。Deployment 可以自动管理Pod的创建、更新和删除,以实现应用程序的高可用性和滚动升级。

  4. ReplicaSet:ReplicaSet 是一种控制器资源对象,用于确保指定数量的副本Pod始终处于运行状态。它通常由Deployment或其他控制器使用,以确保应用程序的高可用性。

  5. ConfigMap:ConfigMap 是一种配置信息的资源对象,用于将非机密的配置数据从代码中分离出来,以便更好地管理和更新。ConfigMap 可以在Pod中作为环境变量或文件挂载到容器中。

  6. Secret:Secret 是一种用于存储敏感信息(如密码、密钥等)的资源对象。它可以在Pod中作为环境变量或文件挂载到容器中,以提供安全的访问方式。

  7. PersistentVolume:PersistentVolume(PV)是一种持久化存储资源对象,用于表示集群中的物理存储设备。它提供了一种独立于Pod生命周期的存储机制,可以被多个Pod共享和使用。

  8. PersistentVolumeClaim:PersistentVolumeClaim(PVC)是一种请求存储资源的声明对象,用于申请特定大小和访问模式的持久化存储。当PVC被创建时,Kubernetes会自动为其分配合适的PV。

  9. Namespace:Namespace 是一种逻辑隔离的资源对象,用于将集群中的资源划分为不同的虚拟集群。每个Namespace都有自己的资源配额和访问控制策略,有助于组织和管理大型集群中的资源。

  10. Ingress:Ingress 是一种API对象,用于管理外部访问集群内部服务的规则。它允许您将外部流量路由到集群内部的服务,并提供负载均衡、SSL终止和其他HTTP/HTTPS相关的功能。

这些资源对象只是Kubernetes中的一部分,还有其他许多类型的资源对象可用于满足各种需求。

Kubernetes(k8s)Label资源

 

在Kubernetes(k8s)中,Label(标签)是一种附加到资源对象上的键值对,用于分类和组织这些对象

 

Label是k8s中的核心概念之一,它允许用户根据自己的需求为资源对象(如Pod、Node、Service等)定义标签,以便于管理和操作。一个Label由键(key)和值(value)组成,例如:environment: production。Label的定义和用法非常灵活,以下是其主要特点:

 

  1. 任意数量的标签:一个资源对象可以定义任意数量的Label,同时一个Label也可以被添加到多个资源对象上。
  2. 资源组织管理:Label常用于标记资源对象的属性、用途、环境等信息,以便更好地组织和管理这些资源。
  3. 动态添加删除:Label可以在资源对象创建时确定,也可以在对象创建后动态添加和删除,以实现灵活的资源管理。

 

Label的选择器(Label Selector)是与Label配套使用的重要工具,它允许用户根据Label的键值对来过滤和选择资源对象。例如,可以使用Label Selector选择所有带有app: nginx标签的Pod。

 

总之,Label和Label Selector共同构成了Kubernetes中强大的资源管理和选择机制,使得集群的资源管理更加精细和高效。

 

请求访问过程
  1. service资源通过标签选择器关联具有相同标签的Pod
  2. 每个service都有一个固定的clusterip,可供在k8s集群内部被访问
  3. service可以把通过cluster ip发来的请求负载均衡 4层代理转发到它所关联的后端pod上
  4. ingress可以作为k8s对外暴露的网关接口接收k8s集群外部发来的请求流量
  5. ingress支持7层代理转发,它可以通过根据不同的域名或者URL访问路径把请求流量转发到不同的service上

 以上是k8s的一些基本原理和工作流程,如果有不完整等我有空再补充!!!

标签:容器,Kubernetes,Label,原理,Pod,k8s,资源
From: https://www.cnblogs.com/yuzhifeng/p/18359375

相关文章

  • 在K8S中,Kube-Proxy为什么使用ipvs,而不使用iptables?
    Kubernetes中的kube-proxy是负责实现服务(Services)负载均衡的核心组件之一。它支持两种主要的代理模式:iptables模式和ipvs模式。这两种模式都可以用来实现服务的网络流量转发,但它们之间存在一些关键的区别。1.为什么使用ipvs而不是iptables?性能优势:连接跟踪:ipvs直......
  • 在K8S中,Kubernets资源限制是如何配置的,是否根据Qos?
    在Kubernetes中,资源限制是通过Pod的配置来设置的,它们定义了Pod可以请求和使用的最大资源量。资源限制分为两类:CPU和内存。这些限制不仅帮助系统管理员控制资源使用,还对Pod的服务质量(QoS)有重要影响。1.资源限制的配置CPU限制:CPU限制是通过spec.containers[].resources.lim......
  • 在K8S中,Pod多副本配置了硬亲和性,会调度到同⼀个节点上吗?
    在K8S(Kubernetes)中,Pod多副本配置硬亲和性(podAffinity的requiredDuringSchedulingIgnoredDuringExecution)时,并不意味着这些Pod一定会被调度到同一个节点上。硬亲和性的配置实际上是指定了Pod调度时必须满足的严格条件,但这些条件通常与Pod之间的相对位置(如是否在同一个节点、区域或......
  • 在K8S中,Pod处于OOM状态如何排查?
    在Kubernetes(K8S)中,Pod处于OOM(OutofMemory)状态意味着Pod因为内存不足而被系统强制终止。这通常发生在Pod尝试使用超过其分配的内存资源时。以下是排查PodOOM状态的一些步骤:检查Pod状态:使用kubectlgetpods命令来查看Pod的状态。如果Pod处于OOM状态,你会看到状态为OOMKil......
  • k8s集群中pod的容器资源限制和三种探针
    目录1.pod容器的资源限制1.1资源单位2.k8s的健康检查2.1探针的三种规则3.pod容器的启动、退出动作1.pod容器的资源限制当定义Pod时可以选择性地为每个容器设定所需要的资源数量。最常见的可设定资源是CPU和内存大小,以及其他类型的资源。当为Pod中的容器指定......
  • “Datawhale x魔搭 AI夏令营”-AIGC方向-Day2从零入门AI生图原理&实践
    学习内容提要从通过代码实现AI文生图逐渐进阶,教程偏重图像工作流、微调、图像优化等思路,最后会简单介绍AIGC应用方向、数字人技术(选学)Task02:精读代码,实战进阶具体Datawhale教程学习内容见链接:https://linklearner.com/activity/14/10/32AIGC相关知识框图解读baseline代码文......
  • 深入理解 ThreadLocal:机制、原理与实践
    引言ThreadLocal是Java中一个非常重要的工具,广泛用于解决多线程环境下变量共享的问题。然而,ThreadLocal的使用也可能带来一些隐患,尤其是在结合线程池的场景中,可能导致数据混乱。本文将深入探讨ThreadLocal的工作机制及其可能带来的问题,并给出相应的解决方案。一、Thr......
  • kubernetes应用编排的基本工作逻辑
    Pod和应用Kubernetes本质上是“以应用为中心”的现代应用基础设施,Pod是其运行应用及应用调度的最小逻辑单元本质上是共享Network、IPC和UTS名称空间以及存储资源的容器集可将其想象成一台物理机或虚拟机,各容器就是该主机上的进程各容器共享网络协议栈、网络设备、路由、IP......
  • [天线原理及设计>基本原理] 3. 辐射方向图或天线方向图
    《Antenna_Theory_Analysis_and_Design_3rd_Constantine_A._Balanis.pdf》3.辐射方向图或天线方向图天线辐射方向图或天线方向图(radiationpatternorantennapattern)被定义为“天线辐射特性随空间坐标变化的数学函数或图形表示。在大多数情况下,辐射模式是在远场区域确定......
  • kubernetes 核心组件详解
    Kubernetes是什么?**Kubernetes集群(KubernetesCluster)是一个由多个节点组成的系统,用于自动化部署、管理、扩展和操作容器化应用程序。Kubernetes是一种开源的容器编排平台,它通过集群的形式来管理容器,使得应用的运行、管理和扩展变得更加高效和自动化。基础概念与组件docker......