• 【云原生】容器编排工具Kubernetes


    目录

    一、 K8S介绍

    官网地址:

    1.1docker编排与k8s编排相比

    1.2特性

    1.3功能

    二、K8S重要组件

    2.1核心组件

    (1)Kube-apiserver

    (2)Kube-controller-manager

    (3)Kube-scheduler

    (4)Node

    ①kubelet

    ②kube-proxy

    ③docker

    (5)etcd

    2.2Kubernetes工作原理

    三、Pod

    3.1 Pod控制器

    (1)Deployment

    (2)ReplicaSet

    (3)StatefulSet

    (4)DaemonSe

    (5)Job 和 CronJob

    四、五大标签选择器

    4.1Label(标签)

    4.2Service

    (1)三个流量调度模式

    4.3Ingress

    4.4Name

    (1)资源

    4.5Namespace(命名空间选择器)


    一、 K8S介绍

    Kubernetes 发布于 2014年6月, 源于希腊语,意为 “舵手” 或 “领航员”,由于 kubernetes从k 到s中间有8个字母,所以简称k8s。

    Google 在十年前就已经将容器化作为基础架构,borg 就是 Google 内部的大型集群管理系统,borg 系统并不开源。在docker 大规模容器化后,Google 为了迅速占领 docker 容器化管理, Google 基于 borg 的设计理念使用 Go 语言开发新的组件系统 Kubernetes,并且开源给了CNCF。

    官网地址:

    k8s官网地址:Kubernetes Documentation | Kubernetes

    中文版:https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/

    1.1docker编排与k8s编排相比

    • 单机使用,无法有效集群
    • 随着容器数量的上升,管理成本攀升
    • 没有有效的容灾、自愈机制
    • 没有预设编排模版,无法实现快速、大规模容器调度
    • 没有统一的配置管理中心工具
    • 没有容器生命周期的管理工具
    • 没有图形化运维管理工具

    1.2特性

     弹性伸缩  以最小的成本运行服务

     自我修复 
     自动发布(默认回滚发布模式)
     集中化配置管理和密钥管理(密钥是加密的)
     存储编排,支持外挂存储并对外挂存储资源进行编排
     任务批量处理运行
     提供一次性任务,定时任务;满足批量数据处理和分析的场景。

    1.3功能

    以集群的方式运行、管理跨机器的容器
    解决docker跨机器容器之间的通讯问题
    K8S的自我修复机制使得容器集群总在运行在用户期望的状态

    二、K8S重要组件

    2.1核心组件

    (1)Kube-apiserver

    (2)Kube-controller-manager

    负责管理各种控制器,监控集群状态并自动执行相应操作。

    (3)Kube-scheduler

    根据资源需求和调度策略,将 Pod 调度到合适的节点上运行。

    预选策略(predicate)

    优选策略(priorities)

    (4)Node

    ①kubelet

    运行在每个节点上,负责管理容器和 Pod 生命周期,并与 API Server 通信。

    ②kube-proxy

    负责为 Pod 提供网络代理和负载均衡功能。

    ③docker

    容器引擎,运行容器,负责本机容器的创建删除

    (5)etcd

    分布式键值存储系统,用于存储集群的配置数据和状态。

    这些核心组件共同协作,实现了 k8s 的主要功能,如容器编排、自动扩展、服务发现和负载均衡等。此外,还有其他辅助性的组件如 DNS 服务(CoreDNS)、日志收集(Fluentd)、监控(Prometheus)等,它们可以根据具体需求来选择是否部署。

    2.2Kubernetes工作原理

    用户通过kubectl工具发送请求通过认证给kube apiserver来创建pod请求,apiserver会将相关信息写入etcd当中,随后apiserver会找kube controller-manager创建相应pod,controller-manager会通过apiserver会在etcd读取数据寻找相应pod信息,之后apiserver找到scheduler去调度pod,关于pod调到哪里还是通过apiserver读取etcd里的数据获得相关node节点信息,并找到最适合运行pod的节点,最后scheduler通过算法调度出预选策略优选策略,算出应该把pod调度到哪个node节点上运行,之后scheduler通过apiserver找到对应node节点上的kubelet组件,通过这个组件创建并维护pod,相关容器则是通过docker创建。然后这些pod通过kube proxy关联起来成为集群,kube proxy使用service资源使用统一IP地址暴露出去,外部用户就可以通过这个ip地址轮巡到pod里面所运行的业务了。kubelet会监事这个node上面啊运行了多少资源,以及pod相关的状态和信息,发送给apiserver,apiserver会将信息写入etcd并保存起来。pod的维护由controller-manager来做,当pod的数量不满足预设的数量时,它就会再去创建到相应的预设数量来保证pod的总量。

    三、Pod

    一个Pid可以放多个容器,一个Pid中的容器可以共享资源,不同Pid中的容器不能相互访问(默认情况)。

    3.1 Pod控制器

    (1)Deployment

    建立在 ReplicaSet 之上,提供了更高级别的应用程序部署功能。可以方便地进行滚动更新、版本回滚等操作。

    (2)ReplicaSet

    用于管理 Pod 的副本数量,确保指定数量的 Pod 始终处于运行状态。支持滚动更新应用程序。

    (3)StatefulSet

    用于管理有状态的应用程序,每个 Pod 都有唯一标识和稳定的网络标识。适用于需要持久化存储和有序部署的应用程序。

    (4)DaemonSe

    确保每个节点上都运行一个 Pod 的控制器。适用于在每个节点上运行系统级别的守护进程。

    (5)Job 和 CronJob

    用于批处理任务或定时任务的控制器。执行完任务后会自动停止 Pod。

    这些控制器根据用户定义的规则和策略,自动管理 Pod 的生命周期,确保集群中的应用程序正常运行和扩展。通过这些控制器,可以实现灵活的应用程序管理和自动化操作。

    四、五大标签选择器

    4.1Label(标签)

    Label Selector 基于标签对资源进行选择和过滤。标签是键值对的形式,可以附加在各种 Kubernetes 资源上,如 Pod、Service、Deployment 等。通过 Label Selector,可以根据标签的匹配规则来选择特定的资源。

    4.2Service

    Service 是 Kubernetes 资源,用于暴露应用程序内部的 Pod。它定义了一组逻辑上相关的 Pod,并为它们创建了一个稳定的网络终结点(Endpoint)。通过 Service,可以为应用程序提供一个统一的入口,使得客户端能够访问后端 Pod 的服务。Service 可以是 ClusterIP、NodePort、LoadBalancer 或 ExternalName 类型,用于不同的网络访问方式。

    (1)三个流量调度模式

    userspace(废弃)

    ipvs(推荐,性能最好)

    通过ip地址直接转发

    IP tables(濒临废弃)(默认)

    从上到下转发

    4.3Ingress

    Ingress 是一种 Kubernetes 资源,用于将外部流量引导到集群内部的服务。它充当了流量入口的角色,通过定义规则和路由来决定如何将请求转发到后端的 Service 中的 Pod。Ingress 可以实现负载均衡、HTTPS/TLS 加密、URL 路由等功能,提供了更高级别的流量控制和管理。

    4.4Name

    Name 是 Kubernetes 资源的一个属性,用于标识该资源的名称。每个资源都必须具有唯一的名称。例如,Pod、Deployment、Service 等所有资源都需要指定一个名称以便在集群中进行引用和操作。

    (1)资源

        api     版本
        kind       类别
        metadata     元数据信息
        spec清单
        status    状态

    4.5Namespace(命名空间选择器)

    Namespace Selector 用于选择特定的命名空间(Namespace)。命名空间是 Kubernetes 中用于组织和隔离资源的一种机制,通过命名空间选择器可以选择所需的命名空间中的资源。

  • 相关阅读:
    面试官问:如何优化高并发相关的业务,你能回答的上来吗?
    HCL实验,ping通两个不同服务器的PC
    关于操作系统中对进程管理的认识
    计时器 Timer(Kotlin Flow)
    DzzOffice集成功能最丰富的开源PHP+MySQL办公系统套件
    【MySQL性能优化系列】百万数据limit分页优化
    python 解析xml
    挑战一周完成Vue3项目Day2:路由配置+登录模块+layout组件+路由鉴权
    图形学-变换(平移矩阵,旋转矩阵,缩放矩阵,线性变换,放射变换,齐次坐标)
    老卫带你学---leetcode刷题(98. 验证二叉搜索树)
  • 原文地址:https://blog.csdn.net/m0_71888825/article/details/132595655