首页 文章 精选 留言 我的

精选列表

搜索[fota升级],共10000篇文章
优秀的个人博客,低调大师

KEDA 从 CNCF 沙箱升级成为孵化项目

CNCF技术监督委员会[1](TOC)投票通过了将 KEDA 作为 CNCF 孵化项目的决定。 KEDA[2](Kubernetes Event-Driven Autoscaling,Kubernetes 事件驱动自动伸缩)是 Kubernetes 的单用途事件驱动自动伸缩器,可以很容易地添加到 Kubernetes 集群中,以伸缩应用程序。它旨在简化应用程序的自动伸缩,并通过支持伸缩至零来优化成本。 KEDA 成立于 2019 年 5 月,是微软和 Red Hat 的合作伙伴,并于2020 年 3 月[3]加入 CNCF 沙箱。自从加入沙箱项目以来,该项目的最终用户数量迅速增长,其中包括阿里巴巴[4]、CastAI[5]、毕马威、Meltwater、微软等用户[6]。项目团队由来自微软、红帽和 Codit3 个组织的 4 名维护人员[7]组成。 在沙箱中,该团队还添加了 TriggerAuthentication 和 ClusterTriggerAuthentication,允许用户将身份验证信息移出应用程序,提供生产级安全性并允许重用。在社区的帮助下,KEDA 的伸缩器从 12 个增加到在最新版本中的 37 个。 “KEDA 允许用户设置他们的 Kubernetes 应用程序,以自动伸缩,以响应来自云原生生态系统的各种来源的指标,”TOC 主席和项目赞助者 Liz Rice 说。“这种动态伸缩是云原生架构的一个重要方面。我们期待着持续的增长,以及一个令人兴奋的新功能和伸缩器的路线图。” KEDA 已经很好地融入了 CNCF 社区。它扩展了 Kubernetes 的自动伸缩功能,允许用户专注于他们的应用程序,而不是自动伸缩的基础设施。它与 Virtual Kubelet 可以很好地构建一个自动伸缩的最佳点,并且社区支持基于 Prometheus 和 NATS 等 CNCF 项目的伸缩。该团队正在寻求与其他项目集成,如 SMI 和 CloudEvents。 “自动伸缩应该很简单,而不是火箭科学。这就是为什么我认为 KEDA 应该成为 Kubernetes 的标准应用程序自动伸缩器,使应用程序自动伸缩变得简单,”KEDA 维护者、CNCF 大使、Codit Azure 架构师 Tom Kerkhove 说。 “基于 CPU 和内存的自动伸缩通常缺乏健壮性,而使用自定义度量来管理你自己的 HPA 可能会引入难以维护的复杂性,”KEDA 维护者、红帽首席软件工程师 Zbynek Roubalik 说。“KEDA 提供了一个没有额外层的全面解决方案。” 主要部件: Agent——KEDA 激活和关闭 Kubernetes Deployments,在没有事件时从和到零伸缩。这是在安装 KEDA 时运行的 KEDA-operator 容器的主要角色之一。 Metrics——KEDA 充当 Kubernetes 度量服务器,向 Horizontal Pod Autoscaler 暴露丰富的事件数据(如队列长度或流延迟),以推动伸缩。这保留了丰富的事件集成,并支持完成或放弃队列消息等操作。 显著的里程碑: 3.5k 个 GitHub 星星 ~1k 个关闭的拉请求 222 个未解决问题和 545 个已解决问题 ~140 位贡献者 15 个发布 “云原生计算的一个关键原则是弹性,KEDA 使团队能够用最少的代码构建事件驱动的应用程序,这些程序可以根据需求进行伸缩。” CNCF CTO Chris Aniszczyk 说:“此外,KEDA 已经发展了一个支持各种整合的极好的伸缩器社区,我们期待在 CNCF 培育该项目的持续增长。” 作为一个孵化项目,KEDA 正在规划一个广泛的路线图。在未来,维护人员计划引入新的伸缩器和秘密源,添加对基于 HTTP 的自动伸缩的一流支持,引入历史分析和预测伸缩,提高整体性能等等。 作为 CNCF 托管的项目,KEDA 是一个中立基金会的一部分,该基金会与它的技术兴趣和更大的 Linux 基金会保持一致,后者提供治理、营销支持和社区拓展。KEDA 还加入了其他孵化项目,包括 Argo、Buildpacks、CloudEvents、CNI、Contour、Cortex、CRI-O、Dragonfly、emissary-ingress、Falco、Flux、gRPC、KubeEdge、Linkerd、NATS、Notary、Operator Framework、Rook、SPIFFE、SPIRE 和 Thanos。有关每个级别的成熟度要求的更多信息,请访问CNCF 毕业标准[8]。 参考资料 [1]技术监督委员会:https://github.com/cncf/toc [2]KEDA:https://keda.sh/ [3]2020 年 3 月:https://keda.sh/blog/2020-03-31-keda-cncf-sandbox/ [4]阿里巴巴:https://www.cncf.io/blog/2021/03/30/why-alibaba-cloud-uses-keda-for-application-autoscaling/ [5]CastAI:https://keda.sh/blog/2021-08-04-keda-cast-ai/ [6]用户:https://keda.sh/community/#users [7]3 个组织的 4 名维护人员:https://github.com/kedacore/governance/blob/main/MAINTAINERS.md [8]CNCF 毕业标准:https://github.com/cncf/toc/blob/master/process/graduation_criteria.adoc

优秀的个人博客,低调大师

升级CSS布局的新方法:Atomic Layout

像Material UI、Bootstrap和Ant Design这样的前端库,通过简化布局和提高开发速度,使开发者的工作更加轻松。现在有了一个新的库Atomic Layout,它使用完全不同的方法来创建可重用的布局单元。 当使用现有的前端库创建一个特定的布局时,组件和间距都取决于上下文,反之亦然。这种相互依赖使得布局风格变得不灵活,在尝试进行任何改进或修改时,都让开发者感到头痛。 Atomic Layout遵循原子设计原则,使用CSS网格来创建可重用的布局单元。它通过解耦间距和组件来避免相互依赖,从而为创建布局创造无上下文的单元。 安装 Atomic Layout是一个基于React的库,使用样式化组件。首先创建一个React应用并安装所需的包。 安装 Create React App。 $ npx create-react-app atomic-layout 复制代码 安装styled-components。 $ npm i styled-components atomic 复制代码 部署 Atomic Layout是一个由多个子元素组成的实际物理实体。例如,一个标题是由标志、菜单和导航动作组成的。 接下来创建一个有图像、一些文本和一个按钮的响应式卡片元素。 创建一个名为Card.js 的新文件,并在其中粘贴以下代码。 import React from 'react' export default function Card() { return ( <div> <p>Hello</p> </div> ) } 复制代码 现在React元素已经创建,从Atomic Layout中导入composition 组件,并将其包在我们的React组件中,如下所示: import React from 'react' import { Composition } from 'atomic-layout' export default function Card() { return ( <Composition> <p>Hello</p> </Composition> ) } 复制代码 composition 组件接受一个area 道具,该道具定义了我们布局的蓝图。将该区域定义为一个字符串,并将其传递给composition 组件。 import React from 'react' import { Composition } from 'atomic-layout' const areasPhone = ` image text button ` export default function Card() { return ( <Composition areas={areasPhone}> <p>Hello</p> </Composition> ) } 复制代码 area 道具接受该值,使Reactarea 组件可用。它们可以通过children render函数访问,如下所示。 import React from 'react' import { Composition } from 'atomic-layout' const areasPhone = ` Image Text Button ` export default function Card() { return ( <Composition areas={areasPhone}> {(Areas) => ( <> <Areas.Image>Image</Areas.Image> <Areas.Text>Text</Areas.Text> <Areas.Button>Button</Areas.Button> </> )} </Composition> ) } 复制代码 现在,基本卡片组件已经准备好接受内容了。我们已经做了几个有风格的组件,并把它们导入到我们的Card.js 。 现在,可以用下面的脚本运行该项目。 $ npm start 复制代码 我们会得到以下输出: 在这个图片中,你会看到三个不同的区域。可以通过为我们的组合提供额外的道具来定义它们之间的空间关系。通过给composition 组件添加一个名为gap 的道具来指定网格元素之间有100px的间隙。 <Composition areas={areasMobile} gap={100}> {(Areas) => ( <Areas.Image><Image src="https://www.clker.com/cliparts/R/S/Z/4/t/f/crossed-hammers-bw-100x100-md.png"></Image></Areas.Image> <Areas.Text><Text>Hello</Text></Areas.Text> <Areas.Button><Button>Click me</Button></Areas.Button> )} </Composition> 复制代码 会看到下面的情况: 响应性道具 可以通过为我们的卡片组件定义一个新的蓝图来使它具有响应性。例如,想为平板电脑调整我们的卡片组件。创建另一个字符串模板。 const areasTablet = ` Image Text Button ` 复制代码 在这里有一个问题。我们不能把卡片组件传递给我们的areas 道具,因为它已经有一个手机显示的值,这是Atomic Layout中的默认值。 为了解决这个问题,使用响应式道具,它的结构是Prop name +Breakpoint + Behavior 。 断点 断点是布局获得一个新状态的特定条件,可以使用断点为area 道具分配不同的值。组合的道具采取不同的断点,Atomic Layout默认使用xs ,即移动设备的断点。 Atomic Layout使用Bootstrap 4的断点。 行为 行为简单地定义了一个道具的应用方式。它有以下值。 up :将道具应用到指定的断点和向上。这是默认的行为。例如,如果up与md 一起使用,那么道具将从md 到 。xl down :将道具应用到指定的断点和向下。例如,如果down与md 一起使用,则道具将从md 到 。xs only :只将道具应用到指定的断点上。 对于中等尺寸的屏幕,我们可以在组合中使用areaTablet 。 <Composition areas={areasMobile} gap={100} areasMd={areasTablet} gapMd={10} > {(Areas) => ( <Areas.Image><Image src="https://www.clker.com/cliparts/R/S/Z/4/t/f/crossed-hammers-bw-100x100-md.png"></Image></Areas.Image> <Areas.Text><Text>Hello</Text></Areas.Text> <Areas.Button><Button>Click me</Button></Areas.Button> )} </Composition> 复制代码 再次运行我们的项目,检查布局是否已经为平板电脑进行了重组。 我们使用Md 断点来获得由areaTablet 为iPad设置的精确输出。原子布局中的每个道具都可以是响应式的,这可以将开发速度提高到一个全新的水平。 内容可见性 Atomic Layout允许使用Visible 组件来设置内容的可见性,这个实用组件可以包装子元素,并允许它们在满足某些条件时变得可见,比如特定的断点或窗口宽度。可以在没有CSS的情况下使用Visible 组件。 从软件包中导入Visible 组件,用它来包装你的区域。Visible 组件接受断点作为道具。代码现在应该看起来像下面的片段。 import React from 'react' import { Composition, Visible } from 'atomic-layout' import Button from './Button' import Text from './Text' import Image from './Image' const areasPhone = ` Image Text Button ` const areasTablet = ` Image Text Button ` export default function Card() { return ( <Composition areas={areasPhone} areasMd={areasTablet} gap={0} gapMd={0}> {(Areas) => ( <> <Areas.Image><Image src="https://www.clker.com/cliparts/R/S/Z/4/t/f/crossed-hammers-bw-100x100-md.png"></Image></Areas.Image> <Visible for='md'> <Areas.Text><Text>Hello</Text></Areas.Text> </Visible> <Areas.Button><Button>Click me</Button></Areas.Button> </> )} </Composition> ) } 复制代码 该文本将只在中等大小的屏幕上可见。再次运行我们的项目,检查我们是否能在移动屏幕上看到文本。 当我们使用移动显示器时,文本是隐藏的。切换到平板电脑上就能看到。 结论 回顾一下Atomic Layout与其他前端库的不同之处。 独立的组件 构图中的区域是独立的,因为它们的间距不受特定环境的约束,协助创建平滑和可重复使用的布局。 推广CSS网格 CSS网格是强大的。在我看来,它是布局位置的未来。虽然其他库大多是基于Flexbox的,但Atomic Layout对CSS Grid的使用使其可以适应未来的发展。 间隔 Atomic Layout的主要重点是以最佳方式分配间距。Atomic Layout有效地定义了布局构成,而不是使用行和列。 快速生产 由于响应式道具和可见性组件等功能,在Atomic Layout中处理动态内容是简单而快速的。开发人员可以在不写一行CSS的情况下制作生产级别的布局,并且仍然获得响应的结果。 统一性 用Atomic Layout创建的布局响应速度极快,并且共享全局设置,使整个应用程序变得统一。 与其他库不同,Atomic Layout只关注一件事:处理间距和布局结构。Atomic Layout通过提供无与伦比的开发体验来出色地完成其工作。 如果以上文章对您有帮助,请给我们的开源项目点点star:http://github.crmeb.net/u/defu不胜感激! 来自 “开源世界 ” ,链接:https://ym.baisou.ltd/post/723.html,如需转载,请注明出处,否则将追究法律责任。

优秀的个人博客,低调大师

悟空 CRM 11.0 版本-20210502 升级内容【JAVA 版本】

新增: 1、自定义字段:新增明细表格字段;单选、多选字段增加逻辑表单和“其他”选项,通过逻辑表单,可实现选择选项后显示指定字段; 2、客户管理:新增团队成员有效时间;优化团队成员权限;联系人和回款模块增加团队成员功能;增加相关团队字段,支持通过相关团队对团队成员进行筛选; 3、新增日志点赞互动功能; 4、新增发票模块自定义字段、发票导出功能; 5、角色权限:系统管理角色新增权限"角色权限查看",控制在新建员工选择角色和编辑员工角色时,可查看和选择角色的范围; 优化: 1、优化客户管理仪表盘,图表展示和统计数据等; 2、优化导出,支持操作一万条以上数据; 3、高级筛选判断符优化调整;时间筛选增加固定时间段(例如今日、本月、本年等); 4、优化待办事项、员工与部门管理刷新不及时的问题; 5、优化日志评论UI、评论排序方式;

优秀的个人博客,低调大师

浅入Kubernetes(12):Deployment 的升级、回滚

目录 更新 上线 会滚 缩放 Deployment 直接设置 Pod 水平自动缩放 比例缩放 暂停 Deployment 上线 本篇内容讨论 Pod 的更新和回滚,内容不多。 更新 打开https://hub.docker.com/_/nginx可以查询 nginx 的镜像版本,我们可以先选择一个旧一点的版本。 首先,我们创建一个 Nginx 的 Deployment,副本数量为 3。 kubectlcreatedeploymentnginx--image=nginx:1.19.0--replicas=3 首次部署的时候,跟之前的操作一致,不需要什么特殊的命令。 注:我们也可以加上--record标志将所执行的命令写入资源注解kubernetes.io/change-cause中。 这对于以后的检查是有用的。例如,要查看针对每个 Deployment 修订版本所执行过的命令。 其实更新 pod 是非常简单的,我们不需要控制每个 pod 的更新,也不需要担心会不会对业务产生影响,k8s 会自动控制这些过程。 我们只需要触发镜像版本更新事件,k8s 会自动为我们更新 pod 的。 kubectlsetimagedeployment.apps/nginxnginx=nginx:1.20.0 格式为: kubectlsetimagedeployment.apps/{deployment名称}{镜像名称}:={镜像名称}:{版本} 我们可以查看 pod 的详细信息: kubectldescribepods 找到 Events 描述: ...... Events:TypeReasonAgeFromMessage------------------------- NormalScheduled66sdefault-schedulerSuccessfullyassigneddefault/nginx-7b87485749-rlmcxtoinstance-2 NormalPulled66skubeletContainerimage"nginx:1.20.0"alreadypresentonmachine NormalCreated66skubeletCreatedcontainernginx NormalStarted65skubeletStartedcontainernginx 为了记录版本更新信息,我们需要在kubectl create deployment、kubectl set image命令后面加上-- --record。 我们还可以通过 edit 方式更新 pod。 执行: kubectleditdeploymentnginx 然后会弹出编辑 yaml 的界面,将.spec.template.spec.containers[0].image从nginx:1.19.0更改至nginx:1.20.0,然后保存即可。 上线 仅当 Deployment Pod 模板(即.spec.template)发生改变时,例如模板的标签或容器镜像被更新, 才会触发 Deployment 上线。 其他更新(如对 Deployment 执行扩缩容的操作)不会触发上线动作。Deployment 的上线动作可以为我们更新 pod 的版本。 它的上线跟我们所说的更新,有些区别。因为我们所说的更新,版本是往后的,例如 1.19.0 -> 1.20.0 ,用新版本替换旧版本才叫更新。但是 Deployment 的上线,则是任意版本。它会根据我们设置的镜像版本自动替换,可以用 1.19.0 替换 1.20.0。不过这里我们不需要纠结这些。 当我们更新 pod 版本时,k8s 会自动负载均衡,而不是把所有 pod 删除,再重新创建新版本 pod,它会以稳健的方式逐渐替换 pod。 我们可以通过命令,查看 pod 的上线状态: kubectlrolloutstatusdeploymentnginx 输出类似于: Waitingforrollouttofinish:2outof3newreplicashavebeenupdated... 或者 deployment"nginx-deployment"successfullyrolledout 我们也可以通过获取 deployment 信息时,查看已更新的 pod 数量: kubectlgetdeployment NAMEREADYUP-TO-DATEAVAILABLEAGEnginx3/33318m UP-TO-DATE 字段可以看到成功更新的 pod 数量。 还可以查看 ReplicaSet 和 pod: kubectlgetreplicaset kubectlgetpods 输出类型于: NAMEDESIREDCURRENTREADYAGEnginx-7b8748574900020mnginx-85b45874d933321m NAMEREADYSTATUSRESTARTSAGEnginx-85b45874d9-nrbg81/1Running012mnginx-85b45874d9-qc7f21/1Running012mnginx-85b45874d9-t48vw1/1Running012m 可以看到有两个 ReplicaSet,nginx-7b87485749 已经被全部更新到 nginx-85b45874d9 了,所以前者的数量为 0,我们也可以看到 pod 中,所有 pod 都是以nginx-85b45874d9作为前缀的。这几个关键信息,我们可以截图,后面再次对照。 如果我们的项目上线了,我们更新软件版本,如果一次性更新所有容器或者 pod,那么我们的软件会有一段时间处于不可用状态,直到所有 pod 都完成更新。Deployment 可确保在更新时仅关闭一定数量的 Pod,默认情况下,它确保至少所需 Pods 75% 处于运行状态,也就是说正在被更新的 pod 比例不超过 25%。当然,只有两三个 pod 的 Deployment 不会按照这个比例限定。 如果我们的 pod 数量足够大,或者在更新 Deployment 时迅速输出上线状态,可以看到新旧的 pod 数量加起来不一定就是 3 个,因为它不会杀死老 Pods,直到有足够的数量新的 Pods 已经出现。 在足够数量的旧 Pods 被杀死前并没有创建新 Pods。它确保至少 2 个 Pod 可用,同时 最多总共 4 个 Pod 可用。 Deployment 确保仅所创建 Pod 数量只可能比期望 Pods 数高一点点。 默认情况下,它可确保启动的 Pod 个数比期望个数最多多出 25%(最大峰值 25%)所以在自动更新 Deployment 时,观察到的 pod 可能为 4个。另外,在 Deployment 更新时,除了可以更改镜像的版本,也可以更改 ReplicaSet 的数量。 执行kubectl describe deployment nginx查看 Deployment 详细信息,我们查看 Event 字段。 但是这些原理等知识我们都不需要记,也不需要深入,我们记得有这回事就行,有需要的时候也可以直接查看文档的。 会滚 默认情况下, Deployment 的上线记录都会保留在系统中,以便可以随时回滚。 我们查看 Deployment 的上线历史记录: kubectlrollouthistorydeploymentnginx REVISIONCHANGE-CAUSE2<none>3<none> 注:我们的版本不一定一样,因为我为了这这篇文章,进行了一些测试,可能版本数量比你的多。 可以看到有 2,3 两个版本,我们查看 版本3 的信息: kubectlrollouthistorydeploymentnginx--revision=3 deployment.apps/nginxwithrevision#3PodTemplate: Labels: app=nginx pod-template-hash=85b45874d9 Containers: nginx: Image: nginx:1.20.0 Port: <none> HostPort: <none> Environment: <none> Mounts: <none> Volumes: <none> 目前介绍了几个查看 Deployment 上线的历史记录,下面我真正来回滚 Deployment。 回滚是一个版本: kubectlrolloutundodeploymentnginx 再执行kubectl rollout history deployment nginx会看到不一样的信息。 此时版本数量多了,我们还可以指定回滚到特点的版本。 kubectlrolloutundodeploymentnginx--to-revision=2 这里提一下--record,在前面,我们创建和更新 Deployment 时,都没有使用到这个参数。我们可以试试这个参数的作用。 kubectlsetimagedeployment.apps/nginxnginx=nginx:1.19.0 kubectlrollouthistorydeploymentnginx 输出: REVISIONCHANGE-CAUSE5<none>6kubectlsetimagedeployment.apps/nginxnginx=nginx:1.19.0--record=true 说明加上了--record,会把我们操作时的命令记录下来。 但是我们这里目前来说,只有两个记录,我们明明提交了多次,但是这里查询的只有两条记录,这时因为我们操作的时候,只用到了 1.19.0、1.20.0 两个版本,所以也就只有这两个版本的提交记录。多用几个版本,输出结果: REVISIONCHANGE-CAUSE7kubectlsetimagedeployment.apps/nginxnginx=nginx:1.19.0--record=true8kubectlsetimagedeployment.apps/nginxnginx=nginx:1.20.0--record=true9kubectlsetimagedeployment.apps/nginxnginx=nginx:latest--record=true 缩放 Deployment 直接设置 很简单,使用kubectl scale命令直接设置: kubectlscaledeployment.v1.apps/nginx--replicas=10 修改 yaml 的方式也行,一是修改 yaml文件,使用kubectl apply -f的方式更新,或者使用kube edit的方式。 Pod 水平自动缩放 K8S有个 Pod 水平自动扩缩(Horizontal Pod Autoscaler) 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标 来执行自动扩缩。 Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。 参考资料:https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/ 命令: kubectlautoscaledeploymentnginx--min=10--max=15--cpu-percent=80 表示目标 CPU 使用率为80%(期望指标),副本数量配置应该为 10 到 15 之间,CPU 是动态缩放 pod 的指标,会根据具体的 CPU 使用率计算副本数量,其计算公式如下。 期望副本数=ceil[当前副本数*(当前指标/期望指标)] 算法细节请查看:https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-details 比例缩放 另外还有个比例缩放,允许 Deployment 支持同时运行应用程序的多个版本。 当我们设置.spec.strategy.type==RollingUpdate时,采取 滚动更新的方式更新 Pods,就可以指定maxUnavailable和maxSurge来控制滚动更新 过程。这个我们之前提到过,就是 Deployment 默认会保证一直有 75% 的 pod处于可用状态,在完成更新前可能有多个版本的 pod 共存。 这里不细说,请参考:https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/#max-unavailable 默认的话,deployment 的 yaml 是这样的: strategy: rollingUpdate: maxSurge:25% maxUnavailable:25% type:RollingUpdate 我们可以改成: strategy: rollingUpdate: maxSurge:3 maxUnavailable:2 type:RollingUpdate 注:执行kubectl edit deployment nginx直接改。 我们可以观察到这个过程: root@instance-1:~#kubectlsetimagedeploymentnginxnginx=nginx:1.20.0 deployment.apps/nginximageupdated root@instance-1:~#kubectlgetreplicaset NAMEDESIREDCURRENTREADYAGE nginx-7b8748574955093m nginx-85b45874d900093m nginx-bb957bbb588835m 前面我们设置了最大存在两个不可用 pod(maxUnavailable=2),所以一开始会更新两个 pod,所以nginx-bb957bbb58个处于可用状态。而 maxSurge 表示允许超出的期望 pod 数量,所以nginx-7b87485749的数量不是 2 个,而是 5个,因为允许超出 3 个。其实意思就是不需要等旧的 pod 删除 一个,新的 pod 创建一个。可以多创建几个 pod,再按照慢一些的速度删除旧的 pod,最终完成版本更新。 最终: NAMEDESIREDCURRENTREADYAGEnginx-7b8748574910101099mnginx-85b45874d900099mnginx-bb957bbb500041m 暂停 Deployment 上线 命令: kubectlrolloutpausedeploymentnginx 用途就是我们更新 Deployment 的 pod 版本时,可以暂停。 前面我们已经设置了这个 maxSurge 和 maxUnavailable,可以让 pod 的创建慢一些。 执行下面的命令可以快速卡住上线过程。 kubectlsetimagedeploymentnginxnginx=nginx:latest kubectlrolloutpausedeploymentnginx 之后,多次执行kubectl get replicaset,会发现副本数量不会变化。 NAMEDESIREDCURRENTREADYAGEnginx-7b87485749888109mnginx-85b45874d9000109mnginx-bb957bbb555552m 如果我们再次执行: kubectlsetimagedeploymentnginxnginx=nginx:1.19.0 会发现虽然提示更新了,但是实际上没有变化。在暂停中,执行新的更新操作是无效的。 执行kubectl rollout history deployment nginx也查不到我们提交的1.19.0的请求。 暂停的时候,我们可以更新一些限制的 CPU 和 资源: kubectlsetresourcesdeploymentnginx-c=nginx--limits=cpu=200m,memory=512Mi 恢复 Deployment: kubectlrolloutresumedeploymentnginx

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册