• Kubernetes学习笔记-一


    Kubernetes学习笔记-一

    一、Kubernetes快速认知

    1.需求背景

    • 容器化部署存在的问题
      • 10个物理机发布100个容器,怎么快速发布管理
      • 用户请求过来怎么分配到100个容器里?
      • 海量请求突然过来,如何根据情况快速扩容?
      • 应用线上发布出现问题,怎么进行版本回滚。
      • 某个容器出现故障,怎么快速启动新的容器去替代?
    • 上面的容器管理问题成为容器编排,为了解决这些问题,产生了一些容器编排的软件
      • Docker Swarm:Docker自己的容器编排工具
      • Mesos:Apache的资源管控的工具,结合Marathon使用
      • Kubernetes:Google开源的的容器编排工具, 基于内部Borg系统的开源版本!!
        • K8S本质就是一组服务器集群,可以在对应服务器集群的每个节点上运行程序,来对节点中的容器进行管理
        • 类似Master-work方式,每个服务器上安装特定的k8s组件,就可以形成集群,然后部署对应的应用即可
        • 官方文档https://kubernetes.io/zh-cn/docs/home/

    2.K8S常见功能

    • 服务发现和负载均衡
      • kubernetes可以使用DNS名称或者自己的IP地址来暴露容器
      • 如果进入容器的流量很大,kubernetes能够自动实现请求的负载均衡配置网络流量,从而使部署稳定
    • 存储编排
      • kubernetes允许自动挂载的存储系统,例如本地存储,云提供商储存等
    • 自动部署和回滚
      • 可以使用K8S自动化部署创建容器,删除现有容器并将它所有资源用于新容器
      • 当版本发布错误时,可以立刻退回到之前的版本
    • 自我修复
      • 如果某个容器宕机了,K8S只可以快速启动新的容器替代宕机容器
    • 密钥与配置管理
      • K8S允许存储和管理敏感信息,例如密码、OAuth令牌和ssh密钥

    二、Kubernetes常见组件和整体架构

    1.Kubernetes常见组件

    • K8S整体架构,也是Client-Server模型
      • 控制节点master-node,负责集群的管理。
      • 工作节点work-node,负责为集群提供运行环境。

    在这里插入图片描述

    2.kubernetes常见概念

    • Master
      • 指的是激情的控制节点(相当于整个集群的指挥中心),在每一个K8S集群里都需要有一个Master来负责整个集群的控制和管理。
    • Node
      • 除了Master,K8S集群中的其他机器被称为Node节点,也是集群中真正工作的负载节点。
      • 每个Node节点都会被Master节点分配一些工作负载,Node节点上的Docker负责容器的运行。
    • Pod
      • Pod是一组容器,在K8S中,最小的单位是Pod,每一个Pod中可以包括多个容器,但通常情况下我们在每个Pod中仅使用一个容器
      • 可以吧Pod理解一个豌豆荚,Pod中每一个容器是一颗颗豌豆
      • 创建Pod有两种方式。
        • 自主创建:直接创建出来的Pod,但是这种Pod删除后就没有了,也不会自动创建。
        • 控制器(Pod Controller)创建:通过控制器创建的Pod,这类的Pod删除了之后还会自动重建。

    在这里插入图片描述

    • Pod Controller

      • 控制器是管理Pod的中间层,只要告诉Pod控制器,想要创建多少个什么样的Pod,他会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的状态目标。
      • 如果Pod在运行中出现故障,他会给基于指定策略重新编排Pod。
      • 通过它可以实现对Pod的管理,比如启动/停止/扩展Pod的数量等。
      • 类型
        • ReplicaSet、Deployment、Horizontal Pod Autoscaler、DaemonSet等
    • Service

      • 在K8S中,每一个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失。
      • Service就是用来解决这个问题的,对外的服务提供统一的入口,用于为一组提供服务的Pod抽象一个稳定的网络访问地址。
      • 一个service可以看作一组提供相同服务的Pod的对外访问接口,作用于哪些Pod是通过标签(Label)选择器来定义的。
    • label

      • K8S提供来一种机制来为Pod进行分类,那就是Label(标签),同一类Pod会拥有相同的标签。
      • Label是具体形式是Key- Value的标记对,可以在创建资源的时候设置,也可以在后期添加和修改。
      • 给某个资源定义一个Label相当于给他打了一个标签,可以通过label Selector(标签选择器)查询和筛选某些Label的资源对象,K8S通过这种方式实现了类似Sql的对象查询机制。
      • 应用场景
        • 未使用前,分散难管理,如果需要部署不同的版本应用到不同的环境中较难操作
        • 使用后未Pod打上不同的标签,使用Label组织的Pod,可以轻松管理。
          在这里插入图片描述
          在这里插入图片描述
    • Label Selector标签选择器

      • 对应的资源打上标签后,可以使用标签选择器过滤指定的标签
      • 标签选择器目前有两个
        • 基于等值关系(等于、不等于)
        • 基于集合关系(属于、不属于、存在)
    • NameSpace

      • 可以在一个物理集群上运行多个虚拟集群,这种虚拟集群被称作命名空间,用来隔离Pod的运行环境。
      • 同一个命名空间中的资源名必须唯一,不同的命名空间之间则没有这个要求。
      • NameSpace上不能嵌套的,每一个K8S的资源都只能在一个NameSpace内。
      • 命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额)
      • 不必使用多个名字空间来分隔轻微不同的资源,例如同一软件的不同版本: 应该使用标签 来区分同一名字空间中的不同资源
      • Kubernetes 会创建四个初始NameSpace名称空间:
        • default 没有指明使用其它名字空间的对象所使用的默认名字空间
        • kube-system Kubernetes 系统创建对象所使用的名字空间
        • kube-public
        • kube-node-lease
    • 应用分类

      • 有状态应用
        • 不能简单的实现负载均衡的服务,有数据产生的服务,Redis、MySQL、RabbitMQ等
        • 相关服务必须通过一些复杂的配置才能做到负载均衡。
        • 有状态的应用,建议直接在物理机部署,方便维护管理。
      • 无状态应用
        • 没有对应业务数据的应用,可以简单的实现负载均衡,复制一个节点即可快速扩容,如SpringCloud中的业务服务
        • 无状态的应用适合部署在 Kubernetes(K8s)中或者容器中。

    3.kubernetes整体架构

    • K8S整体架构,也是Client-Service

      • 控制节点Master-Node,负载集群的管理
        • apiServer提供操作【k8s集群资源】的唯一入口,RESTful方式请求,并提供认证、授权、访问控制、API注册和发现等.
        • scheduler负责资源的调度,按照预定的调度策略,【计算】将Pod调度到相应的Node节点进行应用部署。
        • controller-manager控制器管理中心,负责维护集群的状态,比如故障检测、滚动更新等,根据调度器的安排通知对应的节点创建pod。
        • etcd存储中心,是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
      • 工作节点Worker-Node,负责为集群提供运行环境
        • Node是Pod真正运行的主机,可以是物理机也可以是虚拟机, Node本质上不是K8S来创建的, K8S只是管理Node上的资源,为了管理Pod,每个Node节点上至少需要运行container runtime(Docker)、kubelet和kube-proxy服务
        • kubelet相当于主节点派到工作节点的一个代表,用于管理本机容器(相当于master节点的化身),负责维护容器的生命周期也负责Volume(CVI)和网络(CNI)的管理
        • kube-proxy负责为Service提供cluster内部的服务发现/网络代理/负载均衡等操作,为部署的应用程序提供访问入口,和apiserver是不一样的,后者是操作k8s集群内部的
    • 架构图

    在这里插入图片描述

  • 相关阅读:
    Linux下安装lrzsz/JDK/Tomcat/MySQL/Git/Maven/Redis
    常用的35个Linux命令合集
    备战 2023 春招,P7 大咖手打 26 大后端面试专题神技,1500 题解析助力
    WPF 实现点击按钮跳转页面功能
    单链表的反转
    GPT-4o版本间的对比分析和使用心得
    【华为机试真题详解】统计射击比赛成绩
    JavaScript 44 JavaScript typeof
    工具及方法 - 二进制编辑软件
    针对千万级人口城市的核酸检测系统的设计分享
  • 原文地址:https://blog.csdn.net/ruan_luqingnian/article/details/126444277