<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>首页 on 云原生技术栈</title><link>https://blog.ivanwz.com/</link><description>Recent content in 首页 on 云原生技术栈</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><managingEditor>hello@example.com (Ivan)</managingEditor><webMaster>hello@example.com (Ivan)</webMaster><copyright>© 2026 Ivan</copyright><lastBuildDate>Fri, 19 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.ivanwz.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Linux 性能排查的第一组命令</title><link>https://blog.ivanwz.com/posts/posts/linux/linux-observability-basics/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><author>hello@example.com (Ivan)</author><guid>https://blog.ivanwz.com/posts/posts/linux/linux-observability-basics/</guid><description>&lt;p&gt;Linux 故障排查的第一步不是立刻修改配置，而是先建立足够清晰的观察面。CPU、内存、磁盘和网络通常能解释大多数系统层面的异常。&lt;/p&gt;

&lt;h2 class="relative group"&gt;CPU
 &lt;div id="cpu" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cpu" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;top&lt;/code&gt; 或 &lt;code&gt;htop&lt;/code&gt; 可以快速判断系统是否存在 CPU 饱和。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;top
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uptime
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mpstat &lt;span class="m"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;重点关注 load average、用户态 CPU、系统态 CPU、iowait 和上下文切换。如果 load 很高但 CPU 使用率不高，需要进一步判断是否存在 IO 阻塞。&lt;/p&gt;</description></item><item><title>Rancher Server 一键安装脚本使用说明</title><link>https://blog.ivanwz.com/posts/posts/rancher/rancher-install-shell/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><author>hello@example.com (Ivan)</author><guid>https://blog.ivanwz.com/posts/posts/rancher/rancher-install-shell/</guid><description>&lt;h2 class="relative group"&gt;一、文档说明
 &lt;div id="一文档说明" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%80%e6%96%87%e6%a1%a3%e8%af%b4%e6%98%8e" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;本文档用于说明 &lt;code&gt;install-rancher-server.sh&lt;/code&gt; 的使用方法。&lt;/p&gt;
&lt;p&gt;脚本功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;自动安装 Helm&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自动配置 RKE2 Ingress Nginx Forward Header&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自动添加 Rancher Helm Repo&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持 Rancher Prime&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持 Rancher Prime GC&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持指定 Rancher 版本&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持指定 Rancher 域名&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持 Harbor 私有镜像仓库&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持 Helm Upgrade/Install&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h1 class="relative group"&gt;二、前置条件
 &lt;div id="二前置条件" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%ba%8c%e5%89%8d%e7%bd%ae%e6%9d%a1%e4%bb%b6" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;Kubernetes 集群
 &lt;div id="kubernetes-集群" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#kubernetes-%e9%9b%86%e7%be%a4" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;已安装并运行：&lt;/p&gt;</description></item><item><title>RKE2集群一键安装脚本使用说明</title><link>https://blog.ivanwz.com/posts/posts/rke2/rke2-install-shell/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><author>hello@example.com (Ivan)</author><guid>https://blog.ivanwz.com/posts/posts/rke2/rke2-install-shell/</guid><description>&lt;h2 class="relative group"&gt;文档说明
 &lt;div id="文档说明" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%96%87%e6%a1%a3%e8%af%b4%e6%98%8e" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;本文档用于通过 Harbor Proxy Cache 部署 RKE2 集群。&lt;/p&gt;
&lt;p&gt;当前环境：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;项目&lt;/th&gt;
					&lt;th&gt;值&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Harbor地址&lt;/td&gt;
					&lt;td&gt;harbor.rancherlsp.com&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Harbor版本&lt;/td&gt;
					&lt;td&gt;2.14.4&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;RKE2安装方式&lt;/td&gt;
					&lt;td&gt;官方安装脚本&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;镜像加速方式&lt;/td&gt;
					&lt;td&gt;Harbor Proxy Cache&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;容器运行时&lt;/td&gt;
					&lt;td&gt;containerd&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kubectl安装方式&lt;/td&gt;
					&lt;td&gt;RKE2内置&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;crictl安装方式&lt;/td&gt;
					&lt;td&gt;RKE2内置&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;

&lt;h1 class="relative group"&gt;一、Harbor准备工作
 &lt;div id="一harbor准备工作" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%80harbor%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;1、创建Registry Endpoint
 &lt;div id="1创建registry-endpoint" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1%e5%88%9b%e5%bb%baregistry-endpoint" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;进入：&lt;/p&gt;</description></item><item><title>RKE2通过Harbor Proxy Cache 部署指南</title><link>https://blog.ivanwz.com/posts/posts/rke2/rke2-install-with-harborproxy/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><author>hello@example.com (Ivan)</author><guid>https://blog.ivanwz.com/posts/posts/rke2/rke2-install-with-harborproxy/</guid><description>&lt;h1 class="relative group"&gt;RKE2 通过 Harbor Proxy Cache 部署指南
 &lt;div id="rke2-通过-harbor-proxy-cache-部署指南" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#rke2-%e9%80%9a%e8%bf%87-harbor-proxy-cache-%e9%83%a8%e7%bd%b2%e6%8c%87%e5%8d%97" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;环境信息
 &lt;div id="环境信息" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e4%bf%a1%e6%81%af" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;项目&lt;/th&gt;
					&lt;th&gt;信息&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Harbor版本&lt;/td&gt;
					&lt;td&gt;2.14.4&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Harbor地址&lt;/td&gt;
					&lt;td&gt;harbor.rancherlsp.com&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;RKE2版本&lt;/td&gt;
					&lt;td&gt;v1.34.7+rke2r1&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;镜像代理方式&lt;/td&gt;
					&lt;td&gt;Harbor Proxy Cache&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;容器运行时&lt;/td&gt;
					&lt;td&gt;containerd&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;

&lt;h1 class="relative group"&gt;一、Harbor配置
 &lt;div id="一harbor配置" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%80harbor%e9%85%8d%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;1. 创建Registry Endpoint
 &lt;div id="1-创建registry-endpoint" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-%e5%88%9b%e5%bb%baregistry-endpoint" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;进入：&lt;/p&gt;</description></item><item><title>SUSE Observability 安装部署文档</title><link>https://blog.ivanwz.com/posts/posts/observability/o11y-install/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><author>hello@example.com (Ivan)</author><guid>https://blog.ivanwz.com/posts/posts/observability/o11y-install/</guid><description>&lt;h2 class="relative group"&gt;1. 文档说明
 &lt;div id="1-文档说明" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-%e6%96%87%e6%a1%a3%e8%af%b4%e6%98%8e" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;本文档用于指导在 RKE2 Kubernetes 集群中安装 SUSE Observability。安装过程包含 Longhorn 存储环境准备、离线/私有镜像仓库镜像准备、证书准备、Helm values 配置以及 SUSE Observability 安装。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;说明：本文中的域名、IP、Harbor 地址、用户名、密码、License Key 等均为示例或现场环境值。生产环境中请根据实际情况替换，并避免将明文密码提交到代码仓库或共享文档中。&lt;/p&gt;</description></item><item><title>关于</title><link>https://blog.ivanwz.com/pages/about/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><author>hello@example.com (Ivan)</author><guid>https://blog.ivanwz.com/pages/about/</guid><description>&lt;p&gt;这里是一个面向工程实践的中文技术博客，主要记录 Linux、云原生、AI等方向的知识沉淀。&lt;/p&gt;

&lt;h2 class="relative group"&gt;内容方向
 &lt;div id="内容方向" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%85%e5%ae%b9%e6%96%b9%e5%90%91" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Linux 系统管理、性能分析、故障排查&lt;/li&gt;
&lt;li&gt;Kubernetes、容器、服务网格、平台工程&lt;/li&gt;
&lt;li&gt;AI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;写作原则
 &lt;div id="写作原则" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%99%e4%bd%9c%e5%8e%9f%e5%88%99" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;文章尽量从真实问题出发，保留上下文、命令、配置和排查过程。技术关键词保留英文，正文以中文表达为主。&lt;/p&gt;</description></item><item><title>Kubernetes 工作负载的最小理解模型</title><link>https://blog.ivanwz.com/posts/posts/cloud-native/kubernetes-workload-overview/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><author>hello@example.com (Ivan)</author><guid>https://blog.ivanwz.com/posts/posts/cloud-native/kubernetes-workload-overview/</guid><description>&lt;p&gt;Kubernetes 的对象很多，但初学时可以先把应用发布理解成几个核心对象之间的协作。&lt;/p&gt;

&lt;h2 class="relative group"&gt;Deployment
 &lt;div id="deployment" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#deployment" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Deployment 描述应用副本、镜像版本和滚动更新策略。它负责把期望状态持续同步到集群中。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;demo-api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;demo-api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;demo-api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx:1.27&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;Service
 &lt;div id="service" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#service" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Pod 会变化，Service 提供稳定访问入口。应用之间通常不直接访问 Pod IP，而是访问 Service。&lt;/p&gt;</description></item><item><title>RAG 应用的基础架构拆解</title><link>https://blog.ivanwz.com/posts/posts/ai/llm-rag-starter/</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate><author>hello@example.com (Ivan)</author><guid>https://blog.ivanwz.com/posts/posts/ai/llm-rag-starter/</guid><description>&lt;p&gt;RAG 是把外部知识接入大模型的常见方式。它并不神秘，本质上是一条从文档到答案的工程链路。&lt;/p&gt;

&lt;h2 class="relative group"&gt;文档切分
 &lt;div id="文档切分" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%96%87%e6%a1%a3%e5%88%87%e5%88%86" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;文档需要被切成适合检索的片段。切分太大，召回不精准；切分太小，上下文容易丢失。常见做法是按标题、段落和固定 token 数组合切分。&lt;/p&gt;</description></item><item><title>用 Cloudflare Pages 部署 Hugo 与 Pagefind</title><link>https://blog.ivanwz.com/posts/posts/devops/cloudflare-pages-hugo-pagefind/</link><pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate><author>hello@example.com (Ivan)</author><guid>https://blog.ivanwz.com/posts/posts/devops/cloudflare-pages-hugo-pagefind/</guid><description>&lt;p&gt;静态博客的运维成本很低，适合个人技术博客。Hugo 负责生成页面，Pagefind 负责生成本地搜索索引，Cloudflare Pages 负责自动构建和分发。&lt;/p&gt;

&lt;h2 class="relative group"&gt;构建命令
 &lt;div id="构建命令" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9e%84%e5%bb%ba%e5%91%bd%e4%bb%a4" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;项目中的 &lt;code&gt;package.json&lt;/code&gt; 提供了生产构建命令：&lt;/p&gt;</description></item></channel></rss>