<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>K8S on 维克的博客</title><link>https://blogs.wuvikr.top/tags/k8s/</link><description>Recent content in K8S on 维克的博客</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 24 Oct 2026 11:28:31 +0800</lastBuildDate><atom:link href="https://blogs.wuvikr.top/tags/k8s/index.xml" rel="self" type="application/rss+xml"/><item><title>Kaniko 从入门到实践</title><link>https://blogs.wuvikr.top/posts/kaniko%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E8%B7%B5/</link><pubDate>Sat, 24 Oct 2026 11:28:31 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/kaniko%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E8%B7%B5/</guid><description>&lt;h1 id="1-kaniko-是什么">1. Kaniko 是什么&lt;/h1>
&lt;p>&lt;strong>Kaniko&lt;/strong> 是一个由 Google 开源的，在&lt;strong>容器或 Kubernetes 集群内部&lt;/strong>，直接根据 Dockerfile 构建容器镜像的工具。&lt;/p>
&lt;p>它最核心的特点只有一个：&lt;strong>不依赖 Docker daemon（守护进程）&lt;/strong>，所有构建动作都在用户态（userspace）完成。这意味着你不需要在集群里跑一个 Docker 服务，也不需要挂载 &lt;code>/var/run/docker.sock&lt;/code>，就可以构建出标准镜像。&lt;/p>
&lt;h1 id="2-kaniko-解决了什么问题">2. Kaniko 解决了什么问题&lt;/h1>
&lt;p>在 Kaniko 出现之前，CI 里构建镜像的主流做法是 &lt;strong>Docker-in-Docker（DinD）&lt;/strong>。即在 CI Job 里再起一个 Docker 守护进程，用它去 build。这套方案在 Kubernetes 集群里有两个致命痛点：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>需要 privileged 特权模式&lt;/strong>：dind 服务容器要操控内核特性，必须给 Pod 开 &lt;code>privileged: true&lt;/code>。这是很严重的安全隐患——容器可能逃逸到宿主机，很多安全策略严格的集群直接禁止。&lt;/li>
&lt;li>&lt;strong>性能差&lt;/strong>：每个 Job 都额外拉起一个完整 Docker daemon，启动慢、占用高，多任务并发时更是灾难。&lt;/li>
&lt;/ol>
&lt;p>Kaniko 就是为了解决这个问题而生的：&lt;strong>不用特权、不用 daemon，在标准 K8s 集群里就能安全构建镜像。&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>问题&lt;/th>
&lt;th>DinD（旧方案）&lt;/th>
&lt;th>Kaniko&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>需要 privileged 特权&lt;/td>
&lt;td>✅ 必须&lt;/td>
&lt;td>❌ 不需要&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>依赖 Docker daemon&lt;/td>
&lt;td>✅ 必须&lt;/td>
&lt;td>❌ 完全不需要&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>挂载 docker.sock&lt;/td>
&lt;td>✅ 需要&lt;/td>
&lt;td>❌ 不需要&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>安全性&lt;/td>
&lt;td>有容器逃逸风险&lt;/td>
&lt;td>纯用户态，安全&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>性能开销&lt;/td>
&lt;td>每个 Job 起 daemon，慢&lt;/td>
&lt;td>轻量，快&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Kaniko 的核心价值用一句话来说就是：&lt;strong>在不安全、不方便跑 Docker daemon 的环境（尤其是 K8s 集群）里，仍然能安全、快速地构建镜像。&lt;/strong>&lt;/p></description></item><item><title>ArgoCD 入门和生产实践指南</title><link>https://blogs.wuvikr.top/posts/argocd%E5%85%A5%E9%97%A8%E5%92%8C%E7%94%9F%E4%BA%A7%E5%AE%9E%E8%B7%B5%E6%8C%87%E5%8D%97/</link><pubDate>Sat, 10 Oct 2026 09:33:28 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/argocd%E5%85%A5%E9%97%A8%E5%92%8C%E7%94%9F%E4%BA%A7%E5%AE%9E%E8%B7%B5%E6%8C%87%E5%8D%97/</guid><description>&lt;h1 id="1-什么是-argocd">1. 什么是 ArgoCD&lt;/h1>
&lt;p>&lt;a href="https://argo-cd.readthedocs.io/en/stable/">ArgoCD&lt;/a> 是 CNCF 毕业级项目，面向 Kubernetes 的&lt;strong>声明式 GitOps 持续交付工具&lt;/strong>。&lt;/p>
&lt;p>GitOps 核心思想：&lt;strong>Git 仓库作为应用配置的唯一可信源&lt;/strong>。ArgoCD 持续监听 Git 仓库内定义的应用目标状态，对比集群内资源的实际运行状态，自动完成应用部署、版本更新与故障回滚。&lt;/p>
&lt;p>ArgoCD 原生支持多种配置编排方式：Helm Chart、Kustomize、Jsonnet、Ksonnet，以及原生 YAML/JSON Kubernetes 资源清单。&lt;/p>
&lt;h1 id="2-架构原理">2. 架构原理&lt;/h1>
&lt;p>ArgoCD 以 Kubernetes 控制器形态运行，持续对应用做状态巡检：&lt;/p>
&lt;ol>
&lt;li>拉取 Git 仓库中声明的&lt;strong>期望状态（Target State）&lt;/strong>&lt;/li>
&lt;li>采集集群内资源&lt;strong>实际运行状态（Live State）&lt;/strong>&lt;/li>
&lt;li>对比两者差异，不一致时标记为 &lt;code>OutOfSync&lt;/code>（不同步）&lt;/li>
&lt;li>可视化展示资源差异，支持&lt;strong>手动同步 / 自动同步&lt;/strong>，将集群状态收敛到 Git 定义的目标状态&lt;/li>
&lt;/ol>
&lt;p>Git 仓库中修改清单后，ArgoCD 会感知变更并同步至目标集群，实现“改 Git 即发布”。&lt;/p>
&lt;p>具体工作流程参见下面的图片：
&lt;img alt="argocd工作流程图" loading="lazy" src="https://blogs.wuvikr.top/posts/argocd%E5%85%A5%E9%97%A8%E5%92%8C%E7%94%9F%E4%BA%A7%E5%AE%9E%E8%B7%B5%E6%8C%87%E5%8D%97/argocd%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E7%A4%BA%E6%84%8F%E5%9B%BE.png">&lt;/p>
&lt;p>&lt;strong>核心组件&lt;/strong>:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: center">组件&lt;/th>
&lt;th style="text-align: center">核心作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: center">&lt;code>argocd-server&lt;/code>&lt;/td>
&lt;td style="text-align: center">ArgoCD API 服务，提供 REST API、Web UI，处理认证鉴权&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">&lt;code>argocd-repo-server&lt;/code>&lt;/td>
&lt;td style="text-align: center">Git 仓库管理服务，缓存仓库代码、渲染 Helm/Kustomize 生成K8s清单&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">&lt;code>argocd-application-controller&lt;/code>&lt;/td>
&lt;td style="text-align: center">应用控制器，持续做状态比对，执行同步、健康检查&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">&lt;code>argocd-applicationset-controller&lt;/code>&lt;/td>
&lt;td style="text-align: center">ApplicationSet控制器，批量、模板化管理多环境/多集群 Application&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">&lt;code>argocd-redis&lt;/code>&lt;/td>
&lt;td style="text-align: center">缓存组件，存储仓库缓存、应用状态信息&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">&lt;code>argocd-dex-server&lt;/code>&lt;/td>
&lt;td style="text-align: center">可选，Dex 身份代理，对接OIDC、LDAP等外部身份源&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: center">&lt;code>argocd-notifications-controller&lt;/code>&lt;/td>
&lt;td style="text-align: center">可选，通知控制器，同步状态变更推送至邮件、Slack、Webhook等&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h1 id="3-部署">3. 部署&lt;/h1>
&lt;p>部署前建议查阅&lt;a href="https://argo-cd.readthedocs.io/en/stable/operator-manual/installation/#supported-versions">官方版本兼容矩阵&lt;/a>，选择与K8s集群匹配的ArgoCD版本。&lt;/p></description></item><item><title>Kubespray 部署和维护 K8s 集群指南</title><link>https://blogs.wuvikr.top/posts/kubespray%E9%83%A8%E7%BD%B2%E5%92%8C%E7%BB%B4%E6%8A%A4k8s%E9%9B%86%E7%BE%A4%E6%8C%87%E5%8D%97/</link><pubDate>Fri, 09 Oct 2026 11:34:13 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/kubespray%E9%83%A8%E7%BD%B2%E5%92%8C%E7%BB%B4%E6%8A%A4k8s%E9%9B%86%E7%BE%A4%E6%8C%87%E5%8D%97/</guid><description>&lt;h1 id="1-简介">1. 简介&lt;/h1>
&lt;p>Kubespray 是 Kubernetes SIGs 官方维护的部署项目，本质是一套经过大量生产环境验证的 Ansible Playbook、Inventory 模板和角色集合。它不发明新的集群模型，而是把 kubeadm 引导、etcd 集群组建、CNI 安装、证书轮换、节点扩缩容与升级这些容易出错的步骤固化为可重复执行的代码。&lt;/p>
&lt;h2 id="11-kubespray-解决了什么问题">1.1 Kubespray 解决了什么问题&lt;/h2>
&lt;p>手动搭一个生产集群的工作量并不仅仅只是简单把 K8s 集群跑起来，而在于：&lt;/p>
&lt;ul>
&lt;li>etcd 节点集群的证书、成员管理、快照备份；&lt;/li>
&lt;li>多控制平面节点下 apiserver 的负载均衡与前端证书 SAN；&lt;/li>
&lt;li>kubelet 配置（cgroup 驱动、预留资源、镜像垃圾回收、最大 Pod 数）；&lt;/li>
&lt;li>CNI 插件与内核网络参数、iptables/nftables 后端的匹配；&lt;/li>
&lt;li>证书到期轮换、跨小版本顺序升级、节点下线清理。&lt;/li>
&lt;/ul>
&lt;p>这些工作做一次可以靠文档，做十次就得靠自动化。Kubespray 的价值就在于它把这些工程细节沉淀成了一套&lt;strong>符合生产环境最佳实践的可重复执行代码&lt;/strong>，你只需要在默认值的基础上少量改动，而不是自己编写和维护大量的脚本。&lt;/p>
&lt;h2 id="12-和其他工具对比">1.2 和其他工具对比&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>工具&lt;/th>
&lt;th>Kubespray&lt;/th>
&lt;th>kubeadm&lt;/th>
&lt;th>Rancher&lt;/th>
&lt;th>OpenShift(OKD)&lt;/th>
&lt;th>kops&lt;/th>
&lt;th>KubeKey(kk)&lt;/th>
&lt;th>k3s&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>核心定位&lt;/strong>&lt;/td>
&lt;td>Ansible驱动，生产级离线部署K8s集群&lt;/td>
&lt;td>K8s官方最小化集群引导工具&lt;/td>
&lt;td>企业级K8s全生命周期管理平台&lt;/td>
&lt;td>红帽出品，基于K8s的企业容器平台&lt;/td>
&lt;td>AWS专用K8s集群部署工具&lt;/td>
&lt;td>KubeSphere社区开源部署工具，中文友好&lt;/td>
&lt;td>Rancher出品轻量K8s发行版&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>底层引擎&lt;/strong>&lt;/td>
&lt;td>Ansible&lt;/td>
&lt;td>Go原生二进制&lt;/td>
&lt;td>容器+WebUI&lt;/td>
&lt;td>容器/Operator&lt;/td>
&lt;td>Go，调用AWS API&lt;/td>
&lt;td>Go二进制，封装kubeadm&lt;/td>
&lt;td>裁剪K8s单二进制&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>适用环境&lt;/strong>&lt;/td>
&lt;td>裸金属、VMware、私有云、离线环境&lt;/td>
&lt;td>裸金属/虚拟机/云主机，在线为主&lt;/td>
&lt;td>公有云、私有云、边缘，多集群统一管理&lt;/td>
&lt;td>企业私有/混合云，偏向生产企业&lt;/td>
&lt;td>&lt;strong>仅限AWS&lt;/strong>公有云&lt;/td>
&lt;td>裸机/虚拟机，私有化离线场景&lt;/td>
&lt;td>低配服务器、边缘、开发/小生产&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>离线部署&lt;/strong>&lt;/td>
&lt;td>✅ 完美支持，可打包离线介质&lt;/td>
&lt;td>⚠️ 支持但麻烦，需要手动下载镜像/二进制&lt;/td>
&lt;td>✅ 支持离线airgap安装&lt;/td>
&lt;td>✅ 官方提供离线方案&lt;/td>
&lt;td>❌ 依赖AWS云API，不适合离线&lt;/td>
&lt;td>✅原生支持打包离线包&lt;/td>
&lt;td>✅离线包&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>集群维护&lt;/strong>&lt;/td>
&lt;td>Ansible playbook升级、扩容、替换节点；版本升级稳定&lt;/td>
&lt;td>仅引导集群，&lt;strong>不负责后续集群运维&lt;/strong>，升级操作繁琐&lt;/td>
&lt;td>Web界面一键升级、扩缩容，多集群统一监控告警&lt;/td>
&lt;td>Operator管理集群，自动化运维能力强&lt;/td>
&lt;td>集群升级、节点替换由kops命令管理&lt;/td>
&lt;td>一键HA、扩容升级，可配套KubeSphere控制台&lt;/td>
&lt;td>一行命令运维，嵌入式etcd HA&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>高可用&lt;/strong>&lt;/td>
&lt;td>✅ 内置etcd三副本、控制面HA方案&lt;/td>
&lt;td>需要手动搭建HA（负载均衡+多master）&lt;/td>
&lt;td>✅ 自动支持HA，内置负载均衡方案&lt;/td>
&lt;td>✅ 默认HA架构&lt;/td>
&lt;td>✅ AWS上自动搭建控制面HA&lt;/td>
&lt;td>✅一键HA，内置负载均衡&lt;/td>
&lt;td>✅内置HA（嵌入式etcd）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>网络插件&lt;/strong>&lt;/td>
&lt;td>内置Calico/Flannel/Cilium等多种CNI可选&lt;/td>
&lt;td>仅提供基础CNI对接，需自行部署CNI&lt;/td>
&lt;td>内置多种CNI，UI可视化配置&lt;/td>
&lt;td>默认OVN-Kubernetes，也可Calico&lt;/td>
&lt;td>默认Calico，可自定义CNI&lt;/td>
&lt;td>Calico等CNI可选&lt;/td>
&lt;td>Flannel默认，支持替换CNI&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>存储支持&lt;/strong>&lt;/td>
&lt;td>对接本地卷、Ceph、Longhorn等，ansible角色集成&lt;/td>
&lt;td>仅提供CSI标准，存储需要自己部署&lt;/td>
&lt;td>内置存储管理，支持Longhorn等&lt;/td>
&lt;td>内置CSI+本地存储方案&lt;/td>
&lt;td>对接AWS EBS等云存储&lt;/td>
&lt;td>对接Longhorn、Ceph、本地存储&lt;/td>
&lt;td>支持本地存储、CSI&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>版本适配&lt;/strong>&lt;/td>
&lt;td>紧跟K8s社区版本，滞后一小段时间&lt;/td>
&lt;td>K8s官方同步发布&lt;/td>
&lt;td>支持多K8s版本，统一纳管不同版本集群&lt;/td>
&lt;td>OKD版本独立，和上游K8s有差异&lt;/td>
&lt;td>紧跟AWS支持的K8s版本&lt;/td>
&lt;td>跟随上游kubeadm&lt;/td>
&lt;td>Rancher维护稳定版本&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>学习成本&lt;/strong>&lt;/td>
&lt;td>中等，需要懂Ansible&lt;/td>
&lt;td>低，上手简单，适合测试集群&lt;/td>
&lt;td>低，WebUI友好，运维门槛低&lt;/td>
&lt;td>高，体系庞大，有专属概念&lt;/td>
&lt;td>中等，熟悉AWS即可快速上手&lt;/td>
&lt;td>中等，中文文档友好&lt;/td>
&lt;td>很低，上手极快&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>典型场景&lt;/strong>&lt;/td>
&lt;td>裸金属机房、私有化项目、需要批量部署大量集群、等保离线环境&lt;/td>
&lt;td>实验室、POC测试、小规模简单集群&lt;/td>
&lt;td>多集群管理、混合云、需要统一权限/审计的企业&lt;/td>
&lt;td>大型企业生产环境，需要完整容器安全、合规能力&lt;/td>
&lt;td>AWS云上快速搭建销毁K8s集群&lt;/td>
&lt;td>中小企业裸机/VM离线部署，可选KubeSphere控制台&lt;/td>
&lt;td>资源有限、边缘、小生产集群&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>缺点&lt;/strong>&lt;/td>
&lt;td>Ansible串行执行，大规模集群部署慢；无WebUI；故障排查需要Ansible基础&lt;/td>
&lt;td>没有集群生命周期管理，生产HA搭建工作量大；缺少监控日志等附加组件&lt;/td>
&lt;td>资源开销大；底层K8s被封装，深度定制复杂；商业版收费&lt;/td>
&lt;td>闭源企业版昂贵；架构重，资源消耗高；学习曲线陡峭&lt;/td>
&lt;td>只能跑在AWS，无法裸金属/其他云使用&lt;/td>
&lt;td>依赖kubeadm；底层封装，深度排障需要kubeadm知识；KubeSphere额外耗资源&lt;/td>
&lt;td>裁剪部分组件，重型大规模生产不推荐；和标准K8s有细微差异&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>国内中小企业热度&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐ 更多集成商使用，中小企业自用偏少&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 最高，几乎所有运维都学这个&lt;/td>
&lt;td>⭐⭐⭐⭐ 多集群场景热门&lt;/td>
&lt;td>⭐⭐ 大型企业为主，中小企业很少用&lt;/td>
&lt;td>⭐ 国内几乎不用&lt;/td>
&lt;td>⭐⭐⭐⭐ 私有化中小企业热门&lt;/td>
&lt;td>⭐⭐⭐⭐ 小集群/边缘场景热门&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h1 id="2-底层架构和设计">2. 底层架构和设计&lt;/h1>
&lt;p>&lt;strong>关键核心设计&lt;/strong>：&lt;/p></description></item><item><title>K8s MetaLB 详解</title><link>https://blogs.wuvikr.top/posts/k8smetalb%E8%AF%A6%E8%A7%A3/</link><pubDate>Wed, 16 Sep 2026 13:59:57 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/k8smetalb%E8%AF%A6%E8%A7%A3/</guid><description>&lt;p>在 Kubernetes 集群中，Service 是核心资源之一，其中 LoadBalancer 类型服务是业务对外暴露的核心方式。但原生 K8s 仅为公有云集群（AWS、阿里云、腾讯云等）提供 LoadBalancer 实现，裸金属、本地机房、私有部署的 K8s 集群默认不支持 LoadBalancer 类型 Service，只能依赖 NodePort、Ingress 实现流量暴露，存在端口散乱、运维复杂、无统一入口、负载均衡能力薄弱等问题。&lt;/p>
&lt;p>&lt;a href="https://metallb.io/">MetalLB&lt;/a> 正是这样一款专为私有/裸金属K8s集群设计的开源负载均衡组件，完全开源免费、轻量无侵入，完美补齐了私有 K8s 集群无原生 LoadBalancer 的短板，是本地机房 K8s 生产集群的标配组件。&lt;/p>
&lt;hr>
&lt;h1 id="1-项目介绍">1. 项目介绍&lt;/h1>
&lt;h2 id="11-项目定位与核心作用">1.1 项目定位与核心作用&lt;/h2>
&lt;p>MetalLB 是 Kubernetes官方认可的负载均衡解决方案，专为非云环境（裸金属服务器、虚拟机、本地私有集群）设计。其核心作用是：为集群内 LoadBalancer 类型的 Service 自动分配外部静态 IP，实现四层流量负载均衡，替代原生 NodePort 的低效暴露方式，让私有集群拥有与公有云一致的 Service 负载均衡能力。&lt;/p>
&lt;p>&lt;strong>核心价值：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>统一业务暴露方式：与公有云 K8s 开发规范对齐，无需适配 NodePort 特殊逻辑。&lt;/li>
&lt;li>稳定四层负载均衡：支持 TCP/UDP 协议，适配后端服务、数据库、中间件等各类业务。&lt;/li>
&lt;li>简化运维：固定服务外部 IP，无需节点端口映射，流量入口统一可控。&lt;/li>
&lt;li>轻量高性能：无复杂依赖，资源占用极低，不侵入 K8s 核心组件。&lt;/li>
&lt;/ul>
&lt;h2 id="12-架构原理">1.2 架构原理&lt;/h2>
&lt;p>MetalLB 采用控制器 + 转发节点的分布式架构，整体由两大核心组件组成，全部运行在集群内部，以 Pod 形式部署。&lt;/p>
&lt;h3 id="121-controller控制器组件">1.2.1 Controller（控制器组件）&lt;/h3>
&lt;p>全局唯一的调度组件，默认单副本部署，核心职责：&lt;/p>
&lt;ul>
&lt;li>监听集群内所有 LoadBalancer 类型的 Service 资源变更。&lt;/li>
&lt;li>维护 IP 地址池，为新的 LoadBalancer Service 自动分配可用外部 IP。&lt;/li>
&lt;li>回收废弃 Service 的 IP 资源，避免 IP 泄露与占用。&lt;/li>
&lt;li>校验 IP 分配合法性，保证全局唯一性。&lt;/li>
&lt;/ul>
&lt;h3 id="122-speaker转发组件">1.2.2 Speaker（转发组件）&lt;/h3>
&lt;p>集群节点级组件，默认每个集群节点部署一个Pod（DaemonSet部署），核心职责：&lt;/p></description></item><item><title>Pod 网络故障排查</title><link>https://blogs.wuvikr.top/posts/pod%E7%BD%91%E7%BB%9C%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5/</link><pubDate>Sat, 12 Sep 2026 15:51:54 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/pod%E7%BD%91%E7%BB%9C%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5/</guid><description>&lt;p>Kubernetes 的网络是一个多层虚拟网络体系，流量从客户端到后端 Pod 的路径涉及多个组件。排查网络问题时，如果&amp;quot;东戳一下西戳一下&amp;quot;没有章法，可能需要耗费大量时间。如何最快的定位网络问题的根源？记住常见的具体现象和应对办法，遵循&lt;strong>从内到外&lt;/strong>的原则（先确认&amp;quot;自己没问题&amp;quot;，再确认&amp;quot;中间没问题&amp;quot;，最后确认&amp;quot;外面没问题&amp;quot;）或许能够帮你节约大量的时间，。&lt;/p>
&lt;p>下面按照从&lt;strong>具体访问现象&lt;/strong>出发的思路，由浅入深展开。&lt;/p>
&lt;hr>
&lt;h1 id="1-第一层pod-自身状态确认">1. 第一层：Pod 自身状态确认&lt;/h1>
&lt;p>&lt;strong>现象：Pod 完全无法访问，任何请求都无响应&lt;/strong>
这是最基础的一层。在排查任何网络问题之前，先确认 Pod 本身是否健康运行。&lt;/p>
&lt;h2 id="11-检查-pod-状态">1.1 检查 Pod 状态&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl get pods -o wide
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>关注以下状态：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>状态&lt;/th>
&lt;th>含义&lt;/th>
&lt;th>可能原因&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Running&lt;/code>&lt;/td>
&lt;td>正常运行&lt;/td>
&lt;td>正常&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Pending&lt;/code>&lt;/td>
&lt;td>等待调度&lt;/td>
&lt;td>资源不足、节点亲和性不匹配&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>CrashLoopBackOff&lt;/code>&lt;/td>
&lt;td>反复崩溃重启&lt;/td>
&lt;td>应用启动失败、配置错误&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>OOMKilled&lt;/code>&lt;/td>
&lt;td>内存超限被杀&lt;/td>
&lt;td>&lt;code>resources.limits.memory&lt;/code> 设置过低&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ImagePullBackOff&lt;/code>&lt;/td>
&lt;td>镜像拉取失败&lt;/td>
&lt;td>镜像名错误、仓库认证失败&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ContainerCreating&lt;/code>&lt;/td>
&lt;td>容器创建中&lt;/td>
&lt;td>CNI 插件分配 IP 失败、存储卷挂载失败&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>如果 Pod 不在 &lt;code>Running&lt;/code> 状态，网络问题只是表象，根因在 Pod 本身：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看 Pod 详细事件&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl describe pod &amp;lt;pod-name&amp;gt; -n &amp;lt;namespace&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看容器日志（如果容器曾启动过）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl logs &amp;lt;pod-name&amp;gt; -n &amp;lt;namespace&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看前一个崩溃容器的日志&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl logs &amp;lt;pod-name&amp;gt; -n &amp;lt;namespace&amp;gt; --previous
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="12-确认-pod-有-ip-地址">1.2 确认 Pod 有 IP 地址&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl get pods -o wide
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果 Pod 状态是 &lt;code>Running&lt;/code> 但 &lt;strong>IP 为空&lt;/strong>，说明 CNI 插件没有成功分配 IP。此时需要检查：&lt;/p></description></item><item><title>K8s 集群升级</title><link>https://blogs.wuvikr.top/posts/k8s%E9%9B%86%E7%BE%A4%E5%8D%87%E7%BA%A7/</link><pubDate>Wed, 09 Sep 2026 14:26:14 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/k8s%E9%9B%86%E7%BE%A4%E5%8D%87%E7%BA%A7/</guid><description>&lt;p>Kubernetes 集群的大版本（跨次要版本）升级是一项复杂且高风险的运维操作。为了确保业务连续性，必须遵循严格的规范。以下是升级的核心原则、标准流程以及可能遇到的关键问题。&lt;/p>
&lt;h1 id="1-大版本升级的核心原则">1. 大版本升级的核心原则&lt;/h1>
&lt;ol>
&lt;li>&lt;strong>逐级递进，严禁跨版本&lt;/strong>：Kubernetes 不支持跨多个次要版本直接升级（例如不能从 1.24 直接升级到 1.26），必须按照&lt;code>1.24 → 1.25 → 1.26&lt;/code>的顺序逐版本进行。每一跳都需要完成控制面和节点的升级与验证。&lt;/li>
&lt;li>&lt;strong>组件版本兼容策略&lt;/strong>：
&lt;ul>
&lt;li>&lt;strong>控制面&lt;/strong>：&lt;code>kube-apiserver&lt;/code> 版本最高且需最先升级，&lt;code>controller-manager&lt;/code> 和 &lt;code>scheduler&lt;/code> 版本应小于或等于 &lt;code>apiserver&lt;/code>。&lt;/li>
&lt;li>&lt;strong>kubelet&lt;/strong>：节点上的 &lt;code>kubelet&lt;/code> 版本必须小于或等于 &lt;code>apiserver&lt;/code>，且不能低于 &lt;code>apiserver&lt;/code> 的前一个次要版本（例如 apiserver 为 v1.28 时，kubelet 可以是 v1.28 或 v1.27）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>先升级控制面，再升级节点&lt;/strong>：必须先完成 Master 节点（控制平面）的升级，确认稳定后再分批升级 Worker 节点。&lt;/li>
&lt;li>&lt;strong>第三方组件兼容性检查&lt;/strong>：升级前必须确认 CNI 插件（如 Calico/Cilium）、CoreDNS、kube-proxy 以及 Ingress 控制器等是否支持目标版本。通常建议先升级 CNI，CoreDNS 则与 K8s 版本强绑定，需查阅官方对应表。&lt;/li>
&lt;/ol>
&lt;h1 id="2-标准升级流程">2. 标准升级流程&lt;/h1>
&lt;ol>
&lt;li>&lt;strong>升级前准备&lt;/strong>：
&lt;ul>
&lt;li>检查集群健康状态，确保所有节点为 Ready，无 CrashLoopBackOff 的 Pod。&lt;/li>
&lt;li>&lt;strong>备份关键数据&lt;/strong>：必须备份 etcd 数据、证书文件及核心配置文件，以防升级失败导致数据丢失。&lt;/li>
&lt;li>检查并处理废弃 API（Deprecated APIs），高版本可能会移除旧版 API，导致 HPA 或 Ingress 等资源失效。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>升级控制面&lt;/strong>：升级 &lt;code>kubeadm&lt;/code>，执行 &lt;code>kubeadm upgrade apply&lt;/code>，依次更新 &lt;code>kube-apiserver&lt;/code>、&lt;code>kube-controller-manager&lt;/code> 和 &lt;code>kube-scheduler&lt;/code>。&lt;/li>
&lt;li>&lt;strong>升级工作节点&lt;/strong>：
&lt;ul>
&lt;li>腾空节点（Cordon &amp;amp; Drain），将 Pod 驱逐到其他节点。&lt;/li>
&lt;li>升级节点的 &lt;code>kubeadm&lt;/code>、&lt;code>kubelet&lt;/code> 和 &lt;code>kubectl&lt;/code>。&lt;/li>
&lt;li>解除节点保护（Uncordon），使其重新加入调度。&lt;/li>
&lt;li>建议在生产环境中逐个节点离线升级后再上线，避免全部同时升级。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h1 id="3-升级过程中可能遇到的问题">3. 升级过程中可能遇到的问题&lt;/h1>
&lt;ol>
&lt;li>&lt;strong>废弃 API 导致业务失效&lt;/strong>：高版本 K8s 会废弃旧版 API。例如升级到 1.22+ 时，&lt;code>networking.k8s.io/v1beta1&lt;/code> 的 Ingress 将不再可用；升级到 1.18+ 后，HPA 的 &lt;code>apiVersion&lt;/code> 必须切换为 &lt;code>apps/v1&lt;/code>，否则功能会失效。&lt;/li>
&lt;li>&lt;strong>容器运行时变更&lt;/strong>：从 Kubernetes 1.24 开始，不再支持将 Docker 作为内置容器运行时。若从 1.22/1.23 升级，必须提前将节点运行时从 Docker 迁移到 containerd，否则升级会失败。&lt;/li>
&lt;li>&lt;strong>节点排水（Drain）失败与 PDB 冲突&lt;/strong>：在驱逐 Pod 时，如果配置了 Pod Disruption Budget (PDB) 且当前可用副本数达到下限，Pod 将无法被驱逐，导致节点升级超时或失败。&lt;/li>
&lt;li>&lt;strong>网络连通性中断&lt;/strong>：如果 Pod 通过 &lt;code>LoadBalancer&lt;/code> 类型的 Service 访问同节点上的另一个 Pod，且 Service 的 &lt;code>externalTrafficPolicy&lt;/code> 设置为 &lt;code>Local&lt;/code>，在节点轮转升级后，两个 Pod 可能不再位于同一节点，导致网络不通。&lt;/li>
&lt;li>&lt;strong>自定义配置被覆盖&lt;/strong>：如果曾通过非产品化方式（如直接登录节点修改 kubelet 配置、打开 SWAP 分区等）更改过节点配置，升级过程中这些自定义配置可能会被重置或覆盖，甚至导致升级失败。&lt;/li>
&lt;li>&lt;strong>磁盘空间不足&lt;/strong>：升级过程需要下载软件包并可能产生临时文件。如果节点磁盘水位过高（建议预留至少 20% 空间），可能导致 Pod 被驱逐或升级失败。&lt;/li>
&lt;li>&lt;strong>Cgroup v1 兼容性问题&lt;/strong>：在较新的版本（如 1.36）中，kubelet 默认仅支持 Cgroup v2。如果节点操作系统仍在使用 Cgroup v1，可能会导致 kubelet 启动失败或节点 NotReady。&lt;/li>
&lt;/ol></description></item><item><title>Kubeadm 部署高可用 K8s 集群</title><link>https://blogs.wuvikr.top/posts/kubeadm%E9%83%A8%E7%BD%B2%E9%AB%98%E5%8F%AF%E7%94%A8k8s%E9%9B%86%E7%BE%A4/</link><pubDate>Wed, 09 Sep 2026 10:54:51 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/kubeadm%E9%83%A8%E7%BD%B2%E9%AB%98%E5%8F%AF%E7%94%A8k8s%E9%9B%86%E7%BE%A4/</guid><description>&lt;p>&lt;a href="https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/">kubeadm 安装官方文档&lt;/a>&lt;/p>
&lt;h1 id="0-引言">0. 引言&lt;/h1>
&lt;p>Kubernetes 高可用架构的核心在于保障 API Server 的访问连续性与 etcd 的数据可靠性。通常通过部署多 Master 节点并前置负载均衡来实现，本方案采用 &lt;code>kube-vip&lt;/code> 承担此角色。为节省资源，本文将负载均衡与 etcd 集群复用部署于 Master 节点；&lt;strong>生产环境请务必将其独立部署，以确保集群稳定性。&lt;/strong>&lt;/p>
&lt;p>本文基于 Ubuntu 24.04 环境编写。若使用其他 Linux 发行版，请根据实际情况自行调整相关命令。&lt;/p>
&lt;hr>
&lt;h1 id="1-环境架构">1. 环境架构&lt;/h1>
&lt;h2 id="11-角色划分">1.1 角色划分&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>主机名&lt;/th>
&lt;th style="text-align: center">IP&lt;/th>
&lt;th style="text-align: center">角色&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>master01&lt;/td>
&lt;td style="text-align: center">192.168.69.11&lt;/td>
&lt;td style="text-align: center">master01、Etcd-node01、kube-vip 节点&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>master02&lt;/td>
&lt;td style="text-align: center">192.168.69.12&lt;/td>
&lt;td style="text-align: center">master02、Etcd-node02、kube-vip 节点&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>master03&lt;/td>
&lt;td style="text-align: center">192.168.69.13&lt;/td>
&lt;td style="text-align: center">master03、Etcd-node03、kube-vip 节点&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>worker01&lt;/td>
&lt;td style="text-align: center">192.168.69.21&lt;/td>
&lt;td style="text-align: center">worker01&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>worker02&lt;/td>
&lt;td style="text-align: center">192.168.69.22&lt;/td>
&lt;td style="text-align: center">worker02&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>worker03&lt;/td>
&lt;td style="text-align: center">192.168.69.23&lt;/td>
&lt;td style="text-align: center">worker03&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>虚拟IP&lt;/td>
&lt;td style="text-align: center">10.0.0.100&lt;/td>
&lt;td style="text-align: center">kube-vip 提供&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="12-拓扑图">1.2 拓扑图&lt;/h2>
&lt;p>&lt;img alt="k8s集群架构拓扑" loading="lazy" src="https://blogs.wuvikr.top/posts/kubeadm%E9%83%A8%E7%BD%B2%E9%AB%98%E5%8F%AF%E7%94%A8k8s%E9%9B%86%E7%BE%A4/%E6%8B%93%E6%89%91%E5%9B%BE.png">&lt;/p>
&lt;hr>
&lt;h1 id="2-操作系统初始化">2. 操作系统初始化&lt;/h1>
&lt;h2 id="21-linux-基础配置">2.1 Linux 基础配置&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 关闭防火墙&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ufw disable
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 关闭 swap&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>swapoff -a &lt;span style="color:#f92672">&amp;amp;&amp;amp;&lt;/span> sysctl -w vm.swappiness&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sed -ri &lt;span style="color:#e6db74">&amp;#39;s/.*swap.*/#&amp;amp;/&amp;#39;&lt;/span> /etc/fstab
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 配置主机名和 hosts&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hostnamectl set-hostname &amp;lt;hostname&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cat &amp;gt;&amp;gt; /etc/hosts &lt;span style="color:#e6db74">&amp;lt;&amp;lt; EOF
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">192.168.69.11 master01.wuvikr.top master01
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">192.168.69.12 master02.wuvikr.top master02
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">192.168.69.13 master03.wuvikr.top master03
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">192.168.69.21 worker01.wuvikr.top worker01
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">192.168.69.22 worker02.wuvikr.top worker02
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">192.168.69.23 worker03.wuvikr.top worker03
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">192.168.69.100 kubeapi.wuvikr.top kubeapi
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 配置 limit&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ulimit -SHn &lt;span style="color:#ae81ff">65535&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 持久化 limit 配置（重新登录后生效）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cat &amp;gt;&amp;gt; /etc/security/limits.conf &lt;span style="color:#e6db74">&amp;lt;&amp;lt; EOF
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">* soft nofile 65536
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">* hard nofile 131072
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">* soft nproc 65535
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">* hard nproc 655350
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">* soft memlock unlimited
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">* hard memlock unlimited
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">* soft core unlimited
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">* hard core unlimited
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="22-时间同步">2.2 时间同步&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 同步硬件时钟到系统时间（虚拟机环境中可选）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hwclock -s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 设置时区（推荐方式，一步完成）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>timedatectl set-timezone Asia/Shanghai
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 确保时间同步服务已启用（Ubuntu 24.04 默认已启用）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>systemctl enable --now systemd-timesyncd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看时间同步状态&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>timedatectl status
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;blockquote>
&lt;p>Ubuntu 24.04 内置的 &lt;code>systemd-timesyncd&lt;/code> 提供轻量级 NTP 客户端功能，支持自动同步、漂移补偿和状态查询。如需更高精度的时间同步（如金融、日志审计场景），建议改用 &lt;code>chrony&lt;/code> 替代 &lt;code>systemd-timesyncd&lt;/code>。&lt;/p></description></item></channel></rss>