如何用 k3d 搭建本地 Kubernetes 集群部署并测试 Homepage

发布时间:2026/9/12 6:37:37
如何用 k3d 搭建本地 Kubernetes 集群部署并测试 Homepage 如何用 k3d 搭建本地 Kubernetes 集群部署并测试 Homepage【免费下载链接】homepageA highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.项目地址: https://gitcode.com/GitHub_Trending/ho/homepage如果你在开发 Homepage例如扩展 Kubernetes 相关 widget 或调试集群模式下的配置需要在一个真实的 Kubernetes 环境里验证改动又不想接触自己的生产集群仓库里的k3d/目录提供了一套现成脚本它用 k3d 在 Docker 中拉起一个 k3s 集群再把你本地构建的 Homepage 镜像通过 Helm 部署进去。本文按 k3d/README.md 的主流程走一遍一次性部署验证以及可选的 Tilt 持续开发循环。所有命令都需要在仓库的k3d目录下执行README 明确要求。准备工具按 k3d/README.md 的工具清单需要安装工具用途是否必需Docker容器运行时必需kubectlKubernetes CLI必需helmKubernetes 包管理器必需k3d在 Docker 中创建 k3s 集群必需k9s命令行查看集群状态可选tilt本地 CI 部署循环可选direnv通过.envrc自动加载kubeconfig可选集群配置k3d.yaml 里有什么创建集群前值得先看一下 k3d.yaml因为它解释了后面部署地址和镜像来源的来龙去脉集群名为homepage拓扑为 1 个 server 2 个 agentsk3s 镜像固定为rancher/k3s:v1.25.5-k3s1loadbalancer 节点把主机端口8080映射到集群80、0.0.0.0:8443映射到443——这就是后面http://homepage.k3d.localhost:8080/这个访问地址的来源创建了一个本地镜像仓库k3d-registry主机端口55000镜像名即k3d-registry.localhost:55000。部署脚本会把本地构建的 Homepage 推到这个仓库Pod 再从仓库拉取从而避免集群外网拉镜像。创建集群在k3d目录运行./k3d-up.shk3d-up.sh 依次做了三件事k3d cluster create --config k3d.yaml --wait按上面的配置创建集群生成kubeconfig文件写入k3d目录权限 600并在脚本内export KUBECONFIG指向它等待 k3s 内置的 traefik 安装 job 完成kubectl wait jobs/helm-install-traefik -n kube-system --for conditioncomplete --timeout 90s脚本对等待结果的两种输出分别是Completed和Timed out (but it should still come up eventually)——即 90 秒超时不代表集群失败traefik 稍后仍可能起来。副作用说明该脚本会在 Docker 中创建集群的全部容器与本地 registry并在k3d目录生成kubeconfig文件。如果你希望 shell 每次进入该目录时自动加载这个kubeconfigREADME 提到可以配合可选的 direnv通过.envrc。构建并部署 Homepage集群就绪后运行./k3d-deploy.shk3d-deploy.sh 的流程是DOCKER_BUILDKIT1 docker build -t k3d-registry.localhost:55000/homepage:local .. docker push k3d-registry.localhost:55000/homepage:local第一条命令以仓库根目录k3d的上一级为构建上下文构建镜像所以必须在k3d目录下执行然后推送到 k3d 自带的本地仓库。接着脚本检查 helm 仓库是否已添加未添加时执行helm repo add jameswynn 仓库地址仓库地址见脚本原文最后执行helm upgrade --install homepage jameswynn/homepage -f k3d-helm-values.yaml注意该 Helm chart 属于非官方 chartdocs/installation/k8s.md 称其为 unofficial Helm chart。k3d-helm-values.yaml 中与本次验证直接相关的配置image.repository/image.tag指向本地仓库的k3d-registry.localhost:55000/homepage:localpullPolicy: Alwaysenv中设置HOMEPAGE_ALLOWED_HOSTS: homepage.k3d.localhost:8080。按 docs/installation/index.md 的说明v1.0 起通过非localhostURL 访问 Homepage 必须配置该变量逗号分隔的允许主机列表否则会出现 host validation 错误serviceAccount.create: true与enableRbac: true让部署使用名为homepage的 ServiceAccount 并获得读取集群资源的 RBAC 权限widgets配置了kuberneteswidget展示 cluster 与 nodes 的 CPU/内存和searchwidgetDuckDuckGokubernetes.mode: cluster让 Homepage 以集群模式运行并读取真实集群数据ingress.main启用 ingresshost 为homepage.k3d.localhost经 k3d loadbalancer 的8080:80端口映射对外暴露persistence.dotnext默认关闭。注释说明它持久化.next目录可大幅提升 Tilt 场景下的 Pod 启动速度但会破坏普通部署所以只有 Tilt 路径会打开它。验证部署结果按 k3d/README.md 的方式打开 Homepagexdg-open http://homepage.k3d.localhost:8080/xdg-open是 Linux 下打开默认浏览器的命令也可以直接在浏览器里访问http://homepage.k3d.localhost:8080/。加载成功后页面内容应与 values 文件中的配置对应kubernetes widget 显示集群与两个 agent 节点的 CPU/内存search 搜索框可用bookmarks 和 services 区域显示 values 里定义的示例条目。如果访问时遇到 host validation 相关的报错按 docs/installation/index.md 的排查建议查看 Homepage 日志确认日志中打印的 host 原样出现在HOMEPAGE_ALLOWED_HOSTS列表中。安装了 k9s 的话也可以用它在命令行里查看该集群的 Pod、事件等资源状态。可选用 Tilt 建立持续部署循环做开发扩展时更省事的验证方式是不手动重复构建部署而是用 Tiltfile 建立本地 CI 循环。流程与一次性部署相同的起点先./k3d-up.sh创建集群然后运行tilt upTilt 会读取 Tiltfile用 Dockerfile-tilt 构建k3d-registry.localhost:55000/homepage:local镜像构建参数node_envdevelopmentlive update 配置sync(., /app)把本地文件变更同步进容器.package.json或pnpm-lock.yaml变化时触发容器内pnpm install通过helm_resource部署jameswynn/homepage额外传入--set persistence.dotnext.enabledtrue即只有 Tilt 路径启用.next目录持久化来加速后续 Pod 启动按 README 说明在 tilt 界面按空格键可打开信息量较大的 tilt web UI。之后修改代码并保存Tilt 会自动重建/同步并更新部署改完仍通过http://homepage.k3d.localhost:8080/验证。清理环境测试结束后运行./k3d-down.shk3d-down.sh 执行k3d cluster delete homepage并删除k3d目录下的kubeconfig文件。副作用是明确的集群容器和本地 registry 全部销毁kubeconfig文件被移除如需再次使用重新执行./k3d-up.sh即可。替代路径不用 Helm chart 时的手动 Manifests如果你不想使用非官方 Helm chartdocs/installation/k8s.md 给出了完整的手动方案自行编写 ServiceAccount、Secret、ConfigMap、ClusterRole/ClusterRoleBinding、Service、Deployment 与 Ingress 的 manifest用kubectl apply -f filename.yaml逐个应用。该文档中的示例 Deployment 展示了HOMEPAGE_ALLOWED_HOSTS的另一种取值方式Pod IP 加$(MY_POD_IP):3000以满足 k8s 探针要求以及/api/healthcheck的 liveness 探针配置可作为理解 k3d 部署行为的对照。k3d 场景下的日常验证仍以本文的脚本路径为主manifest 路径适合你需要脱离 chart、完全自定义部署资源时使用。【免费下载链接】homepageA highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.项目地址: https://gitcode.com/GitHub_Trending/ho/homepage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考