首页 文章 精选 留言 我的

精选列表

搜索[agent协作],共10000篇文章
优秀的个人博客,低调大师

摸鱼看板 v1.3.0 发布 - 任务协作与用户体验增强

✨ 新增功能 * 任务评论系统 任务详情页面现已支持评论功能,方便团队成员围绕任务进行讨论: ✅评论与回复- 支持对任务发表评论,并可回复其他成员的评论 ✅@提及成员- 在评论中 @团队成员,快速通知相关人员 ✅评论倒序显示- 最新评论优先展示,方便查看最新讨论 ✅Markdown 支持- 评论支持 Markdown 格式,可以插入代码、链接等 * 任务附件管理 任务详情新增附件管理功能,支持文件上传与下载: *文件上传- 支持拖拽上传和点击上传 *文件下载- 一键下载任务相关附件 *️附件删除- 支持删除不需要的附件 *文件预览- 图片附件支持点击放大查看 *附件统计- 显示任务的附件数量 * 通用文件上传接口 扩展了文件上传能力,不再局限于图片类型: *多类型支持- 支持文档、压缩包、代码文件等多种类型 *安全校验- 文件大小和类型安全校验 *分类存储- 按日期分类存储,便于管理 * 功能优化 * 阶段详情布局优化 优化了阶段详情页面的布局和显示逻辑: *双栏布局- 采用左侧主内容 + 右侧属性面板的设计,信息展示更清晰 ✅条件显示- 只有“待验收”或“已完成”状态的阶段才显示完成报告 *隐藏无关信息- 未开始或进行中的阶段不再显示空的完成报告区域 *界面更清爽- 减少不必要的视觉干扰,提升阅读体验 ⚠️ 甘特图错误提示优化 优化了甘特图加载失败时的错误提示: *友好提示框- 系统未激活时弹出清晰的警告对话框 *明确指引- 提示用户联系管理员进行系统激活 *分类处理- 区分不同类型的错误,给出针对性提示 * Bug 修复 修复阶段详情页面完成报告无条件显示的问题 修复甘特图加载失败时仅控制台报错的问题 修复评论组件状态未正确重置的问题 * 技术改进 评论组件重构- 采用倒序显示,优化评论交互体验 错误处理增强- 统一错误提示方式,提升用户体验 组件状态管理- 优化弹窗关闭时的状态清理逻辑 * 使用建议 任务评论最佳实践 及时反馈- 对任务进展和问题及时评论反馈 @相关人- 使用 @提及 功能通知相关团队成员 清晰表达- 利用 Markdown 格式让评论更清晰易读 附件补充- 将相关文档、截图作为附件上传到任务 阶段管理建议 填写完成报告- 完成阶段时填写详细的完成说明 及时验收- 负责人完成后及时提请验收 合理拆解- 将复杂任务拆解为可管理的阶段 仓库首页: 摸鱼看板: 摸鱼看板 软件首页 https://www.moyukanban.com

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

当创建statefulset资源后,k8s组件如何协作

本文分享自华为云社区《当创建StatefulSet后,k8s会发生什么?》,作者:可以交个朋友 。 一、StatefulSet介绍 StatefulSet 是用来管理有状态应用的工作负载对象,StatefulSet 管理基于相同容器规约的一组 Pod,使用持久标识符为工作负载Pod提供持久存储。和Deployment 类似,也属于副本控制器,但和Deployment不同的是, StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID。无论该类Pod的生命周期如何变化,每个 Pod 的标识符ID不会变化。另外还支持服务实例有序部署和扩展,并提供有状态应用程序所需的有序启动和终止策略。 StatefulSet工作负载之间使用Headless Service来定义Pod网路标识,生成可解析的DNS域名名称记录,用于同一StatefulSet工作负载彼此Pod之间的通信。 二、StatefulSet工作负载访问方式 与其他的工作负载(如Deployment)的对外访问方式相似,但有所区别。Deployent工作负载使用service(带有IP地址的服务)提供对外服务访问,但在一些特殊场景中,客户端访问不需要kubernetes中service实现的负载均衡功能,而是由客户端直接去发现/选择服务端的后端实例访问,就需要一种特殊的服务“Headless service”。这是一种没有访问入口(即service没有IP地址)的service。kube-proxy不会为这种类型的service(Headless service)创建iptables/ipvs转发规则。 apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: selector: matchLabels: app: nginx # 必须匹配 .spec.template.metadata.labels serviceName: "nginx" replicas: 3 # 默认值是 1 minReadySeconds: 10 # 默认值是 0 template: metadata: labels: app: nginx # 必须匹配 .spec.selector.matchLabels spec: terminationGracePeriodSeconds: 10 containers: - name: nginx image: registry.k8s.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "my-storage-class" resources: requests: storage: 1Gi 其中StatefulSet关联的pod与pvc、pv的关系如下图: 三、StatefulSet工作负载创建流程 用户使用通过kubectl客户端发起创建StatefulSet资源对象请求至api-server。 api-server对请求用户鉴权、准入控制操作,然后将该请求事件写入到etcd存储中。 考虑到StatefulSet-controller采用非阻塞式长连接watch机制实时获取StatefulSet资源对象信息,一旦集群中有StatefulSet变化(包括创建、更新、删除),则通过api-server获取etcd中相关StatefulSet资源对象。 api-server将StatefulSet资源返回给StatefulSet-controller的watch接口长连接。 StatefulSet-controller维护StatefulSet的生命周期状态,并通过StatefulSet的模板确定副本数量,根据副本数量依序(0、1....N-1)创建Pod副本。 api-server接收到StatefulSet-controller创建结果后,更新etcd存储中的StatefulSet状态信息和Pod创建事件。 四、StatefulSet-Controller工作原理 在StatefulSet中,Informer和Event Handler是两个重要的组件 informer:是一个Kubernetes API客户端,用于监视Kubernetes API中的资源对象的变化并更新到本地缓存中。当资源对象的状态发生变化时,Informer会触发Event Handler。 Event Handler:是一个回调函数,用于处理Informer发出的事件,Event Handler会根据事件的类型,执行相应的操作。 Manage Revision:用于标识StatefulSet的每个更新版本,通过Manage Revision,可以查看StatefulSet的更新历史,以便在需要时回滚到先前的版本。 Manger pods in order:管理StatefulSet中pod的启动顺序, Update in order:有序的更新Pod。查看 Pod 期望的状态是否符合要求,不满足则删除重建, Update Status:管理StatefulSet对象的更新状态。 replicas数组:存放可用Pod的ord值(Pod名称中ID标识符),(0 <= ord < Spec.replicas) condemned数组:存放需要删除pod的ord值(Pod名称中ID标识符),(ord >= Spec.replicas) 创建StatefulSet工作负载Pod实例 判断StatefulSet的管理策略: 若实例管理策略为并行策略,则遍历replicas数组,所有Pod同步创建,不区分启动先后顺序。 若实例管理策略为有序策略,遍历replicas数组,依序(0、1....N-1)创建Pod。需确保replicas数组中的前一个Pod处于runing或ready状态。方可创建下一个Pod。 最后检查Pod的信息是否与StatefulSet匹配,若不匹配则更新Pod的状态。如当前StatefulSet已关联Pod,但是Pod标签不匹配则释放Pod,重新新建Pod副本关联。 4.1 更新StatefulSet工作负载Pod实例 判断statefulset的更新策略: 如果更新策略为OnDelete,则不会自动触发更新行为,需要手动删除Pod,系统对其进行重建更新。 如果更新策略为RollingUpdate,则不再关注实例管理策略。都是按顺序进行处理且等待当前Pod删除成功后才继续小于上一个Pod顺序号的Pod。 最后检查Pod的信息是否与StatefulSet匹配,若不匹配则更新Pod的状态。如当前StatefulSet已关联Pod,但是Pod标签不匹配则释放Pod,重新新建Pod副本关联。 4.2 扩缩容StatefulSet工作负载Pod实例 扩容操作: 更新statefulset的状态信息,将新建Pod的信息写入到replicas队列和condemned队列中。 遍历replicas数组,确保replicas数组中的Pod处于runing或ready状态。发现faild状态的Pod删除重建,对未创建的Pod则直接创建。 最后检查Pod的信息是否与StatefulSet匹配,若不匹配则更新Pod的状态。如当前StatefulSet已关联Pod,但是Pod标签不匹配则释放Pod,重新新建Pod副本关联。 缩容操作: 更新statefulset的状态信息。 遍历condemned数组,确保replicas数组中的Pod处于runing或ready状态。发现faild状态的Pod删除重建,对未创建的Pod则直接创建。然后按Pod名称标识符由大至小逆序删除condemned数组中若干个Pod 最后检查Pod的信息是否与StatefulSet匹配,若不匹配则更新Pod的状态。如当前StatefulSet已关联Pod,但是Pod标签不匹配则释放Pod,重新新建Pod副本关联。 4.3 删除StatefulSet工作负载Pod实例 如下 processCondemned函数主要介绍删除StatefulSet工作负载Pod func (ssc *defaultStatefulSetControl) processCondemned(ctx context.Context, set *apps.StatefulSet, firstUnhealthyPod *v1.Pod, monotonic bool, condemned []*v1.Pod, i int) (bool, error) { logger := klog.FromContext(ctx) if isTerminating(condemned[i]) { if monotonic { logger.V(4).Info("StatefulSet is waiting for Pod to Terminate prior to scale down", "statefulSet", klog.KObj(set), "pod", klog.KObj(condemned[i])) return true, nil } return false, nil } if !isRunningAndReady(condemned[i]) && monotonic && condemned[i] != firstUnhealthyPod { logger.V(4).Info("StatefulSet is waiting for Pod to be Running and Ready prior to scale down", "statefulSet", klog.KObj(set), "pod", klog.KObj(firstUnhealthyPod)) return true, nil } if !isRunningAndAvailable(condemned[i], set.Spec.MinReadySeconds) && monotonic && condemned[i] != firstUnhealthyPod { logger.V(4).Info("StatefulSet is waiting for Pod to be Available prior to scale down", "statefulSet", klog.KObj(set), "pod", klog.KObj(firstUnhealthyPod)) return true, nil } logger.V(2).Info("Pod of StatefulSet is terminating for scale down", "statefulSet", klog.KObj(set), "pod", klog.KObj(condemned[i])) return true, ssc.podControl.DeleteStatefulPod(set, condemned[i]) } 该函数首先判断需要删除的 Pod 是否正在终止中,如果是,则根据是否为Pod管理策略进行不同的处理。如果是有序策略,则会阻塞等待终止的 Pod 完全消失。如果不是有序策略,则直接返回,不做任何操作。 如果需要删除的 Pod 不是第一个不健康的 Pod,且当前Pod管理策略是有序策略,则会阻塞等待其他不健康 Pod 变为 Running 和 Ready 状态或者变为 Available 状态。如果不是有序策略,则直接返回,不做任何操作。 最后,如果需要删除的 Pod 不处于终止中,且满足删除条件,则会执行删除操作,并返回 true。否则,直接返回 false。 点击关注,第一时间了解华为云新鲜技术~

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

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

用户登录
用户注册