使用 kube-downscaler 降低Kubernetes集群成本

2fca997e9f1b25e843458919579ecfd3.gif

新钛云服已累计为您分享772篇技术干货

391de9a2b36e5c2079effa35f5d3d28d.gif

34e0d3fa7d731312f1125fbea182afcb.png

介绍

Kube-downscaler 是一款开源工具,允许用户定义 Kubernetes 中 pod 资源自动缩减的时间。这有助于通过减少非高峰时段的资源使用量来降低基础设施成本。

在本文中,我们将详细介绍 kube-downscaler 的功能、安装和配置,以及它的用例和未来前景。

kube-downscaler的特点

Kube-downscaler 是一款基于调度的强大工具,用于在 Kubernetes 集群中对应用程序进行升级或降级。在本节中,我们将探讨该工具的一些关键功能:

与Kubernetes功能或工具的兼容性

Kube-downscaler 还支持水平 Pod 自动缩放 (HPA),并可以与 HPA 结合使用,以确保为应用程序维护所需的副本数量。这使得 kube-downscaler 能够为 Kubernetes 中的应用程序扩展提供额外的灵活性和细粒度的控制。

Karpenter 和 kube-downscaler 是两个可以结合使用的工具,可以为 Kubernetes 集群提供完整且强大的资源管理解决方案。通过结合使用 Karpenter 和 kube-downscaler,Kubernetes 集群可以从水平和垂直扩展中受益。 Downscaler 允许减少 Pod 数量,而 Karpenter 通过将 Pod 整合到更少或不同类型的机器上来优化节点利用率。

与Kubernetes功能或工具的兼容性

Kube-downscaler 还支持水平 Pod 自动缩放 (HPA),并可以与 HPA 结合使用,以确保为应用程序维护所需的副本数量。这使得 kube-downscaler 能够为 Kubernetes 中的应用程序扩展提供额外的灵活性和细粒度的控制。

Karpenter 和 kube-downscaler 是两个可以结合使用的工具,可以为 Kubernetes 集群提供完整且强大的资源管理解决方案。通过结合使用 Karpenter 和 kube-downscaler,Kubernetes 集群可以从水平和垂直扩展中受益。 Downscaler 允许减少 Pod 数量,而 Karpenter 通过将 Pod 整合到更少或不同类型的机器上来优化节点利用率。

根据定义的时间段自动扩展部署副本

Kube-downscaler 可以根据预定义的时间段自动扩展部署副本。这意味着我们可以设置一个计划,在一天、一周或一个月的特定时间增加或减少副本数量。

比如,如果我们知道应用程序在一天中的某些时段遇到高流量,则可以将 kube-downscaler 配置为在这些时段自动扩展副本,然后在流量减少时缩小副本。 

这可以允许在预期峰值负载的情况下进行扩展,而不是等待峰值负载发生并由 HPA 处理。这可以帮助优化资源使用并确保您的应用程序始终可用且响应迅速。

但是 Kube-downscaler 主要用于缩小副本并优化集群的成本,我们通常使用 HPA 来管理扩展。

kube-downscaler的安装和配置

kubernetes集群上kube-downscaler安装说明

  1. 从 GitHub 克隆 kube-downscaler 存储库:

 
git clone <https://codeberg.org/hjacobs/kube-downscaler.git>

‍‍‍

  1. 进入 kube-downscaler 目录:

 
cd kube-downscaler

‍‍‍

  1. 编辑 deploy/kube-downscaler.yaml 文件以根据您的具体需求自定义配置。例如,可以调整时区、计划和缩放规则。

  2. 将配置应用到您的 Kubernetes 集群:

 
kubectl apply -f deploy/

‍‍‍

此命令将部署 kube-downscaler 控制器并创建 kube-downscaler 部署。

可以通过检查 kube-downscaler 部署的日志来验证 kube-downscaler 控制器是否正在运行:

 
kubectl logs -f deployment/kube-downscaler

‍‍‍

安装完成后,需要进行一下配置。

根据具体用户需求配置kube-downscaler

Kube-downscaler 通过在 Kubernetes 部署对象上使用注释来提供扩展计划的定制。 

部署对象中的 downTimePeriod注释可用于指定不应扩展部署的停机时间段。

minReplicas 注释可用于设置部署的最小副本数。 

这些字段与 kube-downscaler 注释结合使用,允许您根据特定的业务需求和资源利用模式创建自定义的扩展计划。 

通过调整这些字段,可以配置 kube-downscaler 以优化应用程序可用性和成本效率的方式扩展部署。

以下是使用 kube-downscaler 进行部署的简单配置。

apiVersion: apps/v1
kind: Deployment
metadata:name: random-deploymentannotations:# Kube-downscalerdownscaler/downtimePeriod: "Mon-Fri 00:00-07:00 Europe/Berlin"downscaler/minReplicas: 1
spec:replicas: 2selector:matchLabels:app: randomtemplate:metadata:labels:app: randomspec:containers:- name: random-containerimage: random-image

‍‍‍

通过此配置,从周一到周五午夜到早上 7 点(在欧洲/柏林时间线上),副本数量将减少到 1 个。 

kube-downscaler 将根据定义的计划自动开始缩减 pod。 

目前我们已经在 Kubernetes 集群上安装并运行了 kube-downscaler。

算法

Kube-downscaler 如果满足以下所有条件,将缩减部署的副本:

  • current time不是“uptime”计划的一部分,也不是“downtime”计划的一部分。 如果为 true,则按以下顺序评估计划:

    • downscaler/downscale-period 或 downscaler/downtime 工作负载定义的注释

    • downscaler/upscale-period 或 downscaler/uptime 工作负载定义的注释

    • downscaler/downscale-period 或 downscaler/downtime 工作负载命名空间上的注释

    • downscaler/upscale-period 或 downscaler/uptime 工作负载命名空间上的注释

    • --upscale-period 或 --default-uptime CLI 参数

    • --downscale-period 或 --default-downtime CLI 参数

    • UPSCALE_PERIOD 或 DEFAULT_UPTIME 环境变量

    • DOWNSCALE_PERIOD 或 DEFAULT_DOWNTIME 环境变量

  • 工作负载的命名空间不是排除列表的一部分:

    • 如果提供排除列表,它将用于代替默认值(仅包括kube-system )。

  • 工作负载的标签与标签列表不匹配。

  • 工作负载的名称不是排除列表的一部分

  • 工作负载未标记为排除(注释 downscaler/exclude: "true" 或 downscaler/exclude-until: "2024-04-05"

  • 没有活动 Pod 强制整个集群进入正常运行时间(注释 downscaler/force-uptime: "true" )

Minimum replicas最小副本数

默认情况下,部署将缩减为零副本。这可以通过部署或其命名空间的注释进行配置, downscaler/downtime-replicas 也可以通过 CLI 使用 --downtime-replicas .

Ex: downscaler/downtime-replicas: "1"

Specific workload特定工作负载

在正常的情况下 HorizontalPodAutoscalers ,该字段不能设置为零, 因此downscaler/downtime-replicas 至少 1 应设置为 。 关于 CronJobs ,它们的状态将按照我们的预期进行定义 suspend: true 。

注意点

请注意,默认的宽限期为 15 分钟适用于新的 nginx 部署,即

  • 如果当前时间不在 ,它不会立即缩小 Mon-Fri 9-17 (Buenos Aires timezone) ,而是在 15 分钟后缩小。downscaler最终会记录如下内容:

 
INFO: Scaling down Deployment default/nginx from 1 to 0 replicas (uptime: Mon-Fri 09:00-17:00 America/Buenos_Aires, downtime: never)

‍‍‍

请注意,如果 HorizontalPodAutoscaler (HPA) 与部署一起使用,请考虑以下事项:

  • 如果需要缩减到 0 个副本,则应在 上 Deployment 应用注释。这是一种特殊情况,因为 minReplicas 不允许在 HPA 上为 0。将部署副本设置为 0 实质上会禁用 HPA。在这种情况下,HPA 将发出事件,例如 failed to get memory utilization: unable to get metrics for resource memory: no metrics returned from resource metrics API 没有 Pod 可以从中检索指标。

  • 如果需要缩小大于 0,则应在 HPA 上应用注释。这允许在停机期间根据外部流量动态扩展 Pod,并在停机期间保持较低的 minReplicas 流量,如果没有低流量。如果对部署而不是 HPA 进行批注,则会导致争用条件,即缩减部署, kube-downscaler HPA 在部署更高时 minReplicas 将其升级。

若要使用 在 HPA 上 --downtime-replicas=1 启用downscaler,请确保将以下注释添加到部署和 HPA。

$ kubectl annotate deploy nginx 'downscaler/exclude=true'
$ kubectl annotate hpa nginx 'downscaler/downtime-replicas=1'
$ kubectl annotate hpa nginx 'downscaler/uptime=Mon-Fri 09:00-17:00 America/Buenos_Aires'

‍‍‍

详细配置

Uptime/downtime spec

downscaler通过命令行参数、环境变量或 Kubernetes 注释进行配置。

时间定义(例如 DEFAULT_UPTIME )接受以逗号分隔的规范列表,例如,以下配置将缩小非工作时间的所有部署:

DEFAULT_UPTIME="Mon-Fri 07:30-20:30 Europe/Berlin"

‍‍‍

仅在周末和周五 20:00 后缩小:

DEFAULT_DOWNTIME="Sat-Sun 00:00-24:00 CET,Fri-Fri 20:00-24:00 CET'

‍‍‍

每个时间规范可以采用以下两种格式之一:

  • 重复规范格式 <WEEKDAY-FROM>-<WEEKDAY-TO-INCLUSIVE> <HH>:<MM>-<HH>:<MM> <TIMEZONE> .时区值可以是任何时区,例如“US/Eastern”、“PST”或“UTC”。

  • 绝对规范格式, <TIME_FROM>-<TIME_TO> 其中每个 <TIME> 格式都是ISO 8601日期和时间的格式 <YYYY>-<MM>-<DD>T<HH>:<MM>:<SS>[+-]<TZHH>:<TZMM> 。

基于periods的替代逻辑

您可以选择升级或缩减的时间段,而不是严格的正常运行时间或停机时间。时间定义是相同的。在这种情况下,放大或缩小只发生在时间段,其余时间将被忽略。

如果配置了升级或缩减周期,将忽略正常运行时间和停机时间。这意味着某些选项是互斥的,例如,您可以使用或 --default-downtime ,但不能同时使用 --downscale-period 两者。

此定义将在 19:00 到 20:00 之间缩减群集。如果手动升级集群,则在第二天 19:00-20:00 之前不会缩减集群。

DOWNSCALE_PERIOD="Mon-Sun 19:00-20:00 Europe/Berlin"

‍‍‍

命令行选项

可用的命令行选项:

  • --dry-run

    仅运行模式:不更改任何内容,只需打印将要执行的操作

  • --debug

    调试模式:打印更多信息

  • --once

    仅运行一次循环并退出

  • --interval

    循环间隔(默认:30 秒)

  • --namespace

    将downscaler限制为仅在单个命名空间(默认:所有命名空间)中工作。这主要适用于 kube-downscaler 的部署者只能访问给定命名空间(而不是集群访问权限)的部署场景。如果与 同时 --exclude-namespaces使用 ,则不应用任何应用。

  • --include-resources

    将此类资源缩小为逗号分隔列表。

  • --grace-period

    新部署在缩减部署之前的宽限期(以秒为单位)(默认值:15 分钟)。宽限期从创建部署时开始计算,即无论宽限期如何,更新的部署都将立即缩减。

  • --upscale-period

    仅在给定时间段内纵向扩展的替代逻辑(默认:从不),也可以通过环境变量 UPSCALE_PERIOD 或通过每个部署 downscaler/upscale-period 上的注释进行配置

  • --downscale-period

    仅在给定时间段内缩减的替代逻辑(默认:从不),也可以通过环境变量 DOWNSCALE_PERIOD 或通过每个部署 downscaler/downscale-period 上的注释进行配置

  • --default-uptime

    要纵向扩展的默认时间范围(默认:始终),也可以通过环境变量 DEFAULT_UPTIME 或通过每个部署 downscaler/uptime 上的注释进行配置

  • --default-downtime

    要缩减的默认时间范围(默认:从不),也可以通过环境变量 DEFAULT_DOWNTIME 或通过每个部署 downscaler/downtime 上的注释进行配置

  • --exclude-namespaces

    从降级中排除命名空间(正则表达式模式列表,默认:kube-system),也可以通过环境变量 EXCLUDE_NAMESPACES 进行配置。如果与 同时 --namespace 使用 ,则不应用任何应用。

  • --exclude-deployments

    从降级中排除特定部署/状态集/cronjobs(默认:kube-downscaler,downscaler),也可以通过环境变量 EXCLUDE_DEPLOYMENTS 进行配置。尽管名称如此,但此选项将与任何包含的资源类型(Deployment,StatefulSet,CronJob等)的名称匹配。

  • --downtime-replicas

    缩小到的副本的默认值,注释 downscaler/downtime-replicas 优先于此值。

  • --deployment-time-annotation

    可选:将使用的注释的名称,而不是资源的创建时间戳。如果您希望资源在部署后的宽限期 ( --grace-period ) 内保持纵向扩展,则应使用此选项。注释的时间戳值的格式必须与 Kubernetes 的格式完全相同: creationTimestamp %Y-%m-%dT%H:%M:%SZ 。建议:通过部署工具自动设置此批注。

  • --matching-labels

    可选:kube-downscaleer 范围涵盖的工作负载标签列表。标签与列表中的任何工作负载都不匹配的所有工作负载都将被忽略。为了向后兼容,如果未指定此参数,kube-downscaler 将应用于所有资源。

Namespace Defaults命名空间默认值

DEFAULT_UPTIME 、 DEFAULT_DOWNTIME 和 FORCE_UPTIME 排除也可以使用命名空间注释进行配置。在配置的情况下,这些值将取代其他全局默认值。

apiVersion: v1
kind: Namespace
metadata:name: foolabels:name: fooannotations:downscaler/uptime: Mon-Sun 07:30-18:00 CET

命名空间级别支持以下批注:

  • downscaler/upscale-period

  • downscaler/downscale-period

  • downscaler/uptime :为此命名空间中的所有资源设置“正常运行时间”

  • downscaler/downtime :为此命名空间中的所有资源设置“停机时间”

  • downscaler/force-downtime :强制缩减此命名空间中的所有资源 - 可以是 true / false

  • downscaler/force-uptime :强制向上扩展此命名空间中的所有资源 - 可以是 true / false

  • downscaler/exclude :设置为 以 true 排除命名空间中的所有资源

  • downscaler/exclude-until :暂时排除命名空间中的所有资源,直到给定的时间戳

  • downscaler/downtime-replicas :覆盖默认目标副本以缩小到(默认值:零)

使用案例

该工具的主要用例是通过优化 Kubernetes 集群资源的利用率来降低成本。不过,它也可以用来预热集群,避免过度依赖 HPA。 

虽然这不是其主要目的,但这种组合提供了一种替代解决方案,可确保应用程序的高可用性,同时最大限度地降低基础设施成本。

降低成本

kube-downscaler 的另一个用例是防止高峰使用期间的服务中断。通过定义在高需求期间扩展资源的计划,kube-downscaler 可以帮助预先扩展部署并避免 HPA 延迟,以确保应用程序即使在高峰使用期间也保持可用和响应。

服务中断预防

kube-downscaler 的另一个用例是防止高峰使用期间的服务中断。通过定义在高需求期间扩展资源的计划,kube-downscaler 可以帮助预先扩展部署并避免 HPA 延迟,以确保应用程序即使在高峰使用期间也保持可用和响应。

建议

基于预定义计划的扩展,这可能并不适合所有用例。此外,它不支持自动缩放,这意味着用户必须手动调整缩放计划以满足不断变化的需求。

另一种可供考虑的解决方案是 Keda。 Keda是一个开源项目,为Kubernetes应用程序提供动态自动伸缩功能。使用 Keda,用户可以根据各种指标(例如队列长度、CPU 使用率或自定义指标)设置自定义扩展规则。

这允许对资源使用进行更精细的控制,并确保应用程序始终能够正确扩展以满足需求。

此外,Keda 兼容广泛的 Kubernetes 应用程序,包括有状态和无状态应用程序,并支持多种事件源,例如 Azure Event Hubs、Kafka 和 RabbitMQ。

结论

Kube-downscaler 是管理 Kubernetes 集群中资源使用情况的强大工具。通过定义扩展计划,用户可以优化集群中的资源使用并降低成本,同时确保应用程序即使在高峰使用期间也保持可用和响应。

虽然 kube-downscaler 是管理 Kubernetes 集群中资源使用情况的一个有价值的工具,但它可能有一些限制。如果需要对资源扩展进行更精细的控制或需要自动扩展功能,那么可能值得考虑像 Keda 这样的替代解决方案。

    推荐阅读   

45fc4c4778ab5d39eae4315b1ea0431c.png

b78e7c8f27e5735c85cc46c6da59cd7b.png

    推荐视频    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/175607.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《算法通关村—队列基本特征和实现问题解析》

《算法通关村—队列基本特征和实现问题解析》 队列的基本特征 队列&#xff08;Queue&#xff09;是一种常见的数据结构&#xff0c;具有以下基本特征&#xff1a; 先进先出&#xff08;FIFO&#xff09;&#xff1a;队列中的元素按照它们被添加到队列的顺序排列&#xff0c;…

UIAlertController 修改 title 或 message 样式相关

UIAlertController 文字换行后默认对齐方式为居中,若想调整其相关样式属性可以借鉴如下方式进行修改,具体实现方式 code 如下: NSString *msg "1、注销≠退出登录;\n注销:对不再使用的账号进行清空移除;注销后,App中数据将全部丢失,不可再找回;\n2、注销后,与账号相关的…

第三方软件测评选择远程测试好还是现场测试好?

如今许多软件企业在软件开发过程完成之后&#xff0c;会将软件测试工作交由第三方软件测评机构来进行&#xff0c;那么做第三方软件测试时&#xff0c;远程测试和现场测试哪个更好呢?我想这是许多软件企业都十分关注的问题&#xff0c;今天卓码软件测评小编将对以上问题作出简…

Linux rm命令:删除文件或目录

当 Linux 系统使用很长时间之后&#xff0c;可能会有一些已经没用的文件&#xff08;即垃圾&#xff09;&#xff0c;这些文件不但会消耗宝贵的硬盘资源&#xff0c;还是降低系统的运行效率&#xff0c;因此需要及时地清理。 rm 是强大的删除命令&#xff0c;它可以永久性地删除…

天软特色因子看板(2023.10 第13期)

该因子看板跟踪天软特色因子A05005(近一月单笔流涌金额占比(%)&#xff0c;该因子为近一个月单笔流通金额占比因&#xff0c;用以刻画股票在收盘时&#xff0c;主力资金在总交易金额中所占的比重。 今日为该因子跟踪第11期&#xff0c;跟踪其在SW801150 (申万医药生物) 中的表现…

如何通过会员营销数字化推动精准营销与用户忠诚度培养?

营销策略的制定和实施对于企业的成功至关重要&#xff0c;而会员数字化营销系统将通过用户画像、会员标签等重要功能&#xff0c;推动企业提高用户忠诚度培养。目前市面上有哪些热门的会员营销功能&#xff1f; 一、用户画像&#xff1a;让营销更精准 用户画像是一种通过收集和…

Hadoop学习总结(搭建Hadoop集群(伪分布式模式))

如果前面有搭建过Hadoop集群完全分布式模式&#xff0c;现在搭建Hadoop伪分布式模式可以选择直接克隆完全分布式模式中的主节点(hadoop001)。以下是在搭建过完全分布式模式下的Hadoop集群的情况进行 伪分布式模式下的Hadoop功能与完全分布式模式下的Hadoop功能相同。 一、克隆…

电脑不显示桌面?盘点4个正确操作!

“我的电脑一打开后完全加载不出来桌面&#xff0c;现在我也不知道怎么办&#xff0c;有没有比较了解电脑的大佬可以分享一下经验呀&#xff1f;” 有时候我们使用电脑时可能会遇到桌面上所有的应用程序都消失了甚至桌面不显示的情况。如果电脑不显示桌面我们可能就很难进行下一…

ToLua使用原生C#List和Dictionary

ToLua是使用原生C#List 介绍Lua中使用原生ListC#调用luaLua中操作打印测试如下 Lua中使用原生DictionaryC#调用luaLua中操作打印测试如下 介绍 当你用ToLua时C#和Lua之间肯定是会互相调用的&#xff0c;那么lua里面使用List和Dictionary肯定是必然的&#xff0c;在C#中可以调用…

关于FreeTypeFont‘ object has no attribute ‘getsize‘问题的解决方案

引言 这个问题是在训练yolov5_obb项目遇到的&#xff0c;大概率又是环境问题。如下图&#xff1a; 解决方法 出现这个问题是Pillow版本太高了&#xff0c;下载低版本的&#xff1a; pip install Pillow9.5 OK&#xff01;

【UE】属性同步,源码详解一个勾选了Actor复制的Actor第一次被创建时经历了什么

本文参考https://zhuanlan.zhihu.com/p/640723352 准备工作 先准备一个勾选了复制的Actor&#xff0c;然后在游戏开始时Spawn这个Actor 源码过程详解 发送属性同步 在NetDriver的TickFlush中发送属性同步的数据 1、ServerReplicateActors_BuildConsiderList 去找到所有需…

算法通关村第四关-黄金挑战栈的经典问题

括号匹配问题 描述 : 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有…

超2000个大模型应用,支持文心4.0!AI Studio星河大模型社区升级上新

想给自己做个私人定制的旅行攻略&#xff0c;满足个性化的出游需求&#xff0c;还要细致关注到天气、穿衣、老人孩子的作息等等&#xff0c;但太耗时费力怎么办&#xff1f;让AI帮忙搞定。一位开发者在AI Studio星河大模型社区用短短数小时就做好了“旅行规划家”智能应用。像这…

色彩校正及OpenCV mcc模块介绍

一、术语 1.光&#xff1a;是电磁波&#xff0c;可见光是可被人眼感知的电磁波。可见光大约在400-700nm波段。光子携带的能量与波长成反比&#xff0c;400nm--700nm之间的单色光的颜色从紫色渐变成红色。 2.光谱&#xff1a;除了太阳光源外&#xff0c;LED灯、白炽灯等各种照明…

基于STC系列单片机实现定时器0扫描数码管显示定时器/计数器1作为计数器1产生频率的功能

#define uchar unsigned char//自定义无符号字符型为uchar #define uint unsigned int//自定义无符号整数型为uint #define NixieTubeSegmentCode P0//自定义数码管段码为单片机P0组引脚 #define NixieTubeBitCode P2//自定义数码管位码为单片机P2组引脚 sbit LED P1^0;//位定义…

探索Vue 3和Vue 2的区别

目录 响应式系统 性能优化 Composition API TypeScript支持 总结 Vue.js是一款流行的JavaScript框架&#xff0c;用于构建用户界面。Vue 3是Vue.js的最新版本&#xff0c;相较于Vue 2引入了许多重大变化和改进。在本文中&#xff0c;我们将探索Vue 3和Vue 2之间的区别。 …

深入探究Vue.js生命周期及其应用场景

当谈到Vue.js的生命周期时&#xff0c;我们指的是组件在创建、更新和销毁过程中发生的一系列事件。了解Vue的生命周期对于开发人员来说是至关重要的&#xff0c;因为它们提供了一个机会来执行特定任务&#xff0c;并在不同的阶段处理组件。 Vue的生命周期可以分为八个不同的阶…

【JavaEE初阶】 认识文件与Java中操作文件

文章目录 &#x1f334;认识文件&#x1f6a9;树型结构组织和目录&#x1f6a9;文件路径&#xff08;Path&#xff09;&#x1f6a9;知识扩展 &#x1f38d;Java 中操作文件&#x1f6a9;File 概述&#x1f4cc;属性&#x1f4cc;构造方法&#x1f4cc;方法 &#x1f6a9;File使…

11.与JavaScript深入交流-[js一篇通]

文章目录 1.变量的使用1.1基本用法1.2理解 动态类型 2.基本数据类型2.1number 数字类型2.1.1数字进制表示2.1.2特殊的数字值 2.2string 字符串类型2.2.1基本规则2.2.2转义字符2.2.3求长度2.2.4字符串拼接 2.3boolean 布尔类型2.4undefined 未定义数据类型2.5null 空值类型 3.运…