命令式与声明式 - 理解 k8s 声明式api工作原理 -Kubernetes 控制器的工作原理解读

2023-05-16

一  命令式和声明式 

命令式(可以理解为 面向过程)编程:命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。
·声明式(可以理解为 面向对象)编程:告诉“机器”你想要的是什么(what),让机器想出如何去做(how)。

命令式

命令式框架的特点是关注过程。以jQuery为例,若我们使用jQuery实现将div中的文字设置为hello word,并添加点击事件,代码为:

$("#div1") //获取标签元素节点
.text("hello world") //设置文字内容
.click(()=>{alert("我被点击了!")}) //添加点击事件

以上代码可以看出,代码的逻辑过程和我们的想法一一对应。

声明式

声明式框架得特点是关注结果。使用vue实现上面得代码为:

<div @click="()=>alert('ok')">hello world</div>

至于如何实现这个“结果”,我们并不关心,它由vue内容搞定,也就是说vue内部是命令式的,它帮我们封装了“过程”,而暴漏给使用者得是声明式的用法。

性能

先给出结论:声明式的代码性能不优于命令式代码性能。

若我们将上面例子中div的文字内容改为“hello vue3”,命令式代码如下:

$("div1").text("hello vue3");

以上代码可以看出,我们明确知道哪个元素的哪里发生了变更,但是声明式代码不一定能做到这一点,因为它需要找到变更前后的差异,并只更新变化的地方,也就是说声明式代码比命令式代码多出找差异的性能消耗,

可维护性
问题来了,在性能上命令式要优于声明式,为什么vue还要做声明式呢?原因在于声明式代码的可维护性更强。我们可以看出声明式代码只关注结果,不用再去写DOM元素的获取、更新、删除等操作,代码看上去更直观。
————————————————
版权声明:本文为CSDN博主「慕迅前端」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39245942/article/details/128887576

二 Kubernetes 声明式 API 的工作原理

声明式API和命令式API的区别 - ZhanLi - 博客园声明式API 声明式和命令式的对比 Kubernetes 声明式 API 的工作原理 参考 声明式API 声明式和命令式的对比 命令式 命令式有时也称为指令式,命令式的场景下,计算机只会机械的完成指定https://www.cnblogs.com/ricklz/p/16960244.html

在 Kubernetes 项目中,一个 API 对象在 Etcd 里的完整资源路径,是由:Group(API 组)、Version(API 版本)和 Resource(API 资源类型)三个部分组成的。

apiVersion: batch/v2alpha1
kind: CronJob
...

在这个 YAML 文件中,“CronJob”就是这个 API 对象的资源类型(Resource),“batch”就是它的组(Group),v2alpha1 就是它的版本(Version)。

这个 YAML 会被 Kubernetes 转化成一个 CronJob 对象,这里来看下是如何转化的。

1、首先匹配 API 对象的组;

Kubernetes 中的核心 API 对象,例如 Pod、Node。不需要 Group,(Group 为 ""),这些 API 对象会在 /api 这个层级进行匹配;

非核心的 Api 对象类似 CronJob 会在 /apis 这个层级进行匹配,上面 CronJob 的 Group 是 batch,所以就会找到 /apis/batch

2、匹配 API 的版本号;

上面栗子 CronJob 的版本号是 v2alpha1,所以当前匹配的路径就是 /apis/batch/v2alpha1;

和我们 API 中的设计原则一样,Kubernetes 中的版本号也是用来进行 API 版本管理的。

3、匹配 API 对象的资源类型;

在匹配好版本之后,Kubernetes 根据路径和资源类型,就能确定创建的是 /apis/batch/v2alpha1 下的 CronJob 对象。

当发起创建 CronJob 的 POST 请求之后,编写的 YAML 的信息就被提交给 APIServer 处理。

APIServer 如何处理 API 请求

1、请求过滤请求,进行一些前置性的工作,比如授权、超时处理、审计等;

2、API 路由匹配;

进入 MUX 和 Routes 流程,MUX 和 Routes 的主要作用是完成 APIServer 的 URL 和 Handler 绑定,Handler 找到对应的 CronJob 类型定义。

3、根据提交的 YAML 文件创建资源;

上面的栗子,根据这个 CronJob 类型定义,使用提交的 YAML 文件里的字段,创建一个 CronJob 对象。

4、使用准入控制器,进行变更操作或验证操作;

准入控制器(Admission Controller)位于 API Server 中,在对象被持久化之前,准入控制器拦截对 API Server 的请求,一般用来做身份验证和授权。

准入控制器包括以下两种:

  • 1、变更(Mutating)准入控制:修改请求的对象;

  • 2、验证(Validating)准入控制:验证请求的对象。

5、序列化,保存到 Etcd 中。

APIServer 会把验证过的 API 对象转换成用户最初提交的版本,进行序列化操作,并调用 Etcd 的 API 把它保存起来。

参考

【深入剖析 Kubernetes】深入剖析Kubernetes_容器_K8s-极客时间
【k8s 声明式 API】Kubernetes声明式API-51CTO.COM
【声明式对比命令式】命令式和声明式,哪个才是你的菜 - 腾讯云开发者社区-腾讯云
【Kubernetes 对象管理】Kubernetes 对象管理 | Kubernetes
【声明式API和命令式API】https://boilingfrog.github.io/2022/12/06/声明式API/

三 扩展

k8s control 源码函数解读

Kubernetes 控制器的工作原理解读

Kubernetes 控制器的工作原理解读 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang|云原生 (icloudnative.io) 

Kubernetes 中运行了一系列控制器来确保集群的当前状态与期望状态保持一致,它们就是 Kubernetes 的大脑。例如,ReplicaSet 控制器负责维护集群中运行的 Pod 数量;Node 控制器负责监控节点的状态,并在节点出现故障时及时做出响应。总而言之,在 Kubernetes 中,每个控制器只负责某种类型的特定资源。对于集群管理员来说,了解每个控制器的角色分工至关重要,如有必要,你还需要深入了解控制器的工作原理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

命令式与声明式 - 理解 k8s 声明式api工作原理 -Kubernetes 控制器的工作原理解读 的相关文章

  • 机器视觉模型——投影矩阵

    1 概述 机器视觉就是用机器代替人眼和人脑来做测量和判断 机器视觉系统工作的基本过程是获取目标的图像后 xff0c 对图像进行识别 特征提取 分类 数学运算等分析操作 xff0c 并根据图像的分析计算结果 xff0c 来对相应的系统进行控制
  • 2014英伟达校园招聘-上海

    时间 xff1a 2013 10 19 地点 xff1a 上海交通大学中院楼 申请职位 xff1a 嵌入式系统工程师 1 指针数组和数组指针 函数指针 指针函数 2 存储对齐 3 Getmemory问题 4 6进制转换成10进制 5 时钟方
  • 库实现之分配内存对齐的程序aligned_malloc和aligned_free函数

    分配内存管理对齐的程序 void aligned malloc int size int alignment void ptr 61 void malloc size 43 alignment if ptr void aligned 61
  • 解决warning: incompatible implicit declaration of built-in function 'malloc'

    由于代码中使用了malloc函数和字符串函数 xff0c 编译时出现错误 warning incompatible implicit declaration of built in function malloc warning incom
  • 解决虚拟机安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题

    在Intel i5 4460的主机上安装Ubuntu 14 04 xff08 64位 xff09 xff0c 虚拟机使用的是Vmware 10 0 0 build 1295980 在新建好虚拟机 xff0c 运行时候就出现了VMware W
  • 【CentOS7】yum安装时出现错误Errno 14 Couldn't resolve host的解决办法

    在安装python sphinx时出现Errno 14 Couldn 39 t resolve host xff0c 什么东东 xff1f root 64 localhost jansson 1 2 yum install python s
  • SAS (Serial Attached SCSI) 技术详解

    xff08 一 xff09 什么是SAS SAS xff08 Serial Attached SCSI xff09 即串行SCSI技术 xff0c 是一种磁盘连接技术 xff0c 它综合了并行SCSI和串行连接技术 xff08 如FC SS
  • mdadm命令解析

    mdadm命令解析 一 在linux系统中目前以MD Multiple Devices 虚拟块设备的方式实现软件RAID 利用多个底层的块设备虚拟出一个新的虚拟设备 并且利用条带化 stripping 技术将数据块均匀分布到多个磁盘上来提高
  • fio使用指南

    这个文档是对fio 2 0 9 HOWTO文档的翻译 xff0c fio的参数太多了 xff0c 翻译这个文档时并没有测试每一个参数的功能和使用方法 xff0c 只有少量参数做了试验 xff0c 大部分的参数采用的是根据字面翻译或是个人理解
  • pixhawk双机通信测试例子

    本文针对 mavlink 和 topic 有一定熟悉的读者 Pixhawk 自有固件 xff0c mavlink 程序主要是针对 pixhawk 与地面站通信的 所以要实现双机通信需要修改一些代码 这里主要是利用 example px4 m
  • umask命令学习体会

    输入您的搜索字词 提交搜索表单 Web www csdn net umask因为需要一个相逆过程和文件的x位设置问题 xff0c 经常会混 xff0c 发以此文加强记忆 umask 功能说明 xff1a 指定在建立文件时预设的权限掩码 语
  • 树莓派4b安装Ubuntu20.04及ROS并使用激光雷达建图

    一 安装Ubuntu20 04 1 1 镜像下载和烧录 树莓派的Ubuntu系统镜像可以在Ubuntu官网下载 xff0c Server是服务器版本 xff0c amd64代表64位 xff0c armhf代表32位 xff0c raspi
  • linux查看设备和硬盘序列号 ip mac地址

    最近公司查设备 xff0c 记录一下相关的命令 xff0c 方便以后使用 主要针对centos xff0c ubuntu加上 sudo 应该就可以 xff1b 几个命令都可以用 大家可以对比查看核对 1 设备序列号 查看硬件相关所有的序列号
  • ubuntu系统 - 数据库 mysql命令 5.7 mysql常用命令 - 持续更新版 含mysql主从

    一 初始安装和基础 首先删除mysql sudo apt get remove mysql 然后清理残留的数据 dpkg l grep rc awk 39 print 2 39 sudo xargs dpkg P 它会跳出一个对话框 xff
  • openstack 对比 k8s 深度好文

    原文 xff1a https www cnblogs com goldsunshine p 9872142 html 当下云计算的领域里热度最高的两个项目 xff0c 无疑是OpenStack和Kubernetes 如果云计算是一个风起云涌
  • k8s官方中文文档学习

    网址 xff1a https www kubernetes org cn k8s
  • Docker镜像使用规范和latest标签 理解(为更新回滚做准备)

    dockerfile规范参考链接 xff1a Dockerfile编写规范 Loull 博客园 原文链接 xff1a Docker镜像latest标签 june js 博客园 当使用命令 docker pull mysql 拉取镜像时 xf
  • k8s存储 : volumeMounts

    原文 xff1a Kubernetes核心概念之Volume存储数据卷详解 linux运维技术的技术博客 51CTO博客 volume数据卷用法 在Docker中就有数据卷的概念 xff0c 当容器删除时 xff0c 数据也一起会被删除 x
  • grafana模板大全

    原文 xff1a https www jianshu com p 367d52fe1171 前言 xff1a 本篇文章分三部分来介绍常用的grafana模板 数据来源均为prometheus 数据来源为zabbix或其他的请绕行 xff01
  • 什么是 EPEL?

    一 什么是 EPEL xff1f EPEL 的全称叫 Extra Packages for Enterprise Linux EPEL 是由 Fedora 社区打造 xff0c 为 RHEL 及衍生发行版如 CentOS Scientifi

随机推荐