[{"data":1,"prerenderedAt":4089},["ShallowReactive",2],{"search-docs":3,"doc-\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-workload":886},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,159,162,165,169,172,175,178,182,186,190,194,198,202,206,210,214,218,222,226,230,234,238,242,246,250,254,258,262,266,269,273,277,281,285,288,291,294,298,301,304,307,310,313,316,319,322,325,329,332,336,340,344,348,352,356,359,362,365,368,371,374,377,380,383,386,389,393,396,399,402,405,408,411,414,417,420,424,428,432,435,438,442,446,450,454,458,462,466,470,474,477,480,483,487,491,494,497,500,504,507,511,515,518,521,524,527,530,533,536,539,542,545,548,551,554,557,560,563,566,569,572,575,579,583,587,591,595,599,603,606,610,614,617,620,623,626,629,633,637,640,643,646,649,652,655,658,661,664,667,670,673,676,679,682,685,688,691,694,697,700,703,706,709,712,716,720,724,728,732,736,740,744,748,752,756,760,764,768,772,775,779,783,787,790,793,796,799,802,805,808,811,814,818,822,825,829,832,835,838,841,844,848,851,854,858,862,865,869,873,876,879,882],{"path":5,"title":6,"description":7},"\u002Fabout\u002Fauthor","作者相关","只想纯粹的做一个程序员...",{"path":9,"title":10,"description":11},"\u002Fabout\u002Fjourney","心路历程","",{"path":13,"title":14,"description":15},"\u002Fai\u002Fagent\u002Fframeworks","Agent 框架","主流 Agent 框架：LangChain、LlamaIndex、AutoGen、CrewAI",{"path":17,"title":18,"description":19},"\u002Fai\u002Fagent\u002Fhooks","Agent Hooks 与自动化","Claude Agent 的 Hooks 生命周期、事件类型、典型自动化场景",{"path":21,"title":22,"description":23},"\u002Fai\u002Fagent\u002Fintroduction","AI Agent 概述","AI Agent 核心概念：感知、规划、执行、记忆",{"path":25,"title":26,"description":27},"\u002Fai\u002Fagent\u002Fpractice","Agent 实战","AI Agent 实战：构建自主任务执行系统",{"path":29,"title":30,"description":31},"\u002Fai\u002Fagent\u002Fsdk","Claude Agent SDK 开发","使用 Claude Agent SDK 构建自定义 AI Agent：架构、API、生命周期",{"path":33,"title":34,"description":35},"\u002Fai\u002Fagent\u002Fsubagents","Subagents 子代理","用 Subagents 分解复杂任务、并发执行、隔离上下文",{"path":37,"title":38,"description":39},"\u002Fai\u002Fagent\u002Ftool-use","工具调用","AI Agent 工具调用：Function Calling、Tool Use 原理与实践",{"path":41,"title":42,"description":43},"\u002Fai\u002Ffundamentals\u002Fdeep-learning","深度学习入门","深度学习基础知识：前向传播、反向传播、损失函数、优化器",{"path":45,"title":46,"description":47},"\u002Fai\u002Ffundamentals\u002Fml-basics","机器学习基础","机器学习核心概念：监督学习、无监督学习、强化学习",{"path":49,"title":50,"description":51},"\u002Fai\u002Ffundamentals\u002Fneural-networks","神经网络原理","神经网络架构：CNN、RNN、注意力机制",{"path":53,"title":54,"description":55},"\u002Fai\u002Fgetting-started","AI 学习路线","AI 技术学习路线图，从基础到实战的完整指南",{"path":57,"title":58,"description":59},"\u002Fai\u002Fllm\u002Ffine-tuning","模型微调","大模型微调技术：LoRA、QLoRA、全量微调、RLHF",{"path":61,"title":62,"description":63},"\u002Fai\u002Fllm\u002Fintroduction","大模型概述","大语言模型发展历程、核心能力与主流模型对比",{"path":65,"title":66,"description":67},"\u002Fai\u002Fllm\u002Flocal-deploy","本地部署","大模型本地部署：Ollama、vLLM、llama.cpp",{"path":69,"title":70,"description":71},"\u002Fai\u002Fllm\u002Ftransformer","Transformer 架构","Transformer 架构详解：自注意力机制、位置编码、多头注意力",{"path":73,"title":74,"description":75},"\u002Fai\u002Fmcp\u002Fclient","MCP Client 开发","MCP Client 开发指南：连接、调用、集成",{"path":77,"title":78,"description":79},"\u002Fai\u002Fmcp\u002Fdebugging","MCP 调试与排错","MCP Server 开发与集成过程中的常见问题、日志分析、诊断工具",{"path":81,"title":82,"description":83},"\u002Fai\u002Fmcp\u002Fintroduction","MCP 概述","Model Context Protocol 协议概述：架构、核心概念、应用场景",{"path":85,"title":86,"description":87},"\u002Fai\u002Fmcp\u002Fserver","MCP Server 开发","MCP Server 开发指南：资源、工具、提示词的实现",{"path":89,"title":90,"description":91},"\u002Fai\u002Fmcp\u002Ftools","MCP Tools 深入","深入理解 MCP Tools：与 Resources\u002FPrompts 的差异、Schema 设计、Annotations 与权限控制",{"path":93,"title":94,"description":95},"\u002Fai\u002Fprompt\u002Fadvanced","高级 Prompt 模式","高级 Prompt 设计模式：Tree-of-Thought、自我反思、多轮对话策略",{"path":97,"title":98,"description":99},"\u002Fai\u002Fprompt\u002Fbasics","Prompt 基础","Prompt Engineering 入门：基本概念、角色设定、输出格式控制",{"path":101,"title":102,"description":103},"\u002Fai\u002Fprompt\u002Ftechniques","提示词技巧","常用提示词技巧：Few-shot、Chain-of-Thought、ReAct",{"path":105,"title":106,"description":107},"\u002Fai\u002Frag\u002Fembedding","文本嵌入","文本嵌入模型：Embedding 原理、模型选择、相似度计算",{"path":109,"title":110,"description":111},"\u002Fai\u002Frag\u002Fintroduction","RAG 概述","检索增强生成（RAG）架构原理、优势与应用场景",{"path":113,"title":114,"description":115},"\u002Fai\u002Frag\u002Fpractice","RAG 实战","RAG 应用实战：文档问答系统、知识库搭建",{"path":117,"title":118,"description":119},"\u002Fai\u002Frag\u002Fvector-database","向量数据库","主流向量数据库对比：Milvus、Pinecone、Chroma、Weaviate",{"path":121,"title":122,"description":123},"\u002Fai\u002Fskills\u002Fbest-practices","Skill 最佳实践","编写高质量 Skill 的设计原则、常见陷阱与优化技巧",{"path":125,"title":126,"description":127},"\u002Fai\u002Fskills\u002Fcreating","创建自定义 Skill","从零编写一个可被 Agent 自动发现和调用的 Skill",{"path":129,"title":130,"description":131},"\u002Fai\u002Fskills\u002Fintroduction","Agent Skills 概述","Claude Agent Skills 概念、工作原理、与 Tools\u002FMCP 的区别",{"path":133,"title":134,"description":135},"\u002Fgolang\u002Fadvanced\u002Fconcurrency","Go - 并发深入","深入理解 Go 并发编程的核心机制。",{"path":137,"title":138,"description":139},"\u002Fgolang\u002Fadvanced\u002Fgc","Go - 垃圾回收","理解 Go 的垃圾回收机制，掌握 GC 调优方法。",{"path":141,"title":142,"description":143},"\u002Fgolang\u002Fadvanced\u002Fgmp","Go - GMP 调度模型","GMP 是 Go 运行时调度器的核心模型，理解它对于编写高性能 Go 程序至关重要。",{"path":145,"title":146,"description":147},"\u002Fgolang\u002Fadvanced\u002Fgo-concurrency","Go - 并发编程","Go 的并发是其核心特性之一，通过 Goroutine 和 Channel 实现。",{"path":149,"title":150,"description":151},"\u002Fgolang\u002Fadvanced\u002Fmemory","Go - 内存模型","理解 Go 的内存分配机制和内存模型。",{"path":153,"title":154,"description":155},"\u002Fgolang\u002Fadvanced\u002Fprofiling","Go - 性能分析","掌握 Go 的性能分析工具：pprof、trace、benchmark。",{"path":157,"title":158,"description":11},"\u002Fgolang\u002Fcore\u002Fgo-basic","Go - 基础语法",{"path":160,"title":161,"description":11},"\u002Fgolang\u002Fcore\u002Fgo-composite","Go - 复合类型",{"path":163,"title":164,"description":11},"\u002Fgolang\u002Fcore\u002Fgo-control","Go - 流程控制",{"path":166,"title":167,"description":168},"\u002Fgolang\u002Fcore\u002Fgo-error","Go - 错误处理","Go 使用显式的错误返回值来处理错误，而不是异常机制。",{"path":170,"title":171,"description":11},"\u002Fgolang\u002Fcore\u002Fgo-function","Go - 函数",{"path":173,"title":174,"description":11},"\u002Fgolang\u002Fcore\u002Fgo-install","Go - 环境搭建",{"path":176,"title":177,"description":11},"\u002Fgolang\u002Fcore\u002Fgo-interface","Go - 接口",{"path":179,"title":180,"description":181},"\u002Fgolang\u002Fcore\u002Fgo-module","Go - 包管理","Go Modules 是 Go 1.11 引入的官方依赖管理方案，Go 1.16 后成为默认模式。",{"path":183,"title":184,"description":185},"\u002Fgolang\u002Fdistributed\u002Fgrpc","Go - gRPC","gRPC 是 Google 开发的高性能 RPC 框架，使用 Protocol Buffers 作为序列化协议。",{"path":187,"title":188,"description":189},"\u002Fgolang\u002Fdistributed\u002Fmicroservice","Go - 微服务","微服务架构的核心组件：服务发现、负载均衡、熔断降级。",{"path":191,"title":192,"description":193},"\u002Fgolang\u002Fdistributed\u002Fmq","Go - 消息队列","使用 Go 操作 Kafka 和 RabbitMQ。",{"path":195,"title":196,"description":197},"\u002Fgolang\u002Fdistributed\u002Fredis","Go - Redis","使用 go-redis 操作 Redis，实现缓存、分布式锁等功能。",{"path":199,"title":200,"description":201},"\u002Fgolang\u002Fengineering\u002Fconfig","Go - 配置管理","使用 viper 进行配置管理，支持多种配置格式和配置中心。",{"path":203,"title":204,"description":205},"\u002Fgolang\u002Fengineering\u002Fdocker","Go - Docker 部署","使用 Docker 容器化部署 Go 应用。",{"path":207,"title":208,"description":209},"\u002Fgolang\u002Fengineering\u002Fkubernetes","Go - Kubernetes 部署","在 Kubernetes 上部署和管理 Go 应用。",{"path":211,"title":212,"description":213},"\u002Fgolang\u002Fengineering\u002Flogging","Go - 日志系统","使用 zap 和 logrus 构建高性能结构化日志系统。",{"path":215,"title":216,"description":217},"\u002Fgolang\u002Fengineering\u002Ftesting","Go - 单元测试","Go 内置了强大的测试框架，掌握测试是编写高质量代码的基础。",{"path":219,"title":220,"description":221},"\u002Fgolang\u002Fstdlib\u002Fbufio","bufio","在 Go 语言中，bufio 包提供了带缓冲的 I\u002FO 操作，能够提高读写性能。以下是一些常用的 bufio 包 API 及其详细说明：",{"path":223,"title":224,"description":225},"\u002Fgolang\u002Fstdlib\u002Fcontainer","container","在Go语言标准库中，container 包提供了几种常用的数据结构实现，这些数据结构对于高效地管理和操作数据非常有用。以下是 container 包中主要的数据结构：",{"path":227,"title":228,"description":229},"\u002Fgolang\u002Fstdlib\u002Fcrypto","crypto","在 Go 语言中，crypto 包提供了一组用于加密和解密的功能。以下是一些常用的 crypto 包及其子包的 API 及其详细说明：",{"path":231,"title":232,"description":233},"\u002Fgolang\u002Fstdlib\u002Fencoding-csv","encoding\u002Fcsv","在 Go 语言中，encoding\u002Fcsv 包提供了对 CSV（逗号分隔值）文件进行读写的功能。以下是一些常用的 encoding\u002Fcsv 包的 API 及其详细说明：",{"path":235,"title":236,"description":237},"\u002Fgolang\u002Fstdlib\u002Fencoding-json","encoding\u002Fjson","在 Go 语言中，encoding\u002Fjson 包提供了对 JSON 数据进行编码和解码的功能。以下是一些常用的 encoding\u002Fjson 包的 API 及其详细说明：",{"path":239,"title":240,"description":241},"\u002Fgolang\u002Fstdlib\u002Fencoding-xml","encoding\u002Fxml","在 Go 语言中，encoding\u002Fxml 包提供了对 XML 数据进行编码和解码的功能。以下是一些常用的 encoding\u002Fxml 包的 API 及其详细说明：",{"path":243,"title":244,"description":245},"\u002Fgolang\u002Fstdlib\u002Fflag","flag","在Go语言中，flag 包是用于处理命令行参数的标准库，它提供了一种简单而直接的方式来解析和使用命令行参数。下面是关于 flag 包的一些基本介绍和常用功能：",{"path":247,"title":248,"description":249},"\u002Fgolang\u002Fstdlib\u002Ffmt","fmt","在 Go 语言的标准库中，fmt 包是非常重要的，它提供了处理格式化输入和输出的基本工具。以下是一些 fmt 包内常用的API：",{"path":251,"title":252,"description":253},"\u002Fgolang\u002Fstdlib\u002Fhttp","net\u002Fhttp","在 Go 语言中，net\u002Fhttp 包提供了用于构建 HTTP 客户端和服务器的强大工具。以下是一些常用的 net\u002Fhttp 包的 API 及其详细说明：",{"path":255,"title":256,"description":257},"\u002Fgolang\u002Fstdlib\u002Fio","io","在 Go 语言中，io 包提供了基本的输入输出功能。以下是一些常用的 io 包的 API 及其详细说明：",{"path":259,"title":260,"description":261},"\u002Fgolang\u002Fstdlib\u002Flog","log","在 Go 语言中，log 包提供了简单的日志记录功能。以下是一些常用的 log 包的 API 及其详细说明：",{"path":263,"title":264,"description":265},"\u002Fgolang\u002Fstdlib\u002Fmath","math","在 Go 语言中，math 包提供了基本的数学函数和常量。以下是一些常用的 math 包的 API 及其详细说明：",{"path":267,"title":268,"description":11},"\u002Fgolang\u002Fstdlib\u002Fnet","net",{"path":270,"title":271,"description":272},"\u002Fgolang\u002Fstdlib\u002Fos","os","在Go语言中，os 包是一个非常重要且常用的标准库，它提供了与操作系统交互的功能，包括文件操作、环境变量管理、进程管理等。下面是一些 os 包中常用的功能和API：",{"path":274,"title":275,"description":276},"\u002Fgolang\u002Fstdlib\u002Fsort","order","在 Go 语言中，sort 包提供了对切片和用户定义的集合进行排序的函数。它实现了常见的排序算法，如快速排序（Quicksort）和堆排序（Heapsort），并且为自定义集合提供了接口，使得用户可以根据特定的需求进行排序。",{"path":278,"title":279,"description":280},"\u002Fgolang\u002Fstdlib\u002Fstrconv","strconv","在 Go 语言中，strconv 包提供了字符串和基本数据类型之间的转换函数，例如将整数转换为字符串、字符串转换为整数，以及其他类型之间的转换。这些功能非常有用，特别是在处理用户输入或从外部数据源读取数据时。",{"path":282,"title":283,"description":284},"\u002Fgolang\u002Fstdlib\u002Ftime","time","在 Go 语言中，time 包提供了处理时间和日期的功能。以下是一些常用的 time 包的 API 及其详细说明：",{"path":286,"title":287,"description":11},"\u002Fgolang\u002Fweb\u002Fgin\u002Ferror","Gin - 错误处理",{"path":289,"title":290,"description":11},"\u002Fgolang\u002Fweb\u002Fgin\u002Ffile","Gin - 文件处理",{"path":292,"title":293,"description":11},"\u002Fgolang\u002Fweb\u002Fgin\u002Fmiddleware","Gin - 中间件",{"path":295,"title":296,"description":297},"\u002Fgolang\u002Fweb\u002Fgin\u002Fquickstart","Gin - 快速开始","Gin 是目前最流行的 Go Web 框架，以高性能和简洁 API 著称。",{"path":299,"title":300,"description":11},"\u002Fgolang\u002Fweb\u002Fgin\u002Frequest","Gin - 请求处理",{"path":302,"title":303,"description":11},"\u002Fgolang\u002Fweb\u002Fgin\u002Fresponse","Gin - 响应处理",{"path":305,"title":306,"description":11},"\u002Fgolang\u002Fweb\u002Fgin\u002Frouter","Gin - 路由",{"path":308,"title":309,"description":11},"\u002Fgolang\u002Fweb\u002Fgin\u002Fvalidation","Gin - 参数校验",{"path":311,"title":312,"description":11},"\u002Fgolang\u002Fweb\u002Fgorm\u002Fassociation","GORM - 关联关系",{"path":314,"title":315,"description":11},"\u002Fgolang\u002Fweb\u002Fgorm\u002Fcrud","GORM - CRUD 操作",{"path":317,"title":318,"description":11},"\u002Fgolang\u002Fweb\u002Fgorm\u002Fmodel","GORM - 模型定义",{"path":320,"title":321,"description":11},"\u002Fgolang\u002Fweb\u002Fgorm\u002Fperformance","GORM - 日志与性能",{"path":323,"title":324,"description":11},"\u002Fgolang\u002Fweb\u002Fgorm\u002Fquery","GORM - 高级查询",{"path":326,"title":327,"description":328},"\u002Fgolang\u002Fweb\u002Fgorm\u002Fquickstart","GORM - 快速开始","GORM 是 Go 语言最流行的 ORM 库，功能强大，使用简单。",{"path":330,"title":331,"description":11},"\u002Fgolang\u002Fweb\u002Fgorm\u002Ftransaction","GORM - 事务与 Hook",{"path":333,"title":334,"description":335},"\u002Finterview\u002Fbasic","计算机基础面经","本章节汇总了面试中常见的通用技术概念，不局限于特定语言或数据库，是考察技术内功的关键考点。",{"path":337,"title":338,"description":339},"\u002Finterview\u002Fgolang","Golang 面试题","Go 语言面试高频考点，覆盖基础语法、数据结构、并发编程、内存管理、GC、调度器等核心知识。",{"path":341,"title":342,"description":343},"\u002Finterview\u002Fk8s","Kubernetes 面试题","Kubernetes（K8s）面试高频考点，覆盖架构原理、核心资源、网络存储、调度策略、运维监控等核心知识。",{"path":345,"title":346,"description":347},"\u002Finterview\u002Fmysql","MySQL 面试题","MySQL 数据库面试高频考点，覆盖索引、事务、锁、优化、主从复制等核心知识。",{"path":349,"title":350,"description":351},"\u002Finterview\u002Fredis","Redis 面试题","Redis 面试高频考点，覆盖数据结构、持久化、集群、缓存一致性、性能优化等核心知识。",{"path":353,"title":354,"description":355},"\u002Finterview\u002Frocketmq","RocketMQ 面试题","RocketMQ 面试高频考点，覆盖消息模型、可靠性、顺序消息、事务消息、存储与高可用等核心知识。",{"path":357,"title":358,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Flist-arraylist","List - ArrayList 源码解析",{"path":360,"title":361,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Flist-linkedlist","List - LinkedList 源码解析",{"path":363,"title":364,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Flist-stack","List - Satck源码解析",{"path":366,"title":367,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Flist-vectore","List - Vector 源码解析",{"path":369,"title":370,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Fmap-hashmap","Map - HashMap 源码解析",{"path":372,"title":373,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Fmap-linkedhashmap","Map - LinkedHashMap 源码解析",{"path":375,"title":376,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Fmap-treemap","Map - TreeMap 源码解析",{"path":378,"title":379,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Fqueue-deque","Queue - Deque 接口解析",{"path":381,"title":382,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Fqueue-queue","Queue - Queue 接口解析",{"path":384,"title":385,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Fset-hashset","Set - HashSet源码解析",{"path":387,"title":388,"description":11},"\u002Fother\u002Fjava\u002Fcollection\u002Fset-linkedhashset","Set - LinkedHashSet 源码解析",{"path":390,"title":391,"description":392},"\u002Fother\u002Fjava\u002Fcollection\u002Fset-treeset","Set - TreeSet源码解析","TreeSet 是一个 Set 集合接口的实现类，与 HashSet 类似，其底层也是通过维护了一个 TreeMap 对象来封装了一些实现方法，故本篇不再对 TreeSet 的底层原理进行详细说明，仅对常用 API 做简单介绍，如需了解 TreeMap 的底层实现原理，请移步 Map - HashMap 源码解析",{"path":394,"title":395,"description":11},"\u002Fother\u002Fjava\u002Fcore\u002Fannotation","Java核心 - 注解",{"path":397,"title":398,"description":11},"\u002Fother\u002Fjava\u002Fcore\u002Fbasic-grammar","Java核心 - 基础语法",{"path":400,"title":401,"description":11},"\u002Fother\u002Fjava\u002Fcore\u002Fclass-and-object","Java核心 - 面向对象",{"path":403,"title":404,"description":11},"\u002Fother\u002Fjava\u002Fcore\u002Fcommon-classes","Java核心 - 常用类",{"path":406,"title":407,"description":11},"\u002Fother\u002Fjava\u002Fcore\u002Fexception","Java核心 - 异常处理",{"path":409,"title":410,"description":11},"\u002Fother\u002Fjava\u002Fcore\u002Fgenerics","Java核心 - 泛型",{"path":412,"title":413,"description":11},"\u002Fother\u002Fjava\u002Fcore\u002Fjdk-env-path","Java核心 - 环境搭建",{"path":415,"title":416,"description":11},"\u002Fother\u002Fjava\u002Fcore\u002Freflection","Java核心 - 反射",{"path":418,"title":419,"description":11},"\u002Fother\u002Fjava\u002Fcore\u002Fstring","Java核心 - String 字符串",{"path":421,"title":422,"description":423},"\u002Fother\u002Fjava\u002Fio\u002Fbuffer-stream","Java IO - 缓冲流","缓冲流是对基本流的包装，通过内置缓冲区减少系统调用次数，大幅提升读写效率。",{"path":425,"title":426,"description":427},"\u002Fother\u002Fjava\u002Fio\u002Fbyte-stream","Java IO - 字节流","字节流是 Java IO 中最基本的流类型，以字节（byte）为单位进行数据读写，可以处理任意类型的文件。",{"path":429,"title":430,"description":431},"\u002Fother\u002Fjava\u002Fio\u002Fchar-stream","Java IO - 字符流","字符流以字符为单位进行读写，专门用于处理文本文件。相比字节流，字符流能够正确处理字符编码，避免中文乱码问题。",{"path":433,"title":434,"description":11},"\u002Fother\u002Fjava\u002Fio\u002Ffile","Java IO - File 类",{"path":436,"title":437,"description":11},"\u002Fother\u002Fjava\u002Fio\u002Fio-stream-system","Java IO - IO流概述",{"path":439,"title":440,"description":441},"\u002Fother\u002Fjava\u002Fio\u002Fnio","Java IO - NIO","NIO（New IO）是 JDK 1.4 引入的新 IO 模型，提供了更高效的 IO 操作方式，支持非阻塞 IO 和多路复用。",{"path":443,"title":444,"description":445},"\u002Fother\u002Fjava\u002Fjvm\u002Fclass-loading","类加载机制","类加载机制是 JVM 将 .class 文件加载到内存，并对数据进行校验、转换解析和初始化，最终形成可被 JVM 直接使用的 Java 类型的过程。",{"path":447,"title":448,"description":449},"\u002Fother\u002Fjava\u002Fjvm\u002Fgarbage-collection","垃圾回收","垃圾回收（Garbage Collection，GC）是 JVM 自动管理内存的机制，负责回收不再使用的对象所占用的内存。",{"path":451,"title":452,"description":453},"\u002Fother\u002Fjava\u002Fjvm\u002Fjvm-memory","JVM 内存结构","JVM 在执行 Java 程序时，会把它管理的内存划分为若干个不同的数据区域。这些区域有各自的用途、创建和销毁时间。",{"path":455,"title":456,"description":457},"\u002Fother\u002Fjava\u002Fjvm\u002Fjvm-tuning","JVM 调优","JVM 调优是优化 Java 应用性能的重要手段，主要包括参数配置、性能监控和问题排查。",{"path":459,"title":460,"description":461},"\u002Fother\u002Fjava\u002Fthread\u002Fatomic","原子类","Java 原子类（Atomic Classes）提供了一种无锁的线程安全方式，基于 CAS（Compare-And-Swap）操作实现。",{"path":463,"title":464,"description":465},"\u002Fother\u002Fjava\u002Fthread\u002Fcompletable-future","CompletableFuture","CompletableFuture 是 JDK 8 引入的异步编程工具，实现了 Future 和 CompletionStage 接口，支持函数式编程和链式调用。",{"path":467,"title":468,"description":469},"\u002Fother\u002Fjava\u002Fthread\u002Fconcurrent-collections","并发集合","Java 并发包提供了多种线程安全的集合类，用于替代传统的同步集合（如 Collections.synchronizedList）。",{"path":471,"title":472,"description":473},"\u002Fother\u002Fjava\u002Fthread\u002Fconcurrent-utils","并发工具类","Java 并发包提供了多种实用的并发工具类，用于控制线程之间的协调与同步。",{"path":475,"title":476,"description":11},"\u002Fother\u002Fjava\u002Fthread\u002Fsynchronized-lock","同步机制",{"path":478,"title":479,"description":11},"\u002Fother\u002Fjava\u002Fthread\u002Fthread-basic","线程基础",{"path":481,"title":482,"description":11},"\u002Fother\u002Fjava\u002Fthread\u002Fthread-pool","线程池",{"path":484,"title":485,"description":486},"\u002Fother\u002Fspring-series\u002Fspring\u002Fannotations-beans","Spring - 基于注解管理Bean","从 Java 5 开始，Java 增加了对注解（Annotation）的支持，它是代码中的一种特殊标记，可以在编译、类加载和运行时被读取，执行相应的处理。开发人员可以通过注解在不改变原有代码和逻辑的情况下，在源代码中嵌入补充信息。",{"path":488,"title":489,"description":490},"\u002Fother\u002Fspring-series\u002Fspring\u002Fimplement-ioc","Spring - 原理手写IoC","Spring 框架的 IOC 是基于 Java 反射机制实现的，在学习手写 IoC 之前，你需要具备一定的 Java 反射相关的知识，参考本站内的 Java 教程。",{"path":492,"title":493,"description":11},"\u002Fother\u002Fspring-series\u002Fspring\u002Fintroduction-case","Spring - 入门案例",{"path":495,"title":496,"description":11},"\u002Fother\u002Fspring-series\u002Fspring\u002Fspring-aop","Spring - 面向切面AOP",{"path":498,"title":499,"description":11},"\u002Fother\u002Fspring-series\u002Fspring\u002Fspring-aot","Spring - AOT提前编译",{"path":501,"title":502,"description":503},"\u002Fother\u002Fspring-series\u002Fspring\u002Fspring-data-validation","Spring - 数据校验","在开发中，我们经常遇到参数校验的需求，比如用户注册的时候，要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式，我们会把校验的代码和真正的业务处理逻辑耦合在一起，而且如果未来要新增一种校验逻辑也需要在修改多个地方。而spring validation允许通过注解的方式来定义对象校验规则，把校验和业务逻辑分离开，让代码编写更加方便。Spring Validation其实就是对Hibernate Validator进一步的封装，方便在Spring中使用。",{"path":505,"title":506,"description":11},"\u002Fother\u002Fspring-series\u002Fspring\u002Fspring-i18n","Spring - 国际化i18n",{"path":508,"title":509,"description":510},"\u002Fother\u002Fspring-series\u002Fspring\u002Fspring-ioc","Spring - IOC容器","IoC 是 Inversion of Control 的简写，译为“控制反转”，它不是一门技术，而是一种设计思想，是一个重要的面向对象编程法则，能够指导我们如何设计出松耦合、更优良的程序。",{"path":512,"title":513,"description":514},"\u002Fother\u002Fspring-series\u002Fspring\u002Fspring-junit","Spring - 单元测试JUnit","在之前的测试方法中，几乎都能看到以下的两行代码：",{"path":516,"title":517,"description":11},"\u002Fother\u002Fspring-series\u002Fspring\u002Fspring-resources","Spring - 资源操作",{"path":519,"title":520,"description":11},"\u002Fother\u002Fspring-series\u002Fspring\u002Fspring-summarize","Spring - Spring概述",{"path":522,"title":523,"description":11},"\u002Fother\u002Fspring-series\u002Fspring\u002Fspring-transaction","Spring - 事务",{"path":525,"title":526,"description":11},"\u002Fother\u002Fspring-series\u002Fspring\u002Fxml-beans","Spring - 基于XML管理Bean",{"path":528,"title":529,"description":11},"\u002Fother\u002Fspring-series\u002Fspringboot\u002Fspringboot-config","SpringBoot - 配置详解",{"path":531,"title":532,"description":11},"\u002Fother\u002Fspring-series\u002Fspringboot\u002Fspringboot-data","SpringBoot - 数据访问",{"path":534,"title":535,"description":11},"\u002Fother\u002Fspring-series\u002Fspringboot\u002Fspringboot-quickstart","SpringBoot - 快速入门",{"path":537,"title":538,"description":11},"\u002Fother\u002Fspring-series\u002Fspringboot\u002Fspringboot-web","SpringBoot - Web 开发",{"path":540,"title":541,"description":11},"\u002Fother\u002Fspring-series\u002Fspringcloud\u002Fspringcloud-config","SpringCloud - 配置中心",{"path":543,"title":544,"description":11},"\u002Fother\u002Fspring-series\u002Fspringcloud\u002Fspringcloud-discovery","SpringCloud - 服务注册与发现",{"path":546,"title":547,"description":11},"\u002Fother\u002Fspring-series\u002Fspringcloud\u002Fspringcloud-feign","SpringCloud - 服务调用",{"path":549,"title":550,"description":11},"\u002Fother\u002Fspring-series\u002Fspringcloud\u002Fspringcloud-gateway","SpringCloud - 服务网关",{"path":552,"title":553,"description":11},"\u002Fother\u002Fspring-series\u002Fspringcloud\u002Fspringcloud-introduction","SpringCloud - 微服务概述",{"path":555,"title":556,"description":11},"\u002Fother\u002Fspring-series\u002Fspringcloud\u002Fspringcloud-sentinel","SpringCloud - 服务保护",{"path":558,"title":559,"description":11},"\u002Fother\u002Fspring-series\u002Fspringmvc\u002Fspringmvc-databind","SpringMVC - 数据绑定与转换",{"path":561,"title":562,"description":11},"\u002Fother\u002Fspring-series\u002Fspringmvc\u002Fspringmvc-exception","SpringMVC - 异常处理",{"path":564,"title":565,"description":11},"\u002Fother\u002Fspring-series\u002Fspringmvc\u002Fspringmvc-interceptor","SpringMVC - 拦截器",{"path":567,"title":568,"description":11},"\u002Fother\u002Fspring-series\u002Fspringmvc\u002Fspringmvc-introduction","SpringMVC - 简介与环境搭建",{"path":570,"title":571,"description":11},"\u002Fother\u002Fspring-series\u002Fspringmvc\u002Fspringmvc-request","SpringMVC - 请求处理",{"path":573,"title":574,"description":11},"\u002Fother\u002Fspring-series\u002Fspringmvc\u002Fspringmvc-response","SpringMVC - 响应处理",{"path":576,"title":577,"description":578},"\u002Fproject\u002Frocket-leaf\u002Farchitecture","项目架构","Rocket-Leaf 的目录结构、模块划分、数据流向，以及各层之间的依赖关系。",{"path":580,"title":581,"description":582},"\u002Fproject\u002Frocket-leaf\u002Fbackend-layers","后端分层设计","Rocket-Leaf 的 model \u002F rocketmq \u002F service 三层结构，以及服务之间的依赖关系与设计取舍。",{"path":584,"title":585,"description":586},"\u002Fproject\u002Frocket-leaf\u002Fclient-manager","RocketMQ 客户端管理器","AdminClientManager 的多客户端池、默认连接懒加载、自动重连重试的设计与实现。",{"path":588,"title":589,"description":590},"\u002Fproject\u002Frocket-leaf\u002Fencryption","连接信息加密存储","AES-256-GCM + SHA-256 字段级派生密钥的实现，以及如何在不破坏兼容性的前提下为历史明文数据做透明迁移。",{"path":592,"title":593,"description":594},"\u002Fproject\u002Frocket-leaf\u002Ffrontend","前端结构与类型绑定","React + Vite 目录组织、自动生成的 Wails 绑定、api 薄封装与自定义 hooks 的职责划分。",{"path":596,"title":597,"description":598},"\u002Fproject\u002Frocket-leaf","项目简介","Rocket-Leaf 是一款基于 Wails v3 构建的跨平台 RocketMQ 桌面管理客户端，Go 后端 + React 前端。本文档系列拆解它的架构与关键实现。",{"path":600,"title":601,"description":602},"\u002Fproject\u002Frocket-leaf\u002Fwails-v3","Wails v3 入门","Wails v3 的核心概念、Service 绑定机制，以及 Rocket-Leaf 是如何用它把 Go 后端和 React 前端打通的。",{"path":604,"title":605,"description":11},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-basic","Docker - 入门基础",{"path":607,"title":608,"description":609},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-compose","Docker - Compose","在部署应用时，常常使用到不止一个容器，那么在部署容器的时候就需要一个一个进行部署，这样的部署过程也相对来说比较繁琐复杂，也容易出问题，那么有没有一种更为简单的方法呢？",{"path":611,"title":612,"description":613},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-container-connection","Docker - 容器互联","在上一个章节中我们学习了 Docker 容器的端口映射，可以将 Docker 容器和本地以及网络中的端口进行连接起来。",{"path":615,"title":616,"description":11},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-dockerfile","Docker - Dockerfile",{"path":618,"title":619,"description":11},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-helloworld","Docker - HelloWorld",{"path":621,"title":622,"description":11},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-install","Docker - 安装",{"path":624,"title":625,"description":11},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-introduce","Docker - 简介",{"path":627,"title":628,"description":11},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-object","Docker - 镜像、容器、仓库",{"path":630,"title":631,"description":632},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-warehouse","Docker - 仓库管理","仓库是集中存放资源的地方，代码仓库是存放代码的，那么Docker 中的仓库就是存放 Docker 镜像的。",{"path":634,"title":635,"description":636},"\u002Ftutorials\u002Fcloud\u002Fdocker\u002Fdocker-web-containers","Docker - WEB应用实例","在之前的章节中，仅对普通容器进行了演示，但在实际中常常使用到 Docker 容器中的 WEB 应用程序。",{"path":638,"title":639,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-config","Kubernetes - ConfigMap 与 Secret",{"path":641,"title":642,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-helm","Kubernetes - Helm 包管理",{"path":644,"title":645,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-install","Kubernetes - 集群安装",{"path":647,"title":648,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-introduction","Kubernetes - 简介与架构",{"path":650,"title":651,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-kubectl","Kubernetes - kubectl 命令行工具",{"path":653,"title":654,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-monitoring","Kubernetes - 监控与日志",{"path":656,"title":657,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-network-security","Kubernetes - 网络与安全",{"path":659,"title":660,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-service","Kubernetes - Service 与 Ingress",{"path":662,"title":663,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-storage","Kubernetes - 持久化存储",{"path":665,"title":666,"description":11},"\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-workload","Kubernetes - 工作负载资源",{"path":668,"title":669,"description":11},"\u002Ftutorials\u002Fcloud\u002Flinux\u002Flinux-bash","Linux - Bash 基础语法",{"path":671,"title":672,"description":11},"\u002Ftutorials\u002Fcloud\u002Flinux\u002Flinux-file-directory","Linux - 文件与目录操作",{"path":674,"title":675,"description":11},"\u002Ftutorials\u002Fcloud\u002Flinux\u002Flinux-network","Linux - 网络配置",{"path":677,"title":678,"description":11},"\u002Ftutorials\u002Fcloud\u002Flinux\u002Flinux-package","Linux - 软件包管理",{"path":680,"title":681,"description":11},"\u002Ftutorials\u002Fcloud\u002Flinux\u002Flinux-process","Linux - 进程管理",{"path":683,"title":684,"description":11},"\u002Ftutorials\u002Fcloud\u002Flinux\u002Flinux-scripts","Linux - 常用脚本示例",{"path":686,"title":687,"description":11},"\u002Ftutorials\u002Fcloud\u002Flinux\u002Flinux-service","Linux - 服务管理",{"path":689,"title":690,"description":11},"\u002Ftutorials\u002Fcloud\u002Flinux\u002Flinux-user-permission","Linux - 用户与权限管理",{"path":692,"title":693,"description":11},"\u002Ftutorials\u002Fcloud\u002Fnginx\u002Fnginx-https","Nginx - HTTPS 配置",{"path":695,"title":696,"description":11},"\u002Ftutorials\u002Fcloud\u002Fnginx\u002Fnginx-install","Nginx - 安装与配置",{"path":698,"title":699,"description":11},"\u002Ftutorials\u002Fcloud\u002Fnginx\u002Fnginx-loadbalance","Nginx - 负载均衡",{"path":701,"title":702,"description":11},"\u002Ftutorials\u002Fcloud\u002Fnginx\u002Fnginx-optimization","Nginx - 性能优化",{"path":704,"title":705,"description":11},"\u002Ftutorials\u002Fcloud\u002Fnginx\u002Fnginx-proxy","Nginx - 反向代理",{"path":707,"title":708,"description":11},"\u002Ftutorials\u002Fcloud\u002Fnginx\u002Fnginx-static","Nginx - 静态资源服务",{"path":710,"title":711,"description":11},"\u002Ftutorials\u002Fcloud\u002Fnginx\u002Fnginx-vhost","Nginx - 虚拟主机配置",{"path":713,"title":714,"description":715},"\u002Ftutorials\u002Fdatabase\u002Fmysql\u002Fmysql-architecture","MySQL 高可用架构","主从复制、读写分离、分库分表。",{"path":717,"title":718,"description":719},"\u002Ftutorials\u002Fdatabase\u002Fmysql\u002Fmysql-index","MySQL 索引","索引是帮助 MySQL 高效获取数据的有序数据结构。",{"path":721,"title":722,"description":723},"\u002Ftutorials\u002Fdatabase\u002Fmysql\u002Fmysql-lock","MySQL 锁","锁用于解决并发访问时的数据一致性问题。",{"path":725,"title":726,"description":727},"\u002Ftutorials\u002Fdatabase\u002Fmysql\u002Fmysql-optimize","MySQL 性能优化","SQL 优化是后端开发必备技能。",{"path":729,"title":730,"description":731},"\u002Ftutorials\u002Fdatabase\u002Fmysql\u002Fmysql-transaction","MySQL 事务","事务是一组不可分割的操作，要么全部成功，要么全部失败。",{"path":733,"title":734,"description":735},"\u002Ftutorials\u002Fdatabase\u002Fmysql\u002Fsql-advanced","SQL 进阶","多表查询、子查询、函数、视图、存储过程。",{"path":737,"title":738,"description":739},"\u002Ftutorials\u002Fdatabase\u002Fmysql\u002Fsql-basic","SQL 基础","SQL（Structured Query Language）是操作关系型数据库的标准语言。",{"path":741,"title":742,"description":743},"\u002Ftutorials\u002Fdatabase\u002Fredis\u002Fredis-advanced","Redis 进阶功能","事务、发布订阅、Lua 脚本、Pipeline。",{"path":745,"title":746,"description":747},"\u002Ftutorials\u002Fdatabase\u002Fredis\u002Fredis-basic","Redis 基础","Redis 安装配置与基本命令。",{"path":749,"title":750,"description":751},"\u002Ftutorials\u002Fdatabase\u002Fredis\u002Fredis-cluster","Redis 高可用","主从复制、哨兵、Cluster 集群。",{"path":753,"title":754,"description":755},"\u002Ftutorials\u002Fdatabase\u002Fredis\u002Fredis-datatype","Redis 数据类型","Redis 5 种基本数据类型 + 4 种特殊类型。",{"path":757,"title":758,"description":759},"\u002Ftutorials\u002Fdatabase\u002Fredis\u002Fredis-optimize","Redis 性能优化","内存优化、缓存问题、最佳实践。",{"path":761,"title":762,"description":763},"\u002Ftutorials\u002Fdatabase\u002Fredis\u002Fredis-persistence","Redis 持久化","Redis 提供 RDB 和 AOF 两种持久化方式。",{"path":765,"title":766,"description":767},"\u002Ftutorials\u002Fdatabase\u002Fredis\u002Fredis-principle","Redis 底层原理","数据结构、线程模型、网络模型。",{"path":769,"title":770,"description":771},"\u002Ftutorials\u002Fdev-idea\u002Fdesign-patterns\u002Fbehaiver-patterns\u002Fobserver-pattern","观察者模式","观察者模式属于行为型模式，定义了对象之间的一对多的依赖关系，在这种模式中，当一个对象的状态发生变化时，所有依赖于它的对象都会得到通知，并且执行相关操作。观察者模式又被成为“发布—订阅模式”，即发布者发生改变后，会通知所有订阅者。",{"path":773,"title":774,"description":11},"\u002Ftutorials\u002Fdev-idea\u002Fdesign-patterns\u002Fcreate-patterns\u002Ffactory-pattern","工厂模式",{"path":776,"title":777,"description":778},"\u002Ftutorials\u002Fdev-idea\u002Fdesign-patterns\u002Fcreate-patterns\u002Fsingleton-pattern","单例模式","单例模式是最常用的设计模式之一，他可以保证在整个应用中，某个类只存在一个实例化对象，即全局使用到该类的只有一个对象，这种模式在需要限制某些类的实例数量时非常有用，通常全局只需要一个该对象即可，如一些配置文件映射对象、数据库连接对象等。",{"path":780,"title":781,"description":782},"\u002Ftutorials\u002Fdev-idea\u002Fdesign-patterns\u002Fstructural-patterns\u002Fadapter-pattern","适配器模式","适配器模式是一种结构型模式，可以将一个类的接口转换成客户端所期望的另一种接口，适配器模式可以帮助开发人员在不修改现有代码的情况下，将不兼容的类组合在一起。",{"path":784,"title":785,"description":786},"\u002Ftutorials\u002Fdev-tools\u002Fgit\u002Fgit-basic-operations","Git 创建版本库","在 Git 上创建版本库有两种方式，一种是直接拷贝远程 Git 仓库到本地，另外一种是我们自己创建本地的版本库。",{"path":788,"title":789,"description":11},"\u002Ftutorials\u002Fdev-tools\u002Fgit\u002Fgit-branch-manage","Git 分支管理",{"path":791,"title":792,"description":11},"\u002Ftutorials\u002Fdev-tools\u002Fgit\u002Fgit-content-operations","Git 仓库内容操作",{"path":794,"title":795,"description":11},"\u002Ftutorials\u002Fdev-tools\u002Fgit\u002Fgit-introduce-install","Git 介绍和安装",{"path":797,"title":798,"description":11},"\u002Ftutorials\u002Fdev-tools\u002Fgit\u002Fgit-remote-manage","Git 远程管理",{"path":800,"title":801,"description":11},"\u002Ftutorials\u002Fdev-tools\u002Fgit\u002Fgit-workspace-index-repo","Git 工作原理",{"path":803,"title":804,"description":11},"\u002Ftutorials\u002Fdev-tools\u002Fhomebrew","HomeBrew 教程",{"path":806,"title":807,"description":11},"\u002Ftutorials\u002Fdev-tools\u002Fidea\u002Fshortcuts","快捷键",{"path":809,"title":810,"description":11},"\u002Ftutorials\u002Fdev-tools\u002Fmaven\u002Fintroduce-install-config","Maven - 介绍、安装、配置",{"path":812,"title":813,"description":11},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Fbasic-knowledge","2. 基础知识",{"path":815,"title":816,"description":817},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Fcomponent-communication","9. 组件通信","在前面的章节内，介绍了 Vue 中最核心的内容——组件的介绍和使用，和 Java 等编程语言相反，组件并不近似于这些变成语言中的类，类可以通过类或者其实例化的对象来相互交互，但 Vue 组件之间的作用域是相互独立的，这就意味着不同组件之间的数据无法相互引用。",{"path":819,"title":820,"description":821},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Fcomputed","4. 计算属性","虽然直接在模板中使用表达式方便，但是如果在模板中添加很多逻辑，会让模板变的臃肿且难维护，耦合度较高。有没有一种简单的方式来实现呢？答案是有的。",{"path":823,"title":824,"description":11},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Fcreate-vue-project","1. 环境搭建及安装",{"path":826,"title":827,"description":828},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Flife-cycle","6. 生命周期","生命周期是指组件从创建、挂载、更新到销毁的整个过程中所经历的一系列阶段。在 Vue 中，每个组件都有自己的生命周期，可以通过生命周期钩子函数来监听和处理组件在不同阶段的行为和状态。",{"path":830,"title":831,"description":11},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Fother-api","10. 其他 API",{"path":833,"title":834,"description":11},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Fpinia","8. Pinia",{"path":836,"title":837,"description":11},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Frouter","7. 路由",{"path":839,"title":840,"description":11},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Ftemplate-grammar","3. 指令及模板语法",{"path":842,"title":843,"description":11},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Fvue3-new-component","11. Vue3 新组件",{"path":845,"title":846,"description":847},"\u002Ftutorials\u002Ffront-end\u002Fvue3\u002Fwatch","5. 监视","Watch 是 Vue 提供的一个用于监视响应式数据变化并执行相应操作的 API，能够对响应式数据的变化做出一些操作的功能。Vue3 中的 Watch 支持多种用法，包括监视响应式对象、ref 对象、数组、函数等。",{"path":849,"title":850,"description":11},"\u002Ftutorials\u002Fmq\u002Fkafka\u002Fkafka-introduction","Kafka 简介与安装",{"path":852,"title":853,"description":11},"\u002Ftutorials\u002Fmq\u002Fkafka\u002Fkafka-producer-consumer","Kafka 生产者与消费者",{"path":855,"title":856,"description":857},"\u002Ftutorials\u002Fmq\u002Fkafka\u002Fkafka-springboot","Spring Boot 整合 Kafka","Spring Kafka 提供了对 Apache Kafka 的便捷集成。",{"path":859,"title":860,"description":861},"\u002Ftutorials\u002Fmq\u002Frabbitmq\u002Frabbitmq-exchange","RabbitMQ Exchange 详解","Exchange（交换机）是 RabbitMQ 的核心组件，负责接收生产者发送的消息，并根据规则将消息路由到一个或多个队列。",{"path":863,"title":864,"description":11},"\u002Ftutorials\u002Fmq\u002Frabbitmq\u002Frabbitmq-introduction","RabbitMQ 简介与安装",{"path":866,"title":867,"description":868},"\u002Ftutorials\u002Fmq\u002Frabbitmq\u002Frabbitmq-reliability","RabbitMQ 消息可靠性","消息可靠性是消息队列的核心要求，RabbitMQ 提供了多种机制来保证消息不丢失。",{"path":870,"title":871,"description":872},"\u002Ftutorials\u002Fmq\u002Frabbitmq\u002Frabbitmq-springboot","Spring Boot 整合 RabbitMQ","Spring AMQP 提供了对 RabbitMQ 的便捷集成，大大简化了开发工作。",{"path":874,"title":875,"description":11},"\u002Ftutorials\u002Fmq\u002Frocketmq\u002Frocketmq-client","RocketMQ 客户端使用",{"path":877,"title":878,"description":11},"\u002Ftutorials\u002Fmq\u002Frocketmq\u002Frocketmq-concepts","RocketMQ 核心概念",{"path":880,"title":881,"description":11},"\u002Ftutorials\u002Fmq\u002Frocketmq\u002Frocketmq-installation","RocketMQ 安装部署",{"path":883,"title":884,"description":885},"\u002Ftutorials\u002Fmq\u002Frocketmq\u002Frocketmq-message-type","RocketMQ 消息类型","RocketMQ 支持多种消息类型，满足不同业务场景需求。",{"id":887,"title":666,"body":888,"description":11,"extension":4084,"meta":4085,"navigation":2229,"path":665,"seo":4086,"stem":4087,"__hash__":4088},"docs\u002Ftutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-workload.md",{"type":889,"value":890,"toc":4045},"minimark",[891,895,899,940,943,946,951,965,969,1297,1301,1530,1534,1543,1548,1565,1569,1572,1725,1728,1731,1735,1908,1912,1918,1923,1926,1929,1933,2193,2197,2255,2259,2333,2336,2390,2395,2401,2405,2492,2495,2575,2578,2581,2585,2599,2603,2929,2933,2939,2943,2946,3042,3045,3048,3051,3062,3066,3397,3400,3403,3443,3447,3451,3454,3620,3624,3737,3741,3744,3914,3919,3925,3928,4036,4041],[892,893,894],"h2",{"id":894},"概述",[896,897,898],"p",{},"工作负载（Workload）是在 Kubernetes 上运行的应用程序。Kubernetes 提供了多种内置的工作负载资源来管理 Pod：",[900,901,902,910,916,922,928,934],"ul",{},[903,904,905,909],"li",{},[906,907,908],"strong",{},"Pod","：最小部署单元",[903,911,912,915],{},[906,913,914],{},"ReplicaSet","：维护 Pod 副本数量",[903,917,918,921],{},[906,919,920],{},"Deployment","：声明式更新 Pod 和 ReplicaSet",[903,923,924,927],{},[906,925,926],{},"StatefulSet","：管理有状态应用",[903,929,930,933],{},[906,931,932],{},"DaemonSet","：确保所有节点运行指定 Pod",[903,935,936,939],{},[906,937,938],{},"Job\u002FCronJob","：运行一次性或定时任务",[892,941,908],{"id":942},"pod",[896,944,945],{},"Pod 是 Kubernetes 中最小的可部署单元，代表集群中运行的一个进程。",[947,948,950],"h3",{"id":949},"pod-的特点","Pod 的特点",[900,952,953,956,959,962],{},[903,954,955],{},"一个 Pod 可以包含一个或多个容器",[903,957,958],{},"Pod 中的容器共享网络命名空间（IP 和端口）",[903,960,961],{},"Pod 中的容器共享存储卷",[903,963,964],{},"Pod 是短暂的，可能随时被终止和替换",[947,966,968],{"id":967},"pod-定义示例","Pod 定义示例",[970,971,975],"pre",{"className":972,"code":973,"language":974,"meta":11,"style":11},"language-yaml shiki shiki-themes github-light github-light github-dark","apiVersion: v1\nkind: Pod\nmetadata:\n  name: nginx-pod\n  labels:\n    app: nginx\n    env: production\nspec:\n  containers:\n  - name: nginx\n    image: nginx:1.21\n    ports:\n    - containerPort: 80\n    resources:\n      requests:\n        memory: \"64Mi\"\n        cpu: \"250m\"\n      limits:\n        memory: \"128Mi\"\n        cpu: \"500m\"\n    livenessProbe:\n      httpGet:\n        path: \u002F\n        port: 80\n      initialDelaySeconds: 15\n      periodSeconds: 20\n    readinessProbe:\n      httpGet:\n        path: \u002F\n        port: 80\n      initialDelaySeconds: 5\n      periodSeconds: 10\n","yaml",[976,977,978,995,1006,1015,1026,1034,1045,1056,1064,1072,1085,1096,1104,1119,1127,1135,1146,1157,1165,1175,1185,1193,1201,1212,1222,1233,1244,1252,1259,1268,1277,1287],"code",{"__ignoreMap":11},[979,980,983,987,991],"span",{"class":981,"line":982},"line",1,[979,984,986],{"class":985},"sovSZ","apiVersion",[979,988,990],{"class":989},"sxrX7",": ",[979,992,994],{"class":993},"sIIMD","v1\n",[979,996,998,1001,1003],{"class":981,"line":997},2,[979,999,1000],{"class":985},"kind",[979,1002,990],{"class":989},[979,1004,1005],{"class":993},"Pod\n",[979,1007,1009,1012],{"class":981,"line":1008},3,[979,1010,1011],{"class":985},"metadata",[979,1013,1014],{"class":989},":\n",[979,1016,1018,1021,1023],{"class":981,"line":1017},4,[979,1019,1020],{"class":985},"  name",[979,1022,990],{"class":989},[979,1024,1025],{"class":993},"nginx-pod\n",[979,1027,1029,1032],{"class":981,"line":1028},5,[979,1030,1031],{"class":985},"  labels",[979,1033,1014],{"class":989},[979,1035,1037,1040,1042],{"class":981,"line":1036},6,[979,1038,1039],{"class":985},"    app",[979,1041,990],{"class":989},[979,1043,1044],{"class":993},"nginx\n",[979,1046,1048,1051,1053],{"class":981,"line":1047},7,[979,1049,1050],{"class":985},"    env",[979,1052,990],{"class":989},[979,1054,1055],{"class":993},"production\n",[979,1057,1059,1062],{"class":981,"line":1058},8,[979,1060,1061],{"class":985},"spec",[979,1063,1014],{"class":989},[979,1065,1067,1070],{"class":981,"line":1066},9,[979,1068,1069],{"class":985},"  containers",[979,1071,1014],{"class":989},[979,1073,1075,1078,1081,1083],{"class":981,"line":1074},10,[979,1076,1077],{"class":989},"  - ",[979,1079,1080],{"class":985},"name",[979,1082,990],{"class":989},[979,1084,1044],{"class":993},[979,1086,1088,1091,1093],{"class":981,"line":1087},11,[979,1089,1090],{"class":985},"    image",[979,1092,990],{"class":989},[979,1094,1095],{"class":993},"nginx:1.21\n",[979,1097,1099,1102],{"class":981,"line":1098},12,[979,1100,1101],{"class":985},"    ports",[979,1103,1014],{"class":989},[979,1105,1107,1110,1113,1115],{"class":981,"line":1106},13,[979,1108,1109],{"class":989},"    - ",[979,1111,1112],{"class":985},"containerPort",[979,1114,990],{"class":989},[979,1116,1118],{"class":1117},"sBjJW","80\n",[979,1120,1122,1125],{"class":981,"line":1121},14,[979,1123,1124],{"class":985},"    resources",[979,1126,1014],{"class":989},[979,1128,1130,1133],{"class":981,"line":1129},15,[979,1131,1132],{"class":985},"      requests",[979,1134,1014],{"class":989},[979,1136,1138,1141,1143],{"class":981,"line":1137},16,[979,1139,1140],{"class":985},"        memory",[979,1142,990],{"class":989},[979,1144,1145],{"class":993},"\"64Mi\"\n",[979,1147,1149,1152,1154],{"class":981,"line":1148},17,[979,1150,1151],{"class":985},"        cpu",[979,1153,990],{"class":989},[979,1155,1156],{"class":993},"\"250m\"\n",[979,1158,1160,1163],{"class":981,"line":1159},18,[979,1161,1162],{"class":985},"      limits",[979,1164,1014],{"class":989},[979,1166,1168,1170,1172],{"class":981,"line":1167},19,[979,1169,1140],{"class":985},[979,1171,990],{"class":989},[979,1173,1174],{"class":993},"\"128Mi\"\n",[979,1176,1178,1180,1182],{"class":981,"line":1177},20,[979,1179,1151],{"class":985},[979,1181,990],{"class":989},[979,1183,1184],{"class":993},"\"500m\"\n",[979,1186,1188,1191],{"class":981,"line":1187},21,[979,1189,1190],{"class":985},"    livenessProbe",[979,1192,1014],{"class":989},[979,1194,1196,1199],{"class":981,"line":1195},22,[979,1197,1198],{"class":985},"      httpGet",[979,1200,1014],{"class":989},[979,1202,1204,1207,1209],{"class":981,"line":1203},23,[979,1205,1206],{"class":985},"        path",[979,1208,990],{"class":989},[979,1210,1211],{"class":993},"\u002F\n",[979,1213,1215,1218,1220],{"class":981,"line":1214},24,[979,1216,1217],{"class":985},"        port",[979,1219,990],{"class":989},[979,1221,1118],{"class":1117},[979,1223,1225,1228,1230],{"class":981,"line":1224},25,[979,1226,1227],{"class":985},"      initialDelaySeconds",[979,1229,990],{"class":989},[979,1231,1232],{"class":1117},"15\n",[979,1234,1236,1239,1241],{"class":981,"line":1235},26,[979,1237,1238],{"class":985},"      periodSeconds",[979,1240,990],{"class":989},[979,1242,1243],{"class":1117},"20\n",[979,1245,1247,1250],{"class":981,"line":1246},27,[979,1248,1249],{"class":985},"    readinessProbe",[979,1251,1014],{"class":989},[979,1253,1255,1257],{"class":981,"line":1254},28,[979,1256,1198],{"class":985},[979,1258,1014],{"class":989},[979,1260,1262,1264,1266],{"class":981,"line":1261},29,[979,1263,1206],{"class":985},[979,1265,990],{"class":989},[979,1267,1211],{"class":993},[979,1269,1271,1273,1275],{"class":981,"line":1270},30,[979,1272,1217],{"class":985},[979,1274,990],{"class":989},[979,1276,1118],{"class":1117},[979,1278,1280,1282,1284],{"class":981,"line":1279},31,[979,1281,1227],{"class":985},[979,1283,990],{"class":989},[979,1285,1286],{"class":1117},"5\n",[979,1288,1290,1292,1294],{"class":981,"line":1289},32,[979,1291,1238],{"class":985},[979,1293,990],{"class":989},[979,1295,1296],{"class":1117},"10\n",[947,1298,1300],{"id":1299},"多容器-pod","多容器 Pod",[970,1302,1304],{"className":972,"code":1303,"language":974,"meta":11,"style":11},"apiVersion: v1\nkind: Pod\nmetadata:\n  name: multi-container-pod\nspec:\n  containers:\n  - name: nginx\n    image: nginx:1.21\n    ports:\n    - containerPort: 80\n    volumeMounts:\n    - name: shared-data\n      mountPath: \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\n  - name: content-generator\n    image: busybox\n    command: [\"\u002Fbin\u002Fsh\", \"-c\"]\n    args:\n    - while true; do\n        echo \"\u003Ch1>Hello $(date)\u003C\u002Fh1>\" > \u002Fdata\u002Findex.html;\n        sleep 10;\n      done\n    volumeMounts:\n    - name: shared-data\n      mountPath: \u002Fdata\n  volumes:\n  - name: shared-data\n    emptyDir: {}\n",[976,1305,1306,1314,1322,1328,1337,1343,1349,1359,1367,1373,1383,1390,1401,1411,1422,1431,1451,1458,1465,1470,1475,1480,1486,1496,1505,1512,1522],{"__ignoreMap":11},[979,1307,1308,1310,1312],{"class":981,"line":982},[979,1309,986],{"class":985},[979,1311,990],{"class":989},[979,1313,994],{"class":993},[979,1315,1316,1318,1320],{"class":981,"line":997},[979,1317,1000],{"class":985},[979,1319,990],{"class":989},[979,1321,1005],{"class":993},[979,1323,1324,1326],{"class":981,"line":1008},[979,1325,1011],{"class":985},[979,1327,1014],{"class":989},[979,1329,1330,1332,1334],{"class":981,"line":1017},[979,1331,1020],{"class":985},[979,1333,990],{"class":989},[979,1335,1336],{"class":993},"multi-container-pod\n",[979,1338,1339,1341],{"class":981,"line":1028},[979,1340,1061],{"class":985},[979,1342,1014],{"class":989},[979,1344,1345,1347],{"class":981,"line":1036},[979,1346,1069],{"class":985},[979,1348,1014],{"class":989},[979,1350,1351,1353,1355,1357],{"class":981,"line":1047},[979,1352,1077],{"class":989},[979,1354,1080],{"class":985},[979,1356,990],{"class":989},[979,1358,1044],{"class":993},[979,1360,1361,1363,1365],{"class":981,"line":1058},[979,1362,1090],{"class":985},[979,1364,990],{"class":989},[979,1366,1095],{"class":993},[979,1368,1369,1371],{"class":981,"line":1066},[979,1370,1101],{"class":985},[979,1372,1014],{"class":989},[979,1374,1375,1377,1379,1381],{"class":981,"line":1074},[979,1376,1109],{"class":989},[979,1378,1112],{"class":985},[979,1380,990],{"class":989},[979,1382,1118],{"class":1117},[979,1384,1385,1388],{"class":981,"line":1087},[979,1386,1387],{"class":985},"    volumeMounts",[979,1389,1014],{"class":989},[979,1391,1392,1394,1396,1398],{"class":981,"line":1098},[979,1393,1109],{"class":989},[979,1395,1080],{"class":985},[979,1397,990],{"class":989},[979,1399,1400],{"class":993},"shared-data\n",[979,1402,1403,1406,1408],{"class":981,"line":1106},[979,1404,1405],{"class":985},"      mountPath",[979,1407,990],{"class":989},[979,1409,1410],{"class":993},"\u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\n",[979,1412,1413,1415,1417,1419],{"class":981,"line":1121},[979,1414,1077],{"class":989},[979,1416,1080],{"class":985},[979,1418,990],{"class":989},[979,1420,1421],{"class":993},"content-generator\n",[979,1423,1424,1426,1428],{"class":981,"line":1129},[979,1425,1090],{"class":985},[979,1427,990],{"class":989},[979,1429,1430],{"class":993},"busybox\n",[979,1432,1433,1436,1439,1442,1445,1448],{"class":981,"line":1137},[979,1434,1435],{"class":985},"    command",[979,1437,1438],{"class":989},": [",[979,1440,1441],{"class":993},"\"\u002Fbin\u002Fsh\"",[979,1443,1444],{"class":989},", ",[979,1446,1447],{"class":993},"\"-c\"",[979,1449,1450],{"class":989},"]\n",[979,1452,1453,1456],{"class":981,"line":1148},[979,1454,1455],{"class":985},"    args",[979,1457,1014],{"class":989},[979,1459,1460,1462],{"class":981,"line":1159},[979,1461,1109],{"class":989},[979,1463,1464],{"class":993},"while true; do\n",[979,1466,1467],{"class":981,"line":1167},[979,1468,1469],{"class":993},"        echo \"\u003Ch1>Hello $(date)\u003C\u002Fh1>\" > \u002Fdata\u002Findex.html;\n",[979,1471,1472],{"class":981,"line":1177},[979,1473,1474],{"class":993},"        sleep 10;\n",[979,1476,1477],{"class":981,"line":1187},[979,1478,1479],{"class":993},"      done\n",[979,1481,1482,1484],{"class":981,"line":1195},[979,1483,1387],{"class":985},[979,1485,1014],{"class":989},[979,1487,1488,1490,1492,1494],{"class":981,"line":1203},[979,1489,1109],{"class":989},[979,1491,1080],{"class":985},[979,1493,990],{"class":989},[979,1495,1400],{"class":993},[979,1497,1498,1500,1502],{"class":981,"line":1214},[979,1499,1405],{"class":985},[979,1501,990],{"class":989},[979,1503,1504],{"class":993},"\u002Fdata\n",[979,1506,1507,1510],{"class":981,"line":1224},[979,1508,1509],{"class":985},"  volumes",[979,1511,1014],{"class":989},[979,1513,1514,1516,1518,1520],{"class":981,"line":1235},[979,1515,1077],{"class":989},[979,1517,1080],{"class":985},[979,1519,990],{"class":989},[979,1521,1400],{"class":993},[979,1523,1524,1527],{"class":981,"line":1246},[979,1525,1526],{"class":985},"    emptyDir",[979,1528,1529],{"class":989},": {}\n",[947,1531,1533],{"id":1532},"pod-生命周期","Pod 生命周期",[970,1535,1541],{"className":1536,"code":1538,"language":1539,"meta":1540},[1537],"language-text","flowchart LR\n    P[\"Pending\"] --> R[\"Running\"]\n    R --> SF[\"Succeeded \u002F Failed\"]\n    R --> CLB[\"CrashLoopBackOff\u003Cbr\u002F>容器反复崩溃\"]\n    P --> U[\"Unknown\u003Cbr\u002F>节点通信失败\"]\n","text","mermaid",[976,1542,1538],{"__ignoreMap":11},[896,1544,1545],{},[906,1546,1547],{},"状态说明：",[900,1549,1550,1553,1556,1559,1562],{},[903,1551,1552],{},"Pending: Pod 已创建，但容器还未启动",[903,1554,1555],{},"Running: 至少一个容器正在运行",[903,1557,1558],{},"Succeeded: 所有容器成功终止",[903,1560,1561],{},"Failed: 至少一个容器以非零状态退出",[903,1563,1564],{},"Unknown: 无法获取 Pod 状态",[947,1566,1568],{"id":1567},"init-容器","Init 容器",[896,1570,1571],{},"Init 容器在主容器启动之前运行，用于初始化工作：",[970,1573,1575],{"className":972,"code":1574,"language":974,"meta":11,"style":11},"apiVersion: v1\nkind: Pod\nmetadata:\n  name: init-container-demo\nspec:\n  initContainers:\n  - name: init-db\n    image: busybox\n    command: ['sh', '-c', 'until nc -z mysql-service 3306; do echo waiting for db; sleep 2; done']\n  - name: init-config\n    image: busybox\n    command: ['sh', '-c', 'cp \u002Fconfig\u002F* \u002Fapp\u002Fconfig\u002F']\n  containers:\n  - name: app\n    image: myapp:1.0\n",[976,1576,1577,1585,1593,1599,1608,1614,1621,1632,1640,1661,1672,1680,1699,1705,1716],{"__ignoreMap":11},[979,1578,1579,1581,1583],{"class":981,"line":982},[979,1580,986],{"class":985},[979,1582,990],{"class":989},[979,1584,994],{"class":993},[979,1586,1587,1589,1591],{"class":981,"line":997},[979,1588,1000],{"class":985},[979,1590,990],{"class":989},[979,1592,1005],{"class":993},[979,1594,1595,1597],{"class":981,"line":1008},[979,1596,1011],{"class":985},[979,1598,1014],{"class":989},[979,1600,1601,1603,1605],{"class":981,"line":1017},[979,1602,1020],{"class":985},[979,1604,990],{"class":989},[979,1606,1607],{"class":993},"init-container-demo\n",[979,1609,1610,1612],{"class":981,"line":1028},[979,1611,1061],{"class":985},[979,1613,1014],{"class":989},[979,1615,1616,1619],{"class":981,"line":1036},[979,1617,1618],{"class":985},"  initContainers",[979,1620,1014],{"class":989},[979,1622,1623,1625,1627,1629],{"class":981,"line":1047},[979,1624,1077],{"class":989},[979,1626,1080],{"class":985},[979,1628,990],{"class":989},[979,1630,1631],{"class":993},"init-db\n",[979,1633,1634,1636,1638],{"class":981,"line":1058},[979,1635,1090],{"class":985},[979,1637,990],{"class":989},[979,1639,1430],{"class":993},[979,1641,1642,1644,1646,1649,1651,1654,1656,1659],{"class":981,"line":1066},[979,1643,1435],{"class":985},[979,1645,1438],{"class":989},[979,1647,1648],{"class":993},"'sh'",[979,1650,1444],{"class":989},[979,1652,1653],{"class":993},"'-c'",[979,1655,1444],{"class":989},[979,1657,1658],{"class":993},"'until nc -z mysql-service 3306; do echo waiting for db; sleep 2; done'",[979,1660,1450],{"class":989},[979,1662,1663,1665,1667,1669],{"class":981,"line":1074},[979,1664,1077],{"class":989},[979,1666,1080],{"class":985},[979,1668,990],{"class":989},[979,1670,1671],{"class":993},"init-config\n",[979,1673,1674,1676,1678],{"class":981,"line":1087},[979,1675,1090],{"class":985},[979,1677,990],{"class":989},[979,1679,1430],{"class":993},[979,1681,1682,1684,1686,1688,1690,1692,1694,1697],{"class":981,"line":1098},[979,1683,1435],{"class":985},[979,1685,1438],{"class":989},[979,1687,1648],{"class":993},[979,1689,1444],{"class":989},[979,1691,1653],{"class":993},[979,1693,1444],{"class":989},[979,1695,1696],{"class":993},"'cp \u002Fconfig\u002F* \u002Fapp\u002Fconfig\u002F'",[979,1698,1450],{"class":989},[979,1700,1701,1703],{"class":981,"line":1106},[979,1702,1069],{"class":985},[979,1704,1014],{"class":989},[979,1706,1707,1709,1711,1713],{"class":981,"line":1121},[979,1708,1077],{"class":989},[979,1710,1080],{"class":985},[979,1712,990],{"class":989},[979,1714,1715],{"class":993},"app\n",[979,1717,1718,1720,1722],{"class":981,"line":1129},[979,1719,1090],{"class":985},[979,1721,990],{"class":989},[979,1723,1724],{"class":993},"myapp:1.0\n",[892,1726,914],{"id":1727},"replicaset",[896,1729,1730],{},"ReplicaSet 确保指定数量的 Pod 副本始终运行。",[947,1732,1734],{"id":1733},"replicaset-定义","ReplicaSet 定义",[970,1736,1738],{"className":972,"code":1737,"language":974,"meta":11,"style":11},"apiVersion: apps\u002Fv1\nkind: ReplicaSet\nmetadata:\n  name: nginx-replicaset\n  labels:\n    app: nginx\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: nginx\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.21\n        ports:\n        - containerPort: 80\n",[976,1739,1740,1749,1758,1764,1773,1779,1787,1793,1803,1810,1817,1826,1833,1840,1847,1856,1863,1870,1881,1890,1897],{"__ignoreMap":11},[979,1741,1742,1744,1746],{"class":981,"line":982},[979,1743,986],{"class":985},[979,1745,990],{"class":989},[979,1747,1748],{"class":993},"apps\u002Fv1\n",[979,1750,1751,1753,1755],{"class":981,"line":997},[979,1752,1000],{"class":985},[979,1754,990],{"class":989},[979,1756,1757],{"class":993},"ReplicaSet\n",[979,1759,1760,1762],{"class":981,"line":1008},[979,1761,1011],{"class":985},[979,1763,1014],{"class":989},[979,1765,1766,1768,1770],{"class":981,"line":1017},[979,1767,1020],{"class":985},[979,1769,990],{"class":989},[979,1771,1772],{"class":993},"nginx-replicaset\n",[979,1774,1775,1777],{"class":981,"line":1028},[979,1776,1031],{"class":985},[979,1778,1014],{"class":989},[979,1780,1781,1783,1785],{"class":981,"line":1036},[979,1782,1039],{"class":985},[979,1784,990],{"class":989},[979,1786,1044],{"class":993},[979,1788,1789,1791],{"class":981,"line":1047},[979,1790,1061],{"class":985},[979,1792,1014],{"class":989},[979,1794,1795,1798,1800],{"class":981,"line":1058},[979,1796,1797],{"class":985},"  replicas",[979,1799,990],{"class":989},[979,1801,1802],{"class":1117},"3\n",[979,1804,1805,1808],{"class":981,"line":1066},[979,1806,1807],{"class":985},"  selector",[979,1809,1014],{"class":989},[979,1811,1812,1815],{"class":981,"line":1074},[979,1813,1814],{"class":985},"    matchLabels",[979,1816,1014],{"class":989},[979,1818,1819,1822,1824],{"class":981,"line":1087},[979,1820,1821],{"class":985},"      app",[979,1823,990],{"class":989},[979,1825,1044],{"class":993},[979,1827,1828,1831],{"class":981,"line":1098},[979,1829,1830],{"class":985},"  template",[979,1832,1014],{"class":989},[979,1834,1835,1838],{"class":981,"line":1106},[979,1836,1837],{"class":985},"    metadata",[979,1839,1014],{"class":989},[979,1841,1842,1845],{"class":981,"line":1121},[979,1843,1844],{"class":985},"      labels",[979,1846,1014],{"class":989},[979,1848,1849,1852,1854],{"class":981,"line":1129},[979,1850,1851],{"class":985},"        app",[979,1853,990],{"class":989},[979,1855,1044],{"class":993},[979,1857,1858,1861],{"class":981,"line":1137},[979,1859,1860],{"class":985},"    spec",[979,1862,1014],{"class":989},[979,1864,1865,1868],{"class":981,"line":1148},[979,1866,1867],{"class":985},"      containers",[979,1869,1014],{"class":989},[979,1871,1872,1875,1877,1879],{"class":981,"line":1159},[979,1873,1874],{"class":989},"      - ",[979,1876,1080],{"class":985},[979,1878,990],{"class":989},[979,1880,1044],{"class":993},[979,1882,1883,1886,1888],{"class":981,"line":1167},[979,1884,1885],{"class":985},"        image",[979,1887,990],{"class":989},[979,1889,1095],{"class":993},[979,1891,1892,1895],{"class":981,"line":1177},[979,1893,1894],{"class":985},"        ports",[979,1896,1014],{"class":989},[979,1898,1899,1902,1904,1906],{"class":981,"line":1187},[979,1900,1901],{"class":989},"        - ",[979,1903,1112],{"class":985},[979,1905,990],{"class":989},[979,1907,1118],{"class":1117},[947,1909,1911],{"id":1910},"replicaset-工作原理","ReplicaSet 工作原理",[970,1913,1916],{"className":1914,"code":1915,"language":1539,"meta":1540},[1537],"flowchart TD\n    RS[\"ReplicaSet\u003Cbr\u002F>期望副本数: 3\"]\n    subgraph Current[\"当前状态: 3 个运行中\"]\n        P1[\"Pod\"]\n        P2[\"Pod\"]\n        P3[\"Pod\"]\n    end\n    subgraph After[\"Pod 被删除后\"]\n        P4[\"Pod\"]\n        P5[\"Pod\"]\n        P6[\"NEW Pod\u003Cbr\u002F>自动创建\"]\n    end\n    RS --> Current\n    Current -.-> After\n",[976,1917,1915],{"__ignoreMap":11},[1919,1920,1922],"warning",{"title":1921},"注意","\n通常不直接使用 ReplicaSet，而是使用 Deployment 来管理 ReplicaSet。\n",[892,1924,920],{"id":1925},"deployment",[896,1927,1928],{},"Deployment 是最常用的工作负载资源，提供声明式更新能力。",[947,1930,1932],{"id":1931},"deployment-定义","Deployment 定义",[970,1934,1936],{"className":972,"code":1935,"language":974,"meta":11,"style":11},"apiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: nginx-deployment\n  labels:\n    app: nginx\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: nginx\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 1\n      maxUnavailable: 1\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.21\n        ports:\n        - containerPort: 80\n        resources:\n          requests:\n            cpu: 100m\n            memory: 128Mi\n          limits:\n            cpu: 250m\n            memory: 256Mi\n",[976,1937,1938,1946,1955,1961,1970,1976,1984,1990,1998,2004,2010,2018,2025,2035,2042,2052,2061,2067,2073,2079,2087,2093,2099,2109,2117,2123,2133,2140,2147,2157,2167,2174,2183],{"__ignoreMap":11},[979,1939,1940,1942,1944],{"class":981,"line":982},[979,1941,986],{"class":985},[979,1943,990],{"class":989},[979,1945,1748],{"class":993},[979,1947,1948,1950,1952],{"class":981,"line":997},[979,1949,1000],{"class":985},[979,1951,990],{"class":989},[979,1953,1954],{"class":993},"Deployment\n",[979,1956,1957,1959],{"class":981,"line":1008},[979,1958,1011],{"class":985},[979,1960,1014],{"class":989},[979,1962,1963,1965,1967],{"class":981,"line":1017},[979,1964,1020],{"class":985},[979,1966,990],{"class":989},[979,1968,1969],{"class":993},"nginx-deployment\n",[979,1971,1972,1974],{"class":981,"line":1028},[979,1973,1031],{"class":985},[979,1975,1014],{"class":989},[979,1977,1978,1980,1982],{"class":981,"line":1036},[979,1979,1039],{"class":985},[979,1981,990],{"class":989},[979,1983,1044],{"class":993},[979,1985,1986,1988],{"class":981,"line":1047},[979,1987,1061],{"class":985},[979,1989,1014],{"class":989},[979,1991,1992,1994,1996],{"class":981,"line":1058},[979,1993,1797],{"class":985},[979,1995,990],{"class":989},[979,1997,1802],{"class":1117},[979,1999,2000,2002],{"class":981,"line":1066},[979,2001,1807],{"class":985},[979,2003,1014],{"class":989},[979,2005,2006,2008],{"class":981,"line":1074},[979,2007,1814],{"class":985},[979,2009,1014],{"class":989},[979,2011,2012,2014,2016],{"class":981,"line":1087},[979,2013,1821],{"class":985},[979,2015,990],{"class":989},[979,2017,1044],{"class":993},[979,2019,2020,2023],{"class":981,"line":1098},[979,2021,2022],{"class":985},"  strategy",[979,2024,1014],{"class":989},[979,2026,2027,2030,2032],{"class":981,"line":1106},[979,2028,2029],{"class":985},"    type",[979,2031,990],{"class":989},[979,2033,2034],{"class":993},"RollingUpdate\n",[979,2036,2037,2040],{"class":981,"line":1121},[979,2038,2039],{"class":985},"    rollingUpdate",[979,2041,1014],{"class":989},[979,2043,2044,2047,2049],{"class":981,"line":1129},[979,2045,2046],{"class":985},"      maxSurge",[979,2048,990],{"class":989},[979,2050,2051],{"class":1117},"1\n",[979,2053,2054,2057,2059],{"class":981,"line":1137},[979,2055,2056],{"class":985},"      maxUnavailable",[979,2058,990],{"class":989},[979,2060,2051],{"class":1117},[979,2062,2063,2065],{"class":981,"line":1148},[979,2064,1830],{"class":985},[979,2066,1014],{"class":989},[979,2068,2069,2071],{"class":981,"line":1159},[979,2070,1837],{"class":985},[979,2072,1014],{"class":989},[979,2074,2075,2077],{"class":981,"line":1167},[979,2076,1844],{"class":985},[979,2078,1014],{"class":989},[979,2080,2081,2083,2085],{"class":981,"line":1177},[979,2082,1851],{"class":985},[979,2084,990],{"class":989},[979,2086,1044],{"class":993},[979,2088,2089,2091],{"class":981,"line":1187},[979,2090,1860],{"class":985},[979,2092,1014],{"class":989},[979,2094,2095,2097],{"class":981,"line":1195},[979,2096,1867],{"class":985},[979,2098,1014],{"class":989},[979,2100,2101,2103,2105,2107],{"class":981,"line":1203},[979,2102,1874],{"class":989},[979,2104,1080],{"class":985},[979,2106,990],{"class":989},[979,2108,1044],{"class":993},[979,2110,2111,2113,2115],{"class":981,"line":1214},[979,2112,1885],{"class":985},[979,2114,990],{"class":989},[979,2116,1095],{"class":993},[979,2118,2119,2121],{"class":981,"line":1224},[979,2120,1894],{"class":985},[979,2122,1014],{"class":989},[979,2124,2125,2127,2129,2131],{"class":981,"line":1235},[979,2126,1901],{"class":989},[979,2128,1112],{"class":985},[979,2130,990],{"class":989},[979,2132,1118],{"class":1117},[979,2134,2135,2138],{"class":981,"line":1246},[979,2136,2137],{"class":985},"        resources",[979,2139,1014],{"class":989},[979,2141,2142,2145],{"class":981,"line":1254},[979,2143,2144],{"class":985},"          requests",[979,2146,1014],{"class":989},[979,2148,2149,2152,2154],{"class":981,"line":1261},[979,2150,2151],{"class":985},"            cpu",[979,2153,990],{"class":989},[979,2155,2156],{"class":993},"100m\n",[979,2158,2159,2162,2164],{"class":981,"line":1270},[979,2160,2161],{"class":985},"            memory",[979,2163,990],{"class":989},[979,2165,2166],{"class":993},"128Mi\n",[979,2168,2169,2172],{"class":981,"line":1279},[979,2170,2171],{"class":985},"          limits",[979,2173,1014],{"class":989},[979,2175,2176,2178,2180],{"class":981,"line":1289},[979,2177,2151],{"class":985},[979,2179,990],{"class":989},[979,2181,2182],{"class":993},"250m\n",[979,2184,2186,2188,2190],{"class":981,"line":2185},33,[979,2187,2161],{"class":985},[979,2189,990],{"class":989},[979,2191,2192],{"class":993},"256Mi\n",[947,2194,2196],{"id":2195},"创建-deployment","创建 Deployment",[970,2198,2202],{"className":2199,"code":2200,"language":2201,"meta":11,"style":11},"language-bash shiki shiki-themes github-light github-light github-dark","# 使用 YAML 文件\nkubectl apply -f nginx-deployment.yaml\n\n# 使用命令行快速创建\nkubectl create deployment nginx --image=nginx:1.21 --replicas=3\n","bash",[976,2203,2204,2210,2225,2231,2236],{"__ignoreMap":11},[979,2205,2206],{"class":981,"line":982},[979,2207,2209],{"class":2208},"sCsY4","# 使用 YAML 文件\n",[979,2211,2212,2216,2219,2222],{"class":981,"line":997},[979,2213,2215],{"class":2214},"snPdu","kubectl",[979,2217,2218],{"class":993}," apply",[979,2220,2221],{"class":1117}," -f",[979,2223,2224],{"class":993}," nginx-deployment.yaml\n",[979,2226,2227],{"class":981,"line":1008},[979,2228,2230],{"emptyLinePlaceholder":2229},true,"\n",[979,2232,2233],{"class":981,"line":1017},[979,2234,2235],{"class":2208},"# 使用命令行快速创建\n",[979,2237,2238,2240,2243,2246,2249,2252],{"class":981,"line":1028},[979,2239,2215],{"class":2214},[979,2241,2242],{"class":993}," create",[979,2244,2245],{"class":993}," deployment",[979,2247,2248],{"class":993}," nginx",[979,2250,2251],{"class":1117}," --image=nginx:1.21",[979,2253,2254],{"class":1117}," --replicas=3\n",[947,2256,2258],{"id":2257},"更新-deployment","更新 Deployment",[970,2260,2262],{"className":2199,"code":2261,"language":2201,"meta":11,"style":11},"# 更新镜像\nkubectl set image deployment\u002Fnginx-deployment nginx=nginx:1.22\n\n# 编辑 Deployment\nkubectl edit deployment nginx-deployment\n\n# 使用 patch\nkubectl patch deployment nginx-deployment -p '{\"spec\":{\"replicas\":5}}'\n",[976,2263,2264,2269,2285,2289,2294,2306,2310,2315],{"__ignoreMap":11},[979,2265,2266],{"class":981,"line":982},[979,2267,2268],{"class":2208},"# 更新镜像\n",[979,2270,2271,2273,2276,2279,2282],{"class":981,"line":997},[979,2272,2215],{"class":2214},[979,2274,2275],{"class":993}," set",[979,2277,2278],{"class":993}," image",[979,2280,2281],{"class":993}," deployment\u002Fnginx-deployment",[979,2283,2284],{"class":993}," nginx=nginx:1.22\n",[979,2286,2287],{"class":981,"line":1008},[979,2288,2230],{"emptyLinePlaceholder":2229},[979,2290,2291],{"class":981,"line":1017},[979,2292,2293],{"class":2208},"# 编辑 Deployment\n",[979,2295,2296,2298,2301,2303],{"class":981,"line":1028},[979,2297,2215],{"class":2214},[979,2299,2300],{"class":993}," edit",[979,2302,2245],{"class":993},[979,2304,2305],{"class":993}," nginx-deployment\n",[979,2307,2308],{"class":981,"line":1036},[979,2309,2230],{"emptyLinePlaceholder":2229},[979,2311,2312],{"class":981,"line":1047},[979,2313,2314],{"class":2208},"# 使用 patch\n",[979,2316,2317,2319,2322,2324,2327,2330],{"class":981,"line":1058},[979,2318,2215],{"class":2214},[979,2320,2321],{"class":993}," patch",[979,2323,2245],{"class":993},[979,2325,2326],{"class":993}," nginx-deployment",[979,2328,2329],{"class":1117}," -p",[979,2331,2332],{"class":993}," '{\"spec\":{\"replicas\":5}}'\n",[947,2334,2335],{"id":2335},"滚动更新策略",[970,2337,2339],{"className":972,"code":2338,"language":974,"meta":11,"style":11},"spec:\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 25%        # 更新时最多可以超出期望副本数的比例\n      maxUnavailable: 25%  # 更新时最多不可用的副本数比例\n",[976,2340,2341,2347,2353,2361,2367,2379],{"__ignoreMap":11},[979,2342,2343,2345],{"class":981,"line":982},[979,2344,1061],{"class":985},[979,2346,1014],{"class":989},[979,2348,2349,2351],{"class":981,"line":997},[979,2350,2022],{"class":985},[979,2352,1014],{"class":989},[979,2354,2355,2357,2359],{"class":981,"line":1008},[979,2356,2029],{"class":985},[979,2358,990],{"class":989},[979,2360,2034],{"class":993},[979,2362,2363,2365],{"class":981,"line":1017},[979,2364,2039],{"class":985},[979,2366,1014],{"class":989},[979,2368,2369,2371,2373,2376],{"class":981,"line":1028},[979,2370,2046],{"class":985},[979,2372,990],{"class":989},[979,2374,2375],{"class":993},"25%",[979,2377,2378],{"class":2208},"        # 更新时最多可以超出期望副本数的比例\n",[979,2380,2381,2383,2385,2387],{"class":981,"line":1036},[979,2382,2056],{"class":985},[979,2384,990],{"class":989},[979,2386,2375],{"class":993},[979,2388,2389],{"class":2208},"  # 更新时最多不可用的副本数比例\n",[896,2391,2392],{},[906,2393,2394],{},"更新过程：",[970,2396,2399],{"className":2397,"code":2398,"language":1539},[1537],"初始状态:  v1 v1 v1 v1 (4 replicas)\n\nStep 1:    v1 v1 v1 v1 v2      (创建新版本 Pod)\nStep 2:    v1 v1 v1 v2 v2      (继续创建，删除旧版本)\nStep 3:    v1 v1 v2 v2 v2\nStep 4:    v1 v2 v2 v2 v2\nStep 5:    v2 v2 v2 v2         (更新完成)\n",[976,2400,2398],{"__ignoreMap":11},[947,2402,2404],{"id":2403},"回滚-deployment","回滚 Deployment",[970,2406,2408],{"className":2199,"code":2407,"language":2201,"meta":11,"style":11},"# 查看更新历史\nkubectl rollout history deployment\u002Fnginx-deployment\n\n# 查看特定版本详情\nkubectl rollout history deployment\u002Fnginx-deployment --revision=2\n\n# 回滚到上一版本\nkubectl rollout undo deployment\u002Fnginx-deployment\n\n# 回滚到指定版本\nkubectl rollout undo deployment\u002Fnginx-deployment --to-revision=2\n",[976,2409,2410,2415,2428,2432,2437,2450,2454,2459,2470,2474,2479],{"__ignoreMap":11},[979,2411,2412],{"class":981,"line":982},[979,2413,2414],{"class":2208},"# 查看更新历史\n",[979,2416,2417,2419,2422,2425],{"class":981,"line":997},[979,2418,2215],{"class":2214},[979,2420,2421],{"class":993}," rollout",[979,2423,2424],{"class":993}," history",[979,2426,2427],{"class":993}," deployment\u002Fnginx-deployment\n",[979,2429,2430],{"class":981,"line":1008},[979,2431,2230],{"emptyLinePlaceholder":2229},[979,2433,2434],{"class":981,"line":1017},[979,2435,2436],{"class":2208},"# 查看特定版本详情\n",[979,2438,2439,2441,2443,2445,2447],{"class":981,"line":1028},[979,2440,2215],{"class":2214},[979,2442,2421],{"class":993},[979,2444,2424],{"class":993},[979,2446,2281],{"class":993},[979,2448,2449],{"class":1117}," --revision=2\n",[979,2451,2452],{"class":981,"line":1036},[979,2453,2230],{"emptyLinePlaceholder":2229},[979,2455,2456],{"class":981,"line":1047},[979,2457,2458],{"class":2208},"# 回滚到上一版本\n",[979,2460,2461,2463,2465,2468],{"class":981,"line":1058},[979,2462,2215],{"class":2214},[979,2464,2421],{"class":993},[979,2466,2467],{"class":993}," undo",[979,2469,2427],{"class":993},[979,2471,2472],{"class":981,"line":1066},[979,2473,2230],{"emptyLinePlaceholder":2229},[979,2475,2476],{"class":981,"line":1074},[979,2477,2478],{"class":2208},"# 回滚到指定版本\n",[979,2480,2481,2483,2485,2487,2489],{"class":981,"line":1087},[979,2482,2215],{"class":2214},[979,2484,2421],{"class":993},[979,2486,2467],{"class":993},[979,2488,2281],{"class":993},[979,2490,2491],{"class":1117}," --to-revision=2\n",[947,2493,2494],{"id":2494},"暂停和恢复更新",[970,2496,2498],{"className":2199,"code":2497,"language":2201,"meta":11,"style":11},"# 暂停更新\nkubectl rollout pause deployment\u002Fnginx-deployment\n\n# 进行多次修改\nkubectl set image deployment\u002Fnginx-deployment nginx=nginx:1.23\nkubectl set resources deployment\u002Fnginx-deployment -c=nginx --limits=memory=256Mi\n\n# 恢复更新（一次性应用所有修改）\nkubectl rollout resume deployment\u002Fnginx-deployment\n",[976,2499,2500,2505,2516,2520,2525,2538,2555,2559,2564],{"__ignoreMap":11},[979,2501,2502],{"class":981,"line":982},[979,2503,2504],{"class":2208},"# 暂停更新\n",[979,2506,2507,2509,2511,2514],{"class":981,"line":997},[979,2508,2215],{"class":2214},[979,2510,2421],{"class":993},[979,2512,2513],{"class":993}," pause",[979,2515,2427],{"class":993},[979,2517,2518],{"class":981,"line":1008},[979,2519,2230],{"emptyLinePlaceholder":2229},[979,2521,2522],{"class":981,"line":1017},[979,2523,2524],{"class":2208},"# 进行多次修改\n",[979,2526,2527,2529,2531,2533,2535],{"class":981,"line":1028},[979,2528,2215],{"class":2214},[979,2530,2275],{"class":993},[979,2532,2278],{"class":993},[979,2534,2281],{"class":993},[979,2536,2537],{"class":993}," nginx=nginx:1.23\n",[979,2539,2540,2542,2544,2547,2549,2552],{"class":981,"line":1036},[979,2541,2215],{"class":2214},[979,2543,2275],{"class":993},[979,2545,2546],{"class":993}," resources",[979,2548,2281],{"class":993},[979,2550,2551],{"class":1117}," -c=nginx",[979,2553,2554],{"class":1117}," --limits=memory=256Mi\n",[979,2556,2557],{"class":981,"line":1047},[979,2558,2230],{"emptyLinePlaceholder":2229},[979,2560,2561],{"class":981,"line":1058},[979,2562,2563],{"class":2208},"# 恢复更新（一次性应用所有修改）\n",[979,2565,2566,2568,2570,2573],{"class":981,"line":1066},[979,2567,2215],{"class":2214},[979,2569,2421],{"class":993},[979,2571,2572],{"class":993}," resume",[979,2574,2427],{"class":993},[892,2576,926],{"id":2577},"statefulset",[896,2579,2580],{},"StatefulSet 用于管理有状态应用，如数据库、消息队列等。",[947,2582,2584],{"id":2583},"statefulset-特点","StatefulSet 特点",[900,2586,2587,2590,2593,2596],{},[903,2588,2589],{},"Pod 拥有稳定的网络标识（固定的 Pod 名称）",[903,2591,2592],{},"Pod 拥有稳定的持久化存储",[903,2594,2595],{},"有序部署、扩展和删除",[903,2597,2598],{},"有序滚动更新",[947,2600,2602],{"id":2601},"statefulset-定义","StatefulSet 定义",[970,2604,2606],{"className":972,"code":2605,"language":974,"meta":11,"style":11},"apiVersion: apps\u002Fv1\nkind: StatefulSet\nmetadata:\n  name: mysql\nspec:\n  serviceName: \"mysql\"\n  replicas: 3\n  selector:\n    matchLabels:\n      app: mysql\n  template:\n    metadata:\n      labels:\n        app: mysql\n    spec:\n      containers:\n      - name: mysql\n        image: mysql:8.0\n        ports:\n        - containerPort: 3306\n          name: mysql\n        env:\n        - name: MYSQL_ROOT_PASSWORD\n          valueFrom:\n            secretKeyRef:\n              name: mysql-secret\n              key: password\n        volumeMounts:\n        - name: data\n          mountPath: \u002Fvar\u002Flib\u002Fmysql\n  volumeClaimTemplates:\n  - metadata:\n      name: data\n    spec:\n      accessModes: [\"ReadWriteOnce\"]\n      storageClassName: \"standard\"\n      resources:\n        requests:\n          storage: 10Gi\n",[976,2607,2608,2616,2625,2631,2640,2646,2656,2664,2670,2676,2684,2690,2696,2702,2710,2716,2722,2732,2741,2747,2758,2767,2774,2785,2792,2799,2809,2819,2826,2837,2847,2854,2862,2871,2878,2891,2902,2910,2918],{"__ignoreMap":11},[979,2609,2610,2612,2614],{"class":981,"line":982},[979,2611,986],{"class":985},[979,2613,990],{"class":989},[979,2615,1748],{"class":993},[979,2617,2618,2620,2622],{"class":981,"line":997},[979,2619,1000],{"class":985},[979,2621,990],{"class":989},[979,2623,2624],{"class":993},"StatefulSet\n",[979,2626,2627,2629],{"class":981,"line":1008},[979,2628,1011],{"class":985},[979,2630,1014],{"class":989},[979,2632,2633,2635,2637],{"class":981,"line":1017},[979,2634,1020],{"class":985},[979,2636,990],{"class":989},[979,2638,2639],{"class":993},"mysql\n",[979,2641,2642,2644],{"class":981,"line":1028},[979,2643,1061],{"class":985},[979,2645,1014],{"class":989},[979,2647,2648,2651,2653],{"class":981,"line":1036},[979,2649,2650],{"class":985},"  serviceName",[979,2652,990],{"class":989},[979,2654,2655],{"class":993},"\"mysql\"\n",[979,2657,2658,2660,2662],{"class":981,"line":1047},[979,2659,1797],{"class":985},[979,2661,990],{"class":989},[979,2663,1802],{"class":1117},[979,2665,2666,2668],{"class":981,"line":1058},[979,2667,1807],{"class":985},[979,2669,1014],{"class":989},[979,2671,2672,2674],{"class":981,"line":1066},[979,2673,1814],{"class":985},[979,2675,1014],{"class":989},[979,2677,2678,2680,2682],{"class":981,"line":1074},[979,2679,1821],{"class":985},[979,2681,990],{"class":989},[979,2683,2639],{"class":993},[979,2685,2686,2688],{"class":981,"line":1087},[979,2687,1830],{"class":985},[979,2689,1014],{"class":989},[979,2691,2692,2694],{"class":981,"line":1098},[979,2693,1837],{"class":985},[979,2695,1014],{"class":989},[979,2697,2698,2700],{"class":981,"line":1106},[979,2699,1844],{"class":985},[979,2701,1014],{"class":989},[979,2703,2704,2706,2708],{"class":981,"line":1121},[979,2705,1851],{"class":985},[979,2707,990],{"class":989},[979,2709,2639],{"class":993},[979,2711,2712,2714],{"class":981,"line":1129},[979,2713,1860],{"class":985},[979,2715,1014],{"class":989},[979,2717,2718,2720],{"class":981,"line":1137},[979,2719,1867],{"class":985},[979,2721,1014],{"class":989},[979,2723,2724,2726,2728,2730],{"class":981,"line":1148},[979,2725,1874],{"class":989},[979,2727,1080],{"class":985},[979,2729,990],{"class":989},[979,2731,2639],{"class":993},[979,2733,2734,2736,2738],{"class":981,"line":1159},[979,2735,1885],{"class":985},[979,2737,990],{"class":989},[979,2739,2740],{"class":993},"mysql:8.0\n",[979,2742,2743,2745],{"class":981,"line":1167},[979,2744,1894],{"class":985},[979,2746,1014],{"class":989},[979,2748,2749,2751,2753,2755],{"class":981,"line":1177},[979,2750,1901],{"class":989},[979,2752,1112],{"class":985},[979,2754,990],{"class":989},[979,2756,2757],{"class":1117},"3306\n",[979,2759,2760,2763,2765],{"class":981,"line":1187},[979,2761,2762],{"class":985},"          name",[979,2764,990],{"class":989},[979,2766,2639],{"class":993},[979,2768,2769,2772],{"class":981,"line":1195},[979,2770,2771],{"class":985},"        env",[979,2773,1014],{"class":989},[979,2775,2776,2778,2780,2782],{"class":981,"line":1203},[979,2777,1901],{"class":989},[979,2779,1080],{"class":985},[979,2781,990],{"class":989},[979,2783,2784],{"class":993},"MYSQL_ROOT_PASSWORD\n",[979,2786,2787,2790],{"class":981,"line":1214},[979,2788,2789],{"class":985},"          valueFrom",[979,2791,1014],{"class":989},[979,2793,2794,2797],{"class":981,"line":1224},[979,2795,2796],{"class":985},"            secretKeyRef",[979,2798,1014],{"class":989},[979,2800,2801,2804,2806],{"class":981,"line":1235},[979,2802,2803],{"class":985},"              name",[979,2805,990],{"class":989},[979,2807,2808],{"class":993},"mysql-secret\n",[979,2810,2811,2814,2816],{"class":981,"line":1246},[979,2812,2813],{"class":985},"              key",[979,2815,990],{"class":989},[979,2817,2818],{"class":993},"password\n",[979,2820,2821,2824],{"class":981,"line":1254},[979,2822,2823],{"class":985},"        volumeMounts",[979,2825,1014],{"class":989},[979,2827,2828,2830,2832,2834],{"class":981,"line":1261},[979,2829,1901],{"class":989},[979,2831,1080],{"class":985},[979,2833,990],{"class":989},[979,2835,2836],{"class":993},"data\n",[979,2838,2839,2842,2844],{"class":981,"line":1270},[979,2840,2841],{"class":985},"          mountPath",[979,2843,990],{"class":989},[979,2845,2846],{"class":993},"\u002Fvar\u002Flib\u002Fmysql\n",[979,2848,2849,2852],{"class":981,"line":1279},[979,2850,2851],{"class":985},"  volumeClaimTemplates",[979,2853,1014],{"class":989},[979,2855,2856,2858,2860],{"class":981,"line":1289},[979,2857,1077],{"class":989},[979,2859,1011],{"class":985},[979,2861,1014],{"class":989},[979,2863,2864,2867,2869],{"class":981,"line":2185},[979,2865,2866],{"class":985},"      name",[979,2868,990],{"class":989},[979,2870,2836],{"class":993},[979,2872,2874,2876],{"class":981,"line":2873},34,[979,2875,1860],{"class":985},[979,2877,1014],{"class":989},[979,2879,2881,2884,2886,2889],{"class":981,"line":2880},35,[979,2882,2883],{"class":985},"      accessModes",[979,2885,1438],{"class":989},[979,2887,2888],{"class":993},"\"ReadWriteOnce\"",[979,2890,1450],{"class":989},[979,2892,2894,2897,2899],{"class":981,"line":2893},36,[979,2895,2896],{"class":985},"      storageClassName",[979,2898,990],{"class":989},[979,2900,2901],{"class":993},"\"standard\"\n",[979,2903,2905,2908],{"class":981,"line":2904},37,[979,2906,2907],{"class":985},"      resources",[979,2909,1014],{"class":989},[979,2911,2913,2916],{"class":981,"line":2912},38,[979,2914,2915],{"class":985},"        requests",[979,2917,1014],{"class":989},[979,2919,2921,2924,2926],{"class":981,"line":2920},39,[979,2922,2923],{"class":985},"          storage",[979,2925,990],{"class":989},[979,2927,2928],{"class":993},"10Gi\n",[947,2930,2932],{"id":2931},"statefulset-网络标识","StatefulSet 网络标识",[970,2934,2937],{"className":2935,"code":2936,"language":1539},[1537],"StatefulSet: mysql, replicas: 3\n\nPod 名称:\n- mysql-0\n- mysql-1\n- mysql-2\n\nDNS 名称（需要 Headless Service）:\n- mysql-0.mysql.default.svc.cluster.local\n- mysql-1.mysql.default.svc.cluster.local\n- mysql-2.mysql.default.svc.cluster.local\n",[976,2938,2936],{"__ignoreMap":11},[947,2940,2942],{"id":2941},"headless-service","Headless Service",[896,2944,2945],{},"StatefulSet 需要配合 Headless Service 使用：",[970,2947,2949],{"className":972,"code":2948,"language":974,"meta":11,"style":11},"apiVersion: v1\nkind: Service\nmetadata:\n  name: mysql\nspec:\n  clusterIP: None  # Headless Service\n  selector:\n    app: mysql\n  ports:\n  - port: 3306\n    name: mysql\n",[976,2950,2951,2959,2968,2974,2982,2988,3001,3007,3015,3022,3033],{"__ignoreMap":11},[979,2952,2953,2955,2957],{"class":981,"line":982},[979,2954,986],{"class":985},[979,2956,990],{"class":989},[979,2958,994],{"class":993},[979,2960,2961,2963,2965],{"class":981,"line":997},[979,2962,1000],{"class":985},[979,2964,990],{"class":989},[979,2966,2967],{"class":993},"Service\n",[979,2969,2970,2972],{"class":981,"line":1008},[979,2971,1011],{"class":985},[979,2973,1014],{"class":989},[979,2975,2976,2978,2980],{"class":981,"line":1017},[979,2977,1020],{"class":985},[979,2979,990],{"class":989},[979,2981,2639],{"class":993},[979,2983,2984,2986],{"class":981,"line":1028},[979,2985,1061],{"class":985},[979,2987,1014],{"class":989},[979,2989,2990,2993,2995,2998],{"class":981,"line":1036},[979,2991,2992],{"class":985},"  clusterIP",[979,2994,990],{"class":989},[979,2996,2997],{"class":993},"None",[979,2999,3000],{"class":2208},"  # Headless Service\n",[979,3002,3003,3005],{"class":981,"line":1047},[979,3004,1807],{"class":985},[979,3006,1014],{"class":989},[979,3008,3009,3011,3013],{"class":981,"line":1058},[979,3010,1039],{"class":985},[979,3012,990],{"class":989},[979,3014,2639],{"class":993},[979,3016,3017,3020],{"class":981,"line":1066},[979,3018,3019],{"class":985},"  ports",[979,3021,1014],{"class":989},[979,3023,3024,3026,3029,3031],{"class":981,"line":1074},[979,3025,1077],{"class":989},[979,3027,3028],{"class":985},"port",[979,3030,990],{"class":989},[979,3032,2757],{"class":1117},[979,3034,3035,3038,3040],{"class":981,"line":1087},[979,3036,3037],{"class":985},"    name",[979,3039,990],{"class":989},[979,3041,2639],{"class":993},[892,3043,932],{"id":3044},"daemonset",[896,3046,3047],{},"DaemonSet 确保所有（或部分）节点上运行一个 Pod 副本。",[947,3049,3050],{"id":3050},"典型用途",[900,3052,3053,3056,3059],{},[903,3054,3055],{},"运行集群存储守护程序（如 glusterd、ceph）",[903,3057,3058],{},"运行日志收集守护程序（如 fluentd、logstash）",[903,3060,3061],{},"运行节点监控守护程序（如 Prometheus Node Exporter）",[947,3063,3065],{"id":3064},"daemonset-定义","DaemonSet 定义",[970,3067,3069],{"className":972,"code":3068,"language":974,"meta":11,"style":11},"apiVersion: apps\u002Fv1\nkind: DaemonSet\nmetadata:\n  name: fluentd\n  namespace: kube-system\n  labels:\n    app: fluentd\nspec:\n  selector:\n    matchLabels:\n      app: fluentd\n  template:\n    metadata:\n      labels:\n        app: fluentd\n    spec:\n      tolerations:\n      - key: node-role.kubernetes.io\u002Fcontrol-plane\n        effect: NoSchedule\n      containers:\n      - name: fluentd\n        image: fluentd:v1.14\n        resources:\n          limits:\n            memory: 200Mi\n          requests:\n            cpu: 100m\n            memory: 200Mi\n        volumeMounts:\n        - name: varlog\n          mountPath: \u002Fvar\u002Flog\n        - name: varlibdockercontainers\n          mountPath: \u002Fvar\u002Flib\u002Fdocker\u002Fcontainers\n          readOnly: true\n      volumes:\n      - name: varlog\n        hostPath:\n          path: \u002Fvar\u002Flog\n      - name: varlibdockercontainers\n        hostPath:\n          path: \u002Fvar\u002Flib\u002Fdocker\u002Fcontainers\n",[976,3070,3071,3079,3088,3094,3103,3113,3119,3127,3133,3139,3145,3153,3159,3165,3171,3179,3185,3192,3204,3214,3220,3230,3239,3245,3251,3260,3266,3274,3282,3288,3299,3308,3319,3328,3338,3345,3355,3362,3371,3381,3388],{"__ignoreMap":11},[979,3072,3073,3075,3077],{"class":981,"line":982},[979,3074,986],{"class":985},[979,3076,990],{"class":989},[979,3078,1748],{"class":993},[979,3080,3081,3083,3085],{"class":981,"line":997},[979,3082,1000],{"class":985},[979,3084,990],{"class":989},[979,3086,3087],{"class":993},"DaemonSet\n",[979,3089,3090,3092],{"class":981,"line":1008},[979,3091,1011],{"class":985},[979,3093,1014],{"class":989},[979,3095,3096,3098,3100],{"class":981,"line":1017},[979,3097,1020],{"class":985},[979,3099,990],{"class":989},[979,3101,3102],{"class":993},"fluentd\n",[979,3104,3105,3108,3110],{"class":981,"line":1028},[979,3106,3107],{"class":985},"  namespace",[979,3109,990],{"class":989},[979,3111,3112],{"class":993},"kube-system\n",[979,3114,3115,3117],{"class":981,"line":1036},[979,3116,1031],{"class":985},[979,3118,1014],{"class":989},[979,3120,3121,3123,3125],{"class":981,"line":1047},[979,3122,1039],{"class":985},[979,3124,990],{"class":989},[979,3126,3102],{"class":993},[979,3128,3129,3131],{"class":981,"line":1058},[979,3130,1061],{"class":985},[979,3132,1014],{"class":989},[979,3134,3135,3137],{"class":981,"line":1066},[979,3136,1807],{"class":985},[979,3138,1014],{"class":989},[979,3140,3141,3143],{"class":981,"line":1074},[979,3142,1814],{"class":985},[979,3144,1014],{"class":989},[979,3146,3147,3149,3151],{"class":981,"line":1087},[979,3148,1821],{"class":985},[979,3150,990],{"class":989},[979,3152,3102],{"class":993},[979,3154,3155,3157],{"class":981,"line":1098},[979,3156,1830],{"class":985},[979,3158,1014],{"class":989},[979,3160,3161,3163],{"class":981,"line":1106},[979,3162,1837],{"class":985},[979,3164,1014],{"class":989},[979,3166,3167,3169],{"class":981,"line":1121},[979,3168,1844],{"class":985},[979,3170,1014],{"class":989},[979,3172,3173,3175,3177],{"class":981,"line":1129},[979,3174,1851],{"class":985},[979,3176,990],{"class":989},[979,3178,3102],{"class":993},[979,3180,3181,3183],{"class":981,"line":1137},[979,3182,1860],{"class":985},[979,3184,1014],{"class":989},[979,3186,3187,3190],{"class":981,"line":1148},[979,3188,3189],{"class":985},"      tolerations",[979,3191,1014],{"class":989},[979,3193,3194,3196,3199,3201],{"class":981,"line":1159},[979,3195,1874],{"class":989},[979,3197,3198],{"class":985},"key",[979,3200,990],{"class":989},[979,3202,3203],{"class":993},"node-role.kubernetes.io\u002Fcontrol-plane\n",[979,3205,3206,3209,3211],{"class":981,"line":1167},[979,3207,3208],{"class":985},"        effect",[979,3210,990],{"class":989},[979,3212,3213],{"class":993},"NoSchedule\n",[979,3215,3216,3218],{"class":981,"line":1177},[979,3217,1867],{"class":985},[979,3219,1014],{"class":989},[979,3221,3222,3224,3226,3228],{"class":981,"line":1187},[979,3223,1874],{"class":989},[979,3225,1080],{"class":985},[979,3227,990],{"class":989},[979,3229,3102],{"class":993},[979,3231,3232,3234,3236],{"class":981,"line":1195},[979,3233,1885],{"class":985},[979,3235,990],{"class":989},[979,3237,3238],{"class":993},"fluentd:v1.14\n",[979,3240,3241,3243],{"class":981,"line":1203},[979,3242,2137],{"class":985},[979,3244,1014],{"class":989},[979,3246,3247,3249],{"class":981,"line":1214},[979,3248,2171],{"class":985},[979,3250,1014],{"class":989},[979,3252,3253,3255,3257],{"class":981,"line":1224},[979,3254,2161],{"class":985},[979,3256,990],{"class":989},[979,3258,3259],{"class":993},"200Mi\n",[979,3261,3262,3264],{"class":981,"line":1235},[979,3263,2144],{"class":985},[979,3265,1014],{"class":989},[979,3267,3268,3270,3272],{"class":981,"line":1246},[979,3269,2151],{"class":985},[979,3271,990],{"class":989},[979,3273,2156],{"class":993},[979,3275,3276,3278,3280],{"class":981,"line":1254},[979,3277,2161],{"class":985},[979,3279,990],{"class":989},[979,3281,3259],{"class":993},[979,3283,3284,3286],{"class":981,"line":1261},[979,3285,2823],{"class":985},[979,3287,1014],{"class":989},[979,3289,3290,3292,3294,3296],{"class":981,"line":1270},[979,3291,1901],{"class":989},[979,3293,1080],{"class":985},[979,3295,990],{"class":989},[979,3297,3298],{"class":993},"varlog\n",[979,3300,3301,3303,3305],{"class":981,"line":1279},[979,3302,2841],{"class":985},[979,3304,990],{"class":989},[979,3306,3307],{"class":993},"\u002Fvar\u002Flog\n",[979,3309,3310,3312,3314,3316],{"class":981,"line":1289},[979,3311,1901],{"class":989},[979,3313,1080],{"class":985},[979,3315,990],{"class":989},[979,3317,3318],{"class":993},"varlibdockercontainers\n",[979,3320,3321,3323,3325],{"class":981,"line":2185},[979,3322,2841],{"class":985},[979,3324,990],{"class":989},[979,3326,3327],{"class":993},"\u002Fvar\u002Flib\u002Fdocker\u002Fcontainers\n",[979,3329,3330,3333,3335],{"class":981,"line":2873},[979,3331,3332],{"class":985},"          readOnly",[979,3334,990],{"class":989},[979,3336,3337],{"class":1117},"true\n",[979,3339,3340,3343],{"class":981,"line":2880},[979,3341,3342],{"class":985},"      volumes",[979,3344,1014],{"class":989},[979,3346,3347,3349,3351,3353],{"class":981,"line":2893},[979,3348,1874],{"class":989},[979,3350,1080],{"class":985},[979,3352,990],{"class":989},[979,3354,3298],{"class":993},[979,3356,3357,3360],{"class":981,"line":2904},[979,3358,3359],{"class":985},"        hostPath",[979,3361,1014],{"class":989},[979,3363,3364,3367,3369],{"class":981,"line":2912},[979,3365,3366],{"class":985},"          path",[979,3368,990],{"class":989},[979,3370,3307],{"class":993},[979,3372,3373,3375,3377,3379],{"class":981,"line":2920},[979,3374,1874],{"class":989},[979,3376,1080],{"class":985},[979,3378,990],{"class":989},[979,3380,3318],{"class":993},[979,3382,3384,3386],{"class":981,"line":3383},40,[979,3385,3359],{"class":985},[979,3387,1014],{"class":989},[979,3389,3391,3393,3395],{"class":981,"line":3390},41,[979,3392,3366],{"class":985},[979,3394,990],{"class":989},[979,3396,3327],{"class":993},[947,3398,3399],{"id":3399},"仅在部分节点运行",[896,3401,3402],{},"使用节点选择器：",[970,3404,3406],{"className":972,"code":3405,"language":974,"meta":11,"style":11},"spec:\n  template:\n    spec:\n      nodeSelector:\n        disk: ssd\n",[976,3407,3408,3414,3420,3426,3433],{"__ignoreMap":11},[979,3409,3410,3412],{"class":981,"line":982},[979,3411,1061],{"class":985},[979,3413,1014],{"class":989},[979,3415,3416,3418],{"class":981,"line":997},[979,3417,1830],{"class":985},[979,3419,1014],{"class":989},[979,3421,3422,3424],{"class":981,"line":1008},[979,3423,1860],{"class":985},[979,3425,1014],{"class":989},[979,3427,3428,3431],{"class":981,"line":1017},[979,3429,3430],{"class":985},"      nodeSelector",[979,3432,1014],{"class":989},[979,3434,3435,3438,3440],{"class":981,"line":1028},[979,3436,3437],{"class":985},"        disk",[979,3439,990],{"class":989},[979,3441,3442],{"class":993},"ssd\n",[892,3444,3446],{"id":3445},"job-和-cronjob","Job 和 CronJob",[947,3448,3450],{"id":3449},"job","Job",[896,3452,3453],{},"Job 用于运行一次性任务，确保任务成功完成。",[970,3455,3457],{"className":972,"code":3456,"language":974,"meta":11,"style":11},"apiVersion: batch\u002Fv1\nkind: Job\nmetadata:\n  name: backup-job\nspec:\n  completions: 1      # 需要成功完成的 Pod 数\n  parallelism: 1      # 并行运行的 Pod 数\n  backoffLimit: 4     # 失败重试次数\n  activeDeadlineSeconds: 600  # 超时时间\n  template:\n    spec:\n      restartPolicy: Never  # Job 必须设置为 Never 或 OnFailure\n      containers:\n      - name: backup\n        image: backup-tool:1.0\n        command: [\"\u002Fbin\u002Fsh\", \"-c\", \"backup.sh\"]\n",[976,3458,3459,3468,3477,3483,3492,3498,3511,3523,3536,3549,3555,3561,3574,3580,3591,3600],{"__ignoreMap":11},[979,3460,3461,3463,3465],{"class":981,"line":982},[979,3462,986],{"class":985},[979,3464,990],{"class":989},[979,3466,3467],{"class":993},"batch\u002Fv1\n",[979,3469,3470,3472,3474],{"class":981,"line":997},[979,3471,1000],{"class":985},[979,3473,990],{"class":989},[979,3475,3476],{"class":993},"Job\n",[979,3478,3479,3481],{"class":981,"line":1008},[979,3480,1011],{"class":985},[979,3482,1014],{"class":989},[979,3484,3485,3487,3489],{"class":981,"line":1017},[979,3486,1020],{"class":985},[979,3488,990],{"class":989},[979,3490,3491],{"class":993},"backup-job\n",[979,3493,3494,3496],{"class":981,"line":1028},[979,3495,1061],{"class":985},[979,3497,1014],{"class":989},[979,3499,3500,3503,3505,3508],{"class":981,"line":1036},[979,3501,3502],{"class":985},"  completions",[979,3504,990],{"class":989},[979,3506,3507],{"class":1117},"1",[979,3509,3510],{"class":2208},"      # 需要成功完成的 Pod 数\n",[979,3512,3513,3516,3518,3520],{"class":981,"line":1047},[979,3514,3515],{"class":985},"  parallelism",[979,3517,990],{"class":989},[979,3519,3507],{"class":1117},[979,3521,3522],{"class":2208},"      # 并行运行的 Pod 数\n",[979,3524,3525,3528,3530,3533],{"class":981,"line":1058},[979,3526,3527],{"class":985},"  backoffLimit",[979,3529,990],{"class":989},[979,3531,3532],{"class":1117},"4",[979,3534,3535],{"class":2208},"     # 失败重试次数\n",[979,3537,3538,3541,3543,3546],{"class":981,"line":1066},[979,3539,3540],{"class":985},"  activeDeadlineSeconds",[979,3542,990],{"class":989},[979,3544,3545],{"class":1117},"600",[979,3547,3548],{"class":2208},"  # 超时时间\n",[979,3550,3551,3553],{"class":981,"line":1074},[979,3552,1830],{"class":985},[979,3554,1014],{"class":989},[979,3556,3557,3559],{"class":981,"line":1087},[979,3558,1860],{"class":985},[979,3560,1014],{"class":989},[979,3562,3563,3566,3568,3571],{"class":981,"line":1098},[979,3564,3565],{"class":985},"      restartPolicy",[979,3567,990],{"class":989},[979,3569,3570],{"class":993},"Never",[979,3572,3573],{"class":2208},"  # Job 必须设置为 Never 或 OnFailure\n",[979,3575,3576,3578],{"class":981,"line":1106},[979,3577,1867],{"class":985},[979,3579,1014],{"class":989},[979,3581,3582,3584,3586,3588],{"class":981,"line":1121},[979,3583,1874],{"class":989},[979,3585,1080],{"class":985},[979,3587,990],{"class":989},[979,3589,3590],{"class":993},"backup\n",[979,3592,3593,3595,3597],{"class":981,"line":1129},[979,3594,1885],{"class":985},[979,3596,990],{"class":989},[979,3598,3599],{"class":993},"backup-tool:1.0\n",[979,3601,3602,3605,3607,3609,3611,3613,3615,3618],{"class":981,"line":1137},[979,3603,3604],{"class":985},"        command",[979,3606,1438],{"class":989},[979,3608,1441],{"class":993},[979,3610,1444],{"class":989},[979,3612,1447],{"class":993},[979,3614,1444],{"class":989},[979,3616,3617],{"class":993},"\"backup.sh\"",[979,3619,1450],{"class":989},[947,3621,3623],{"id":3622},"并行-job","并行 Job",[970,3625,3627],{"className":972,"code":3626,"language":974,"meta":11,"style":11},"apiVersion: batch\u002Fv1\nkind: Job\nmetadata:\n  name: parallel-job\nspec:\n  completions: 10     # 需要完成 10 个任务\n  parallelism: 3      # 同时运行 3 个 Pod\n  template:\n    spec:\n      restartPolicy: Never\n      containers:\n      - name: worker\n        image: worker:1.0\n",[976,3628,3629,3637,3645,3651,3660,3666,3678,3690,3696,3702,3711,3717,3728],{"__ignoreMap":11},[979,3630,3631,3633,3635],{"class":981,"line":982},[979,3632,986],{"class":985},[979,3634,990],{"class":989},[979,3636,3467],{"class":993},[979,3638,3639,3641,3643],{"class":981,"line":997},[979,3640,1000],{"class":985},[979,3642,990],{"class":989},[979,3644,3476],{"class":993},[979,3646,3647,3649],{"class":981,"line":1008},[979,3648,1011],{"class":985},[979,3650,1014],{"class":989},[979,3652,3653,3655,3657],{"class":981,"line":1017},[979,3654,1020],{"class":985},[979,3656,990],{"class":989},[979,3658,3659],{"class":993},"parallel-job\n",[979,3661,3662,3664],{"class":981,"line":1028},[979,3663,1061],{"class":985},[979,3665,1014],{"class":989},[979,3667,3668,3670,3672,3675],{"class":981,"line":1036},[979,3669,3502],{"class":985},[979,3671,990],{"class":989},[979,3673,3674],{"class":1117},"10",[979,3676,3677],{"class":2208},"     # 需要完成 10 个任务\n",[979,3679,3680,3682,3684,3687],{"class":981,"line":1047},[979,3681,3515],{"class":985},[979,3683,990],{"class":989},[979,3685,3686],{"class":1117},"3",[979,3688,3689],{"class":2208},"      # 同时运行 3 个 Pod\n",[979,3691,3692,3694],{"class":981,"line":1058},[979,3693,1830],{"class":985},[979,3695,1014],{"class":989},[979,3697,3698,3700],{"class":981,"line":1066},[979,3699,1860],{"class":985},[979,3701,1014],{"class":989},[979,3703,3704,3706,3708],{"class":981,"line":1074},[979,3705,3565],{"class":985},[979,3707,990],{"class":989},[979,3709,3710],{"class":993},"Never\n",[979,3712,3713,3715],{"class":981,"line":1087},[979,3714,1867],{"class":985},[979,3716,1014],{"class":989},[979,3718,3719,3721,3723,3725],{"class":981,"line":1098},[979,3720,1874],{"class":989},[979,3722,1080],{"class":985},[979,3724,990],{"class":989},[979,3726,3727],{"class":993},"worker\n",[979,3729,3730,3732,3734],{"class":981,"line":1106},[979,3731,1885],{"class":985},[979,3733,990],{"class":989},[979,3735,3736],{"class":993},"worker:1.0\n",[947,3738,3740],{"id":3739},"cronjob","CronJob",[896,3742,3743],{},"CronJob 用于运行定时任务。",[970,3745,3747],{"className":972,"code":3746,"language":974,"meta":11,"style":11},"apiVersion: batch\u002Fv1\nkind: CronJob\nmetadata:\n  name: daily-backup\nspec:\n  schedule: \"0 2 * * *\"  # 每天凌晨 2 点执行\n  concurrencyPolicy: Forbid  # 禁止并发执行\n  successfulJobsHistoryLimit: 3\n  failedJobsHistoryLimit: 1\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          restartPolicy: OnFailure\n          containers:\n          - name: backup\n            image: backup-tool:1.0\n            command: [\"\u002Fbin\u002Fsh\", \"-c\", \"backup.sh\"]\n",[976,3748,3749,3757,3766,3772,3781,3787,3800,3813,3822,3831,3838,3844,3851,3858,3868,3875,3886,3895],{"__ignoreMap":11},[979,3750,3751,3753,3755],{"class":981,"line":982},[979,3752,986],{"class":985},[979,3754,990],{"class":989},[979,3756,3467],{"class":993},[979,3758,3759,3761,3763],{"class":981,"line":997},[979,3760,1000],{"class":985},[979,3762,990],{"class":989},[979,3764,3765],{"class":993},"CronJob\n",[979,3767,3768,3770],{"class":981,"line":1008},[979,3769,1011],{"class":985},[979,3771,1014],{"class":989},[979,3773,3774,3776,3778],{"class":981,"line":1017},[979,3775,1020],{"class":985},[979,3777,990],{"class":989},[979,3779,3780],{"class":993},"daily-backup\n",[979,3782,3783,3785],{"class":981,"line":1028},[979,3784,1061],{"class":985},[979,3786,1014],{"class":989},[979,3788,3789,3792,3794,3797],{"class":981,"line":1036},[979,3790,3791],{"class":985},"  schedule",[979,3793,990],{"class":989},[979,3795,3796],{"class":993},"\"0 2 * * *\"",[979,3798,3799],{"class":2208},"  # 每天凌晨 2 点执行\n",[979,3801,3802,3805,3807,3810],{"class":981,"line":1047},[979,3803,3804],{"class":985},"  concurrencyPolicy",[979,3806,990],{"class":989},[979,3808,3809],{"class":993},"Forbid",[979,3811,3812],{"class":2208},"  # 禁止并发执行\n",[979,3814,3815,3818,3820],{"class":981,"line":1058},[979,3816,3817],{"class":985},"  successfulJobsHistoryLimit",[979,3819,990],{"class":989},[979,3821,1802],{"class":1117},[979,3823,3824,3827,3829],{"class":981,"line":1066},[979,3825,3826],{"class":985},"  failedJobsHistoryLimit",[979,3828,990],{"class":989},[979,3830,2051],{"class":1117},[979,3832,3833,3836],{"class":981,"line":1074},[979,3834,3835],{"class":985},"  jobTemplate",[979,3837,1014],{"class":989},[979,3839,3840,3842],{"class":981,"line":1087},[979,3841,1860],{"class":985},[979,3843,1014],{"class":989},[979,3845,3846,3849],{"class":981,"line":1098},[979,3847,3848],{"class":985},"      template",[979,3850,1014],{"class":989},[979,3852,3853,3856],{"class":981,"line":1106},[979,3854,3855],{"class":985},"        spec",[979,3857,1014],{"class":989},[979,3859,3860,3863,3865],{"class":981,"line":1121},[979,3861,3862],{"class":985},"          restartPolicy",[979,3864,990],{"class":989},[979,3866,3867],{"class":993},"OnFailure\n",[979,3869,3870,3873],{"class":981,"line":1129},[979,3871,3872],{"class":985},"          containers",[979,3874,1014],{"class":989},[979,3876,3877,3880,3882,3884],{"class":981,"line":1137},[979,3878,3879],{"class":989},"          - ",[979,3881,1080],{"class":985},[979,3883,990],{"class":989},[979,3885,3590],{"class":993},[979,3887,3888,3891,3893],{"class":981,"line":1148},[979,3889,3890],{"class":985},"            image",[979,3892,990],{"class":989},[979,3894,3599],{"class":993},[979,3896,3897,3900,3902,3904,3906,3908,3910,3912],{"class":981,"line":1159},[979,3898,3899],{"class":985},"            command",[979,3901,1438],{"class":989},[979,3903,1441],{"class":993},[979,3905,1444],{"class":989},[979,3907,1447],{"class":993},[979,3909,1444],{"class":989},[979,3911,3617],{"class":993},[979,3913,1450],{"class":989},[896,3915,3916],{},[906,3917,3918],{},"Cron 表达式：",[970,3920,3923],{"className":3921,"code":3922,"language":1539},[1537],"┌───────────── 分钟 (0 - 59)\n│ ┌───────────── 小时 (0 - 23)\n│ │ ┌───────────── 日 (1 - 31)\n│ │ │ ┌───────────── 月 (1 - 12)\n│ │ │ │ ┌───────────── 星期 (0 - 6，0 是周日)\n│ │ │ │ │\n* * * * *\n\n示例：\n\"0 * * * *\"    每小时\n\"0 0 * * *\"    每天午夜\n\"0 0 * * 0\"    每周日午夜\n\"0 0 1 * *\"    每月 1 日午夜\n\"*\u002F5 * * * *\"  每 5 分钟\n",[976,3924,3922],{"__ignoreMap":11},[892,3926,3927],{"id":3927},"工作负载对比",[3929,3930,3931,3950],"table",{},[3932,3933,3934],"thead",{},[3935,3936,3937,3942,3944,3946,3948],"tr",{},[3938,3939,3941],"th",{"align":3940},"center","特性",[3938,3943,920],{"align":3940},[3938,3945,926],{"align":3940},[3938,3947,932],{"align":3940},[3938,3949,938],{"align":3940},[3951,3952,3953,3971,3987,4004,4021],"tbody",{},[3935,3954,3955,3959,3962,3965,3968],{},[3956,3957,3958],"td",{"align":3940},"用途",[3956,3960,3961],{"align":3940},"无状态应用",[3956,3963,3964],{"align":3940},"有状态应用",[3956,3966,3967],{"align":3940},"节点守护程序",[3956,3969,3970],{"align":3940},"批处理任务",[3935,3972,3973,3976,3979,3982,3985],{},[3956,3974,3975],{"align":3940},"Pod 标识",[3956,3977,3978],{"align":3940},"随机",[3956,3980,3981],{"align":3940},"固定顺序",[3956,3983,3984],{"align":3940},"节点绑定",[3956,3986,3978],{"align":3940},[3935,3988,3989,3992,3995,3998,4001],{},[3956,3990,3991],{"align":3940},"存储",[3956,3993,3994],{"align":3940},"共享",[3956,3996,3997],{"align":3940},"独立",[3956,3999,4000],{"align":3940},"节点本地",[3956,4002,4003],{"align":3940},"临时",[3935,4005,4006,4009,4012,4015,4018],{},[3956,4007,4008],{"align":3940},"扩缩容",[3956,4010,4011],{"align":3940},"任意顺序",[3956,4013,4014],{"align":3940},"有序",[3956,4016,4017],{"align":3940},"节点数决定",[3956,4019,4020],{"align":3940},"N\u002FA",[3935,4022,4023,4026,4029,4032,4034],{},[3956,4024,4025],{"align":3940},"更新策略",[3956,4027,4028],{"align":3940},"滚动\u002F重建",[3956,4030,4031],{"align":3940},"滚动",[3956,4033,4031],{"align":3940},[3956,4035,4020],{"align":3940},[4037,4038,4040],"note",{"title":4039},"选择指南","\n- **无状态 Web 应用** → Deployment\n- **数据库、消息队列** → StatefulSet\n- **日志收集、监控代理** → DaemonSet\n- **数据处理、备份任务** → Job\u002FCronJob\n",[4042,4043,4044],"style",{},"html pre.shiki code .sovSZ, html code.shiki .sovSZ{--shiki-light:#22863A;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":11,"searchDepth":997,"depth":997,"links":4046},[4047,4048,4055,4059,4067,4073,4078,4083],{"id":894,"depth":997,"text":894},{"id":942,"depth":997,"text":908,"children":4049},[4050,4051,4052,4053,4054],{"id":949,"depth":1008,"text":950},{"id":967,"depth":1008,"text":968},{"id":1299,"depth":1008,"text":1300},{"id":1532,"depth":1008,"text":1533},{"id":1567,"depth":1008,"text":1568},{"id":1727,"depth":997,"text":914,"children":4056},[4057,4058],{"id":1733,"depth":1008,"text":1734},{"id":1910,"depth":1008,"text":1911},{"id":1925,"depth":997,"text":920,"children":4060},[4061,4062,4063,4064,4065,4066],{"id":1931,"depth":1008,"text":1932},{"id":2195,"depth":1008,"text":2196},{"id":2257,"depth":1008,"text":2258},{"id":2335,"depth":1008,"text":2335},{"id":2403,"depth":1008,"text":2404},{"id":2494,"depth":1008,"text":2494},{"id":2577,"depth":997,"text":926,"children":4068},[4069,4070,4071,4072],{"id":2583,"depth":1008,"text":2584},{"id":2601,"depth":1008,"text":2602},{"id":2931,"depth":1008,"text":2932},{"id":2941,"depth":1008,"text":2942},{"id":3044,"depth":997,"text":932,"children":4074},[4075,4076,4077],{"id":3050,"depth":1008,"text":3050},{"id":3064,"depth":1008,"text":3065},{"id":3399,"depth":1008,"text":3399},{"id":3445,"depth":997,"text":3446,"children":4079},[4080,4081,4082],{"id":3449,"depth":1008,"text":3450},{"id":3622,"depth":1008,"text":3623},{"id":3739,"depth":1008,"text":3740},{"id":3927,"depth":997,"text":3927},"md",{},{"title":666,"description":11},"tutorials\u002Fcloud\u002Fkubernetes\u002Fk8s-workload","i05DX9SX2yx4e8--QiC6ZtP3L27h-EU1GFQMlDN_feM",1775496415302]