Kubernetes的设计架构

Master管理Node,Node管理容器。

Master

Kubernetes集群中的Master节点主要负责管理整个集群,包括集群的健康检查、扩容缩容等。

集群控制节点,所有控制命令都发给Master,Master负责具体的执行过程

  • 关键进程:

    • API Server:提供HTTP Rest接口的主要组件,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口
    • Scheduler:Pod资源的调度器
    • etcd:保存所有资源对象的数据
    • Controller Manager:所有资源对象的自动化控制中心

Node

除了Master,Kubernetes集群中的其他机器被称为Node

Node主要由3个部分组成,分别是kubelet、kube-proxy和容器运行时(container runtime)​。

每个Node都会被Master分配一些工作负载​,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上。

  • 关键进程:

    • kubelet:负责Pod对应的容器的创建、启停等任务
    • kube-proxy:实现Kubernetes Service的通信与负载均衡机制
    • Docker/containerd:负责本节点的容器运行

      一旦Node被纳入集群管理范围,kubelet进程就会定时向Master汇报自身的情报

组件简的基本交互流程

kubectl命令将转换为对API Server的调用。
API Server验证请求并将其保存到etcd中。
etcd通知API Server。
API Server调用调度器。
调度器决定在哪个节点运行Pod,并将其返回给API Server。
API Server将对应节点保存到etcd中。
etcd通知API Server。
API Server在相应的节点中调用kubelet。
kubelet与容器运行时API发生交互,与容器守护进程通信以创建容器。
kubelet将Pod状态更新到API Server中。
API Server把最新的状态保存到etcd中。

Kubernetes的核心对象

Pod

Pod是由N个容器组成的,每个 Pod 都包含一个特殊的Pause容器

以Pause的状态代表整个容器组的状态

Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume

Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,这通常采用虚拟二层网络技术来实现

  • 普通pod

    • 普通的Pod一旦被创建,就被放入etcd中存储,随后会被Kubernetes Master调度到某个具体的Node上并进行绑定(Binding)​,随后该Pod被对应的Node上的kubelet进程实例化成一组相关的容器并启动
    • 当Pod里的某个容器停止时,Kubernetes会自动检测到这个问题并且重新启动这个Pod(重启Pod里的所有容器)​,
    • 如果Pod所在的Node宕机,就会将这个Node上的所有Pod重新调度到其他节点上。
  • 静态Pod
    • 存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动、运行,并且不会被Kubernetes Master管理

在Kubernetes里,一个计算资源进行配额限定时需要设定以下两个参数。

  • Requests:该资源的最小申请量,系统必须满足要求。
  • Limits:该资源最大允许使用的量,不能被突破,当容器试图使用超过这个量的资源时,可能会被Kubernetes“杀掉”并重启

控制器

一般来说,用户不会直接创建Pod,而是创建控制器,让控制器来管理Pod。

控制器中定义了Pod的部署方式,如有多少个副本、需要在哪种Node上运行等。

Replication Controller 和 ReplicaSet

RC可定义Pod模板,并可以设置相应控制参数以实现水平伸缩,以调节正在运行的相同的Pod数。

ReplicaSet逐渐取代RC,但ReplicaSet无法实现滚动更新,无法像RC那样在后端轮流切换到最新版本。

Deployment

Deployment控制器以ReplicaSet控制器为基础

StatefulSet

提供了排序和唯一性保证的特殊Pod控制器。

StatefulSet控制器通常与面向数据的应用程序(比如数据库)相关联

分布式存储系统适合使用StatefulSet控制器

Pod转移到其他节点时,StatefulSet控制器会保证Pod的唯一性[稳定的网络标识、持久化存储绑定和有序的生命周期管理。]

当需要重新调度时,可以通过Pod转移持久性数据卷。即使删除了Pod,这些卷也依然存在,以防止数据意外丢失。

Deployment控制器下的每一个Pod都毫无区别地提供服务
StatefulSet控制器下的Pod。虽然各个Pod的定义是一样的,但是因为其数据的不同,所以提供的服务是有差异的。

DaemonSet

DaemonSet控制器是另一种特殊的Pod控制器,它会在集群的各个节点上运行单一的Pod副本。

日志收集和转发、监控以及运行以增加节点本身功能为目的的服务,常设置为DaemonSet控制器

DaemonSet控制器可以越过基于Pod的限制,确保基础服务的运行

Job和CronJob

Job:用于执行一次性任务

CronJob:用于周期性执行任务

服务与存储

Service组件和Ingress

Pod只是一个运行的应用示例,随时可能在一个节点上停止,并在另一个节点使用新的IP地址启动新的Pod,因此Pod根本无法以固定的IP地址和端口号提供服务。

通过Service组件可以发布服务,可以跟踪并路由到所有指定类型的后端容器。内部使用者只需要知道Service组件提供的稳定端点即可进行访问

Service是内部负载均衡器中的一种组件,会将相同功能的Pod在逻辑上组合到一起,让它们表现得如同一个单一的实体

存储卷和持久卷

允许Pod中的所有容器共享数据



持久性数据可预防节点级的故障

资源划分

命名空间(namespace)的主要作用是对Kubernetes集群资源进行划分。实现多租户的资源隔离。

标签和注解:

标签:键值对

注解:将任意键值信息附加到某一对象中,注解更灵活,可以包含少量结构化数据。

k8s一、基本概念的更多相关文章

  1. 为什么k8s引入pod概念?

    为什么k8s引入pod概念? 1.可管理性 有些容器天生需要紧密关联,以pod为最小单位进行调度 扩展 共享资源 管理生命周期 例如: 一个容器写日志,一个容器读取日志进行相关内容的展示 2.通信和资 ...

  2. k8s弹性伸缩概念以及测试用例

    k8s弹性伸缩概念以及测试用例 本文原文出处:https://juejin.im/post/5c82367ff265da2d85330d4f 弹性伸缩式k8s中的一大亮点功能,当负载大的时候,你可以对 ...

  3. 5分钟让你理解K8S必备架构概念,以及网络模型(上)

    写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...

  4. K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)

    K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace)       Kubernetes 是目前发展最 ...

  5. Kubernetes(K8s)基础概念 —— 凿壁偷光

    Kubernetes(K8s)基础概念  --  凿壁偷光 K8s是什么:全称 kubernetes  (k12345678s) 作用:用于自动部署,扩展和管理"容器化应用程序"的 ...

  6. 【k8s】基础概念 + 工作原理

    工作原理: 原理图 工作原理描述: 1>用户通过kubectl或者API server的REST API接口,提交需要运行的docker容器(创建pod请求): 2>api server将 ...

  7. 从零开始入门 K8s | Kubernetes 网络概念及策略控制

    作者 | 阿里巴巴高级技术专家  叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什 ...

  8. 7. 丈母娘嫌我不懂K8s的Service概念,让我去面壁

    文章目录 怎么跟你说 Service的出现,就是 解决ip不固定的问题 ,怎么解决呢 ? 听小刘慢慢道来 当Pod宕机后重新生成时,其IP等状态信息可能会变动,Service会根据Pod的Label对 ...

  9. 5分钟让你理解K8S必备架构概念,以及网络模型(中)

    写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...

  10. 5分钟让你理解K8S必备架构概念,以及网络模型(下)

    写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...

随机推荐

  1. 抽象类的注意事项、abstract关键字的冲突--java进阶day02

    1.注意事项 1.抽象类不允许创建对象 2.抽象类存在构造方法 3.抽象类中可以存在普通成员方法 4.抽象类的子类存在两种处理方式 第一种不多解释,主要讲第二种,子类继承了抽象类,相当于子类里面有了抽 ...

  2. Docker for Windows Firewall detected

    安装 Docker for Windows 设置挂载磁盘的时候,出现下面这个错误: 尝试 # 把 vEthernet(DockerNAT) 的网络类型改为 private,默认是 public,还是没 ...

  3. DevOps的工作岗位的要求

    ## 为什么需要DevOps 不是每个人都能理解可靠的版本管理和牢固的构建系统的重要性. 也不是任何人能使得软件的发布达到可靠性,可重复性和可审计的高标准.Devops的职责就是将软件的构建和发布的流 ...

  4. get time等时间指令的用法

    如图,活动时间是选择的方式选取,虽然可以通过定位年月日时来实现选择,这务必带来很多脚本内容.这里用另外的方法实现 1.使用"get time"指令获得当前系统时间 ${1} = 2 ...

  5. Nacos源码—1.Nacos服务注册发现分析一

    大纲 1.客户端如何发起服务注册 + 发送服务心跳 2.服务端如何处理客户端的服务注册请求 3.注册服务-如何实现高并发支撑上百万服务注册 4.内存注册表-如何处理注册表的高并发读写冲突 1.客户端如 ...

  6. Web前端入门第 44 问:CSS 循环动画 animation 效果演示

    相关属性 @keyframes 定义动画的关键帧序列 animation-name 指定 @keyframes 动画的名称 animation-duration 动画单次循环的持续时间(必需属性,否则 ...

  7. Vue3的14种组件通信方式

    对于日常使用vue3开发项目的前端小伙伴来说,组件通信方式可以说是必会的基本功,今天带大家一起盘下vue3的通信方式. 我们这里按照组件的关系来划分.总共包含14中组件通信方式. 一.父子通信 pro ...

  8. 实际工作中 Git Commit 代码提交规范是什么样的?

    前言 Git 是我们日常工作中使用最为广泛的分布式版本代码控制系统,因此在我们的实际工作中,git commit 代码提交规范能够让每一次代码提交都变得有据可循,方便后续的代码审查.问题追踪和版本管理 ...

  9. 区块链共识算法--PoW

    PoW算法为一种概率算法,其共识结果是临时的,随着时间推移或某种强化,共识结果被推翻的概率越来越小,最终称为事实上结果 1 研究 工作量证明(Proof Of Work,简称POW),简单理解就是一份 ...

  10. PC端自动化测试实战教程-6-pywinauto 打印和保存控件菜单树结构之ElementNotFoundError(详细教程)

    1.简介 其实前边的文章宏哥已经在控制台打印过控件菜单树结构,只是没有将其保存到文件中.只需要一个方法即可.在pywinauto中可以使用 print_control_identifiers() 方法 ...