<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Kubernetes on chengzhycn&#39;s blog</title>
		<link>https://blog.jinzhi.site/tags/kubernetes/</link>
		<description>Recent content in Kubernetes on chengzhycn&#39;s blog</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Thu, 16 Oct 2025 16:18:28 +0800</lastBuildDate>
		
			<atom:link href="https://blog.jinzhi.site/tags/kubernetes/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Introducing Kubernetes Gateway API</title>
				<link>https://blog.jinzhi.site/posts/2025-10/introducing-kubernetes-gateway-api/</link>
				<pubDate>Thu, 16 Oct 2025 16:18:28 +0800</pubDate>
				<guid>https://blog.jinzhi.site/posts/2025-10/introducing-kubernetes-gateway-api/</guid>
				<description>&lt;p&gt;Kubernetes Gateway API 是一个由 SIG-Network 孵化和维护的 &lt;strong&gt;开放、标准、可扩展的 API&lt;/strong&gt;，旨在为 Kubernetes 集群内部和外部的统一流量管理提供更强大、更灵活、更具表现力的方式。&lt;/p&gt;&#xA;&lt;p&gt;它被视为 &lt;strong&gt;Ingress API 的继任者和演进&lt;/strong&gt;，解决了 Ingress 在灵活性、可扩展性、角色分离和 L4-L7 支持方面的诸多局限性。Gateway API 不仅仅关注 HTTP 流量，还支持 TCP、UDP 以及 TLS 路由，覆盖了更广泛的网络场景。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么需要-gateway-api&#34;&gt;为什么需要 Gateway API&lt;/h2&gt;&#xA;&lt;p&gt;在 Gateway API 出现之前，Kubernetes 主要使用 &lt;code&gt;Ingress&lt;/code&gt; 来管理集群的 L7 HTTP/HTTPS 流量。然而，Ingress 存在一些固有的局限性，促使了 Gateway API 的诞生：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;功能有限：&lt;/strong&gt; Ingress 本身功能非常基础，只支持主机和路径路由。任何高级功能（如流量拆分、重写、限速、认证等）都必须通过特定于 Ingress 控制器（如 NGINX Ingress, Traefik, AWS ALB Ingress 等）的 &lt;strong&gt;注解（Annotations）&lt;/strong&gt; 来实现。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;可移植性差：&lt;/strong&gt; 注解是特定于实现的，这意味着用 NGINX Ingress 注解编写的规则无法直接移植到 Traefik 或其他 Ingress 控制器上，造成供应商锁定。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;缺乏角色分离：&lt;/strong&gt; Ingress 资源将网络基础设施的配置（例如暴露的端口、TLS 证书）与应用程序的路由规则混在一起，这使得集群管理员和应用开发者之间的职责难以清晰划分。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;L4 流量支持不足：&lt;/strong&gt; Ingress 仅专注于 HTTP/HTTPS (L7) 流量。对于 TCP、UDP 或 TLS 直通（Passthrough）等 L4 流量，通常需要使用 &lt;code&gt;LoadBalancer&lt;/code&gt; 类型的 Service 或其他的解决方案。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;表达能力有限：&lt;/strong&gt; 难以表达复杂的路由策略，如基于请求头、查询参数的匹配，细粒度的流量权重分配等。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Gateway API 旨在解决这些问题，提供一个更加健壮和通用的流量管理框架。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kubernetes CSI 简介</title>
				<link>https://blog.jinzhi.site/posts/2025-06/kubernetes-csi-%E7%AE%80%E4%BB%8B/</link>
				<pubDate>Tue, 24 Jun 2025 09:57:28 +0800</pubDate>
				<guid>https://blog.jinzhi.site/posts/2025-06/kubernetes-csi-%E7%AE%80%E4%BB%8B/</guid>
				<description>&lt;p&gt;K8s CSI 是 Kubernetes 中非常重要的一个组件，它解决了存储与计算分离的复杂性，并为容器化应用提供了持久化存储的能力。&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-基本概念&#34;&gt;1. 基本概念&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;CSI (Container Storage Interface)&lt;/strong&gt; 译为 &lt;strong&gt;容器存储接口&lt;/strong&gt;。它是由 Kubernetes 社区与存储厂商共同制定的一套标准接口规范。&lt;/p&gt;&#xA;&lt;p&gt;在 CSI 出现之前，Kubernetes 存储插件的开发和管理存在以下痛点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;紧耦合问题：&lt;/strong&gt; Kubernetes 内部集成了大量的存储驱动（In-tree 存储插件），例如 AWS EBS、GCE PD、Azure Disk、Ceph RBD 等。这意味着每当存储厂商需要支持 Kubernetes 时，他们都必须将其存储驱动代码提交到 Kubernetes 的核心代码库中。这种方式导致了：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kubernetes 代码库臃肿：&lt;/strong&gt; 集成了大量存储逻辑，增加了核心代码的复杂性和维护难度。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;发布周期长：&lt;/strong&gt; 存储驱动的更新需要跟随 Kubernetes 的发布周期，新功能和 bug 修复不能及时推送到用户。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;存储厂商开发受限：&lt;/strong&gt; 每次更新都需要与 Kubernetes 社区协调，开发和测试流程繁琐。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;兼容性问题：&lt;/strong&gt; 不同存储厂商的存储系统差异巨大，缺乏统一的接口规范，导致存储系统与 Kubernetes 之间的集成困难。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;CSI 的目标就是解决这些问题，实现存储系统与 Kubernetes 的解耦。&lt;/strong&gt; 它定义了一套通用的接口，允许任何存储厂商开发自己的 CSI 驱动，然后通过这些驱动来与 Kubernetes 进行交互，从而为容器提供存储服务。&lt;/p&gt;&#xA;&lt;h3 id=&#34;11-资源定义&#34;&gt;1.1. 资源定义&lt;/h3&gt;&#xA;&lt;h3 id=&#34;111-volumes&#34;&gt;1.1.1. Volumes&lt;/h3&gt;&#xA;&lt;p&gt;Volumes 是 Kubernetes 中 Pod 通过文件系统访问和共享数据的抽象。它主要提供了如下功能：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;通过 ConfigMap 或者 Secret 共享配置；&lt;/li&gt;&#xA;&lt;li&gt;跨容器、跨 Pod 甚至跨 Node 共享数据；&lt;/li&gt;&#xA;&lt;li&gt;数据持久化。在 Pod 销毁之后仍能继续访问数据。&#xA;对于 Pod 来说，Volumes 通过 &lt;code&gt;.spec.volumes&lt;/code&gt; 提供给 Pod，容器通过 &lt;code&gt;.spec.containers[*].volumeMounts&lt;/code&gt; 来将指定 Volumes 挂载到指定目录。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;112-persistent-volumes-和-persistent-volumes-claim&#34;&gt;1.1.2. Persistent Volumes 和 Persistent Volumes Claim&lt;/h3&gt;&#xA;&lt;p&gt;PV 和 PVC 提供了两套 API 将存储的提供和消费分离。&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
