Hetzner作为欧洲老牌主机商,凭借其极具竞争力的价格和稳定的网络质量,近年成为不少自托管爱好者和初创团队部署容器化服务的首选。K3s则是Rancher Labs推出的轻量级Kubernetes发行版,裁剪掉了大量非核心组件,把etcd换成了内置的SQLite,单进程即可运行完整的控制面。两者结合,每月花费十几欧元就能拥有一个可用的容器编排平台,这个组合到底表现如何,本文从选型、部署到性能实测做一次完整梳理。

Hetzner机型选择与集群规划
Hetzner的云服务器(CX/CPX系列)和独立服务器(Robot系列)价格差异明显。跑K3s集群一般选择云服务器即可,以德国和芬兰机房最为常见。以CPX11为例,2核AMD EPYC处理器、4GB内存、40GB NVMe盘,月费大约4欧元上下,性价比远超同类美国云厂商。控制面节点建议至少CPX21(3核4GB起步),工作节点按业务负载选CPX11或CPX31。
集群规模方面,K3s支持单节点和多节点两种形态。单Server模式适合个人项目,所有组件跑在一台机器上,简单省事;如果要做高可用,建议三个Server节点加两到三个Agent节点的经典拓扑。需要注意的是,K3s从2.x版本起高可用模式默认使用内嵌的etcd,不再依赖外部数据库,部署门槛降低了不少。
网络层面,Hetzner的私有网络(Cloud Network)是免费的,Server与Agent节点之间走内网通信,既省公网流量,延迟也更低。建议在创建服务器时就把所有节点加入同一个私有网络,避免后期迁移。
K3s集群安装部署实战
安装过程本身非常简单,K3s官方提供了一键脚本。先在第一台Server节点上执行安装,注意通过NODE_NAME和环境变量把节点绑定到私有网络IP上,避免走公网注册:
# 在第一台Server节点执行 export INSTALL_K3S_VERSION="v1.29.4+k3s1" curl -sfL https://get.k3s.io | sh -s - server \ --node-ip=10.0.0.11 \ --advertise-address=10.0.0.11 \ --node-taint="CriticalAddonsOnly=true:NoExecute" # 获取加入集群所需的token cat /var/lib/rancher/k3s/server/node-token
拿到token后,在第二、第三台Server节点上以--server参数指向第一台节点完成加入,Agent节点则去掉server关键字即可。安装完成后,控制面节点上执行k3s kubectl get nodes就能看到全部节点就绪。
本地访问集群需要把/etc/rancher/k3s/k3s.yaml复制到开发机并修改server地址。这里有个高频踩坑点:文件里默认写的是127.0.0.1,必须替换成Hetzner服务器的公网IP,同时确认6443端口已在防火墙放行,只对你的管理IP开放,切勿对全网开放。
性能实测与优化建议
空载状态下,三节点K3s集群(含Traefik、CoreDNS、metrics-server等内置组件)整体内存占用约900MB,CPU基本在1%到3%之间波动,说明裁剪后的控制面开销确实很小。相比标准Kubernetes动辄每节点1GB以上的开销,K3s在CPX11这种小规格机型上也能流畅运行。
网络方面,芬兰与德国机房内网延迟实测在1ms左右,跨机房约24ms。如果在NodePort或LoadBalancer后跑HTTP服务,配合Hetzner自带的负载均衡器(每月约5欧元)可以获得稳定的入口。也可以省下这笔钱,直接用Traefik的NodePort模式加一台前置机,成本更低但需要自己处理证书续期。
存储是另一块需要留意的部分。K3s默认使用local-path-provisioner,数据落在节点本地目录,Pod漂移后数据不会跟着走。对数据库这类有状态服务,建议要么把Pod固定在特定节点,要么外挂Hetzner Volume(按GB计费的块存储),通过自定义StorageClass接入。备份方面,用velero定期把etcd快照和PV数据导出到对象存储是性价比最高的方案。
综合体验下来,Hetzner加K3s的组合在成本和易用性上几乎无可挑剔,唯一的短板是Hetzner在中国大陆的直连速度一般,如果主要用户在国内,需要权衡线路问题或考虑配合CDN使用。对于面向欧洲和北美的自托管服务,这套方案完全可以承载生产流量。
Hetzner云服务器K3s集群轻量级Kubernetes修改时间:2026-09-08 10:02:51