在 Scaleway 上使用 kOps 部署生产级 Kubernetes 集群:从零创建到 Terraform 管理全指南
在 Scaleway 上使用 kOps 部署生产级 Kubernetes 集群从零创建到 Terraform 管理全指南【免费下载链接】kopsKubernetes Operations (kOps) - Production Grade k8s Installation, Upgrades and Management项目地址: https://gitcode.com/gh_mirrors/kop/kopskOpsKubernetes Operations为 Kubernetes 集群的创建、升级与管理提供了全生命周期支持本文聚焦其Scaleway 云平台支持从环境准备、凭据配置、单 Master 集群创建到集群编辑/删除、Terraform 配置生成与滚动更新后的状态一致性修复给出完整可运行的实战流程。读完本文你将掌握在 Scaleway 上以 kOps 落地 Kubernetes 集群的完整路径并理解其底层 feature flag 门控、模型构建与资源打标机制源码依据见 pkg/model/scalewaymodel。当前状态与功能边界WARNINGkOps 对 Scaleway 的支持目前处于alpha阶段属于早期开发功能随时可能发生变更请谨慎使用。已支持的功能集群全生命周期创建create、更新update与删除delete集群支持滚动更新实例组管理创建、编辑与删除实例组Instance Groups可编辑字段包括但不限于实例镜像Instance image实例规格Instance size即 Scaleway 的商业类型 commercial type单 Master 到多 Master 迁移支持从单控制面平滑迁移到高可用多控制面架构。规划中的功能以下能力尚未实现属于后续开发方向Cluster Autoscaler自动扩缩容支持私有网络Private networkBareMetal 裸金属服务器。从源码结构看这些规划直接对应 Scaleway 云层实现中尚缺的能力例如 api_loadbalancer.go 明确以错误返回说明Scaleway 集群目前没有 VPC因此暂不支持内网负载均衡器印证了私有网络能力的缺失。环境准备在开始之前请确保满足以下前置条件已安装kops版本 1.26安装方式见 安装指南已安装kubectl用于与集群交互Scaleway 凭据至少需要 Access Key、Secret Key 和 Project IDS3 兼容对象存储桶及其凭据kOps 使用状态存储state store保存集群配置。桶的凭据可以与创建集群资源所用的凭据不同。如果使用 Scaleway 的对象存储桶需要在KOPS_STATE_STORE环境变量中为桶名加上scw://前缀有关状态存储的更多信息见 state.md。可选依赖SSH 密钥创建集群可以不提供 SSH 密钥但在更新集群时是必需的。支持id_rsa与id_ed25519两种格式域名如果希望把集群托管在自己的域名下需要在 Scaleway 注册该域名用于 Scaleway DNS 方案。环境变量配置1. 启用 Scaleway 支持由于 Scaleway 支持处于 alpha 阶段它被 feature flag 门控必须显式开启export KOPS_FEATURE_FLAGSScaleway这个 flag 在源码中有明确对应pkg/featureflag/featureflag.go 定义了Scaleway new(Scaleway, Bool(false))默认关闭pkg/clouds/supported.go 中只有在featureflag.Scaleway.Enabled()为真时才会把scaleway追加到可用的云平台列表随后kops create cluster --cloudscaleway才能通过校验。2. 配置 Scaleway 凭据kOps 通过 Scaleway 官方 SDKscaleway-sdk-go调用其 API凭据有两种传入方式方式一使用 SCW 配置文件推荐给已有 Scaleway DevTools 的用户如果你已经使用过 Scaleway 的命令行工具本地通常已有配置文件默认路径为$HOME/.config/scw/config.yaml可以通过 profile 名直接复用export SCW_PROFILEmy-profile方式二直接在环境中设置凭据export SCW_ACCESS_KEYmy-access-key export SCW_SECRET_KEYmy-secret-key export SCW_DEFAULT_PROJECT_IDmy-project-id注意profile 优先于环境变量被检查但如果你同时设置了二者环境变量会覆盖配置文件profile中的信息。在源码层面cloud.go 的NewScwCloud正是通过读取SCW_PROFILE或SCW_ACCESS_KEY/SCW_SECRET_KEY/SCW_DEFAULT_PROJECT_ID这些环境变量来构建 Scaleway 客户端并初始化 Domain、IAM、Instance、IPAM、LB、Marketplace 等一组 API 服务对象。3. 配置状态存储桶S3 Bucket凭据为了让 kOps 能读写状态存储桶中的集群配置还需要设置以下变量。这些凭据可以与上一节的凭据相同也可以不同export KOPS_STATE_STOREscw://bucket-name # bucket-name 为之前创建的桶名 # Scaleway 对象存储兼容 S3 协议因此只需覆盖部分 S3 配置即可指向我们的桶 export S3_REGIONfr-par # 或其他提供对象存储的 Scaleway 区域 export S3_ENDPOINTs3.$S3_REGION.scw.cloud # 定义 provider 端点 export S3_ACCESS_KEY_IDmy-access-key # 桶的 S3 API Access Key export S3_SECRET_ACCESS_KEYmy-secret-key # 桶的 S3 API Secret Key创建单 Master 集群基础创建命令如下分别演示三种典型场景# 场景一无 DNS可用区 fr-par-1 kops create cluster --cloudscaleway --namemy.cluster --zonesfr-par-1 --dnsnone --yes # 场景二使用 Scaleway DNS需要你在 Scaleway 注册并拥有该域名可用区 pl-waw-1 kops create cluster --cloudscaleway --namemycluster.mydomain.com --zonespl-waw-1 --yes # 场景三无 DNS新集群默认就是无 DNS 选项可用区 nl-ams-2 kops create cluster --cloudscaleway --namemycluster.k8s.local --zonesnl-ams-2 --yes上述命令会以如下默认参数创建集群容器网络接口CNIcilium。要更换使用--networkingcalico受支持的 CNI 完整列表见网络页面实例规格Instance typeDEV1-M。可通过--node-sizePRO2-XS和/或--control-plane-sizePRO2-XS修改实例镜像Instance imageubuntu_jammy。可通过--node-imageubuntu_focal和/或--control-plane-imageubuntu_focal修改。这些默认值均有源码依据默认实例规格常量定义于 populate_instancegroup_spec.godefaultNodeMachineTypeScaleway DEV1-M、defaultMasterMachineTypeScaleway DEV1-M默认镜像则由defaultImage结合集群架构与频道信息推断。此外instances.go 定义了根卷大小默认值节点Node根卷默认50GB、控制面Control Plane根卷默认20GB并且对于仅支持块存储的商用类型PRO、PLAY、ENT前缀见 instances.go会自动把根卷调整到上述大小块存储卷默认大小仅为 10GB不满足需求。注意目前只能将 kOps 集群创建在单个可用区中可选可用区为fr-par-1、fr-par-2、fr-par-3、nl-ams-1、nl-ams-2、nl-ams-3、pl-waw-1、pl-waw-2。集群的日常管理编辑集群配置# 在文本编辑器中打开集群配置文件供修改 kops edit cluster mycluster.k8s.local --statescw://my-state-store # 应用修改 kops update cluster mycluster.k8s.local --yes删除集群kops delete cluster mycluster.k8s.local --yes从模型构建的角度看kOps 在创建集群时会为 Scaleway 生成以下几类资源任务见 pkg/model/scalewaymodel实例Instanceinstances.go 为每个实例组生成对应数量的scalewaytasks.Instance并自动打上集群名、实例组名及角色标签ControlPlane/NodekOps 正是依靠这些标签如noprefixkops.k8s.io/cluster定义于 cloud.go来识别、归组和管理云资源负载均衡器Load Balancerapi_loadbalancer.go 在集群需要为 API 前置负载均衡时创建名为api.cluster-name的公网 LB并为其配置 HTTPS 后端/前端转发至 kube-apiserver 端口若使用私有/无 DNS 拓扑还会追加 kops-controller 的 LB 转发规则DNS 记录dns.go 在集群发布 DNS 记录时为 API 外部、内部以及kops-controller.internal创建 TTL 为 60 秒的 A 记录占位 IP 为203.0.113.123真实 IP 在资源落地后由 kOps 回填/更新SSH 密钥sshkey.go 将用户提供的 SSH 公钥注册为 Scaleway 的 SSH 密钥资源。Terraform 支持kOps 可以将集群直接生成对应的 Terraform 配置而不是由 kOps 直接创建资源。更多背景见 kOps Terraform 支持。场景一无负载均衡器的集群使用 Scaleway DNSkops create cluster --cloudscaleway --namemycluster.mydomain.com --zonesfr-par-1 --targetterraform --out$OUTPUT_DIR cd $OUTPUT_DIR terraform init terraform applykOps 会在你指定的输出目录中生成kubernetes.tf文件你只需初始化 Terraform 并执行 apply 即可。注意每次使用--targetterraform --out$OUTPUT_DIR重新调用 kOps 都会覆盖kubernetes.tf因此你对它所做的任何手工修改都会丢失。场景二带负载均衡器的集群无 DNS对于无 DNS 的集群存在一个特殊技巧kOps 在编写实例的 cloud-init 配置时还不知道负载均衡器的 IP 地址因此需要先执行一次 update再做一次滚动更新rolling-update。第一步创建有效集群kops create cluster --cloudscaleway --namemy.cluster --zonesfr-par-1 --targetterraform --out$OUTPUT_DIR cd $OUTPUT_DIR terraform init terraform apply # 负载均衡器就绪后更新集群以把其 IP 集成进实例配置 kops update cluster my.cluster --targetterraform --out$OUTPUT_DIR # 替换实例使其携带新配置重启此时集群尚无法校验因此需要 --cloudonly 标志 kops rolling-update cluster my.cluster --cloudonly --yes第二步保持 Terraform 状态与滚动更新后的一致性实例被滚动更新替换后集群即可通过校验。但此时资源已经脱离了 Terraform 的管理状态文件是失效的。若要保持状态与集群一致需要把新实例导入 Terraform 状态可使用以下脚本# 首先获取实例名称 cd $OUTPUT_DIR || exit TF_SERVERS($(grep resource scaleway_instance_server kubernetes.tf | awk {print $3} | cut -d -f 2)) # 然后获取导入所需的可用区 ZONE$(terraform output zone | cut -d -f2) # 对每个实例 for SERVER in ${TF_SERVERS[]}; do # 从状态中移除过期的实例 terraform state rm scaleway_instance_server.$SERVER # 获取其新 ID NEW_SERVER_ID$(scw instance server list zone$ZONE name$SERVER -o template{{ .ID }}) if [ $NEW_SERVER_ID ]; then echo could not find new ID of the server $SERVER fi # 将新实例导入状态 terraform import scaleway_instance_server.$SERVER $ZONE/$NEW_SERVER_ID done注意运行该脚本需要安装Scaleway CLIscw。你也可以在 Scaleway Console 中手动查询新实例的 ID但如果实例数量较多手动方式并不实际。下一步现在你已经拥有了一个可用的 kOps 集群建议继续阅读生产环境配置建议了解如何为生产负载配置 kOps。例如你可以把集群迁移到高可用架构将单 Master 扩展为多控制面以提升集群的容灾能力。小结本文完整覆盖了在 Scaleway 上使用 kOps 的落地路径先通过KOPS_FEATURE_FLAGSScaleway打开 alpha 支持再配置 SCW 凭据与 S3 兼容状态存储随后用一条kops create cluster --cloudscaleway命令即可创建默认 CNI 为 Cilium、实例规格为 DEV1-M、镜像为 ubuntu_jammy 的集群日常管理通过kops edit/update/delete完成如需基础设施即代码可用--targetterraform生成kubernetes.tf并对带负载均衡器的无 DNS 集群执行先 update 后 rolling-update、再导入新实例的三步流程。需要特别留意的是当前支持仍为 alpha、单可用区部署、尚未支持内网负载均衡与自动扩缩容生产使用前请结合源码与官方文档充分评估。【免费下载链接】kopsKubernetes Operations (kOps) - Production Grade k8s Installation, Upgrades and Management项目地址: https://gitcode.com/gh_mirrors/kop/kops创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

uniapp车牌输入控件开发与优化实践

uniapp车牌输入控件开发与优化实践

1. 项目背景与需求分析在移动端应用开发中,车牌号输入是一个常见但容易被忽视的交互痛点。传统文本输入框在处理车牌号这类具有固定格式的输入时存在明显不足:用户需要手动切换中英文键盘、无法自动校验格式、缺乏输入引导等。这正是我们需要开发uniapp车…

2026/9/21 18:25:23 阅读更多 →
Agent Skill实战指南:SKILL.md契约、渐进式披露与MCP协议

Agent Skill实战指南:SKILL.md契约、渐进式披露与MCP协议

1. 这不是一份文档说明书,而是一份Agent Skill实战手记我第一次在本地跑通一个真正能“自己查资料、改代码、发PR”的Skill时,盯着终端里滚动的日志看了三分钟——不是因为成功了,而是因为终于搞懂了SKILL.md里那几行看似平淡的YAML字段&…

2026/9/21 18:25:23 阅读更多 →
CAD卸载清理工具入门到精通:3个致命坑与修复方案

CAD卸载清理工具入门到精通:3个致命坑与修复方案

CAD卸载清理工具入门到精通:3个致命坑与修复方案 复制来的代码跑不通,改半天报错还在原地打转?别急着甩锅给环境,十有八九是清理逻辑没对齐底层机制。想从入门到精通搞定CAD残留文件,光靠手动删注册表是死路一条。…

2026/9/21 18:24:23 阅读更多 →

最新新闻

NixOS 配置回滚完全指南:从 GRUB 启动菜单到 `nixos-rebuild --rollback`

NixOS 配置回滚完全指南:从 GRUB 启动菜单到 `nixos-rebuild --rollback`

包管理器操作系统 【免费下载链接】nixpkgs Nix Packages collection & NixOS 项目地址: https://gitcode.com/GitHub_Trending/ni/nixpkgs 点击查看 免费下载 导读 在 NixOS 中执行 nixos-rebuild switch 切换到新配置后,如果新配置表现不佳&…

2026/9/21 18:49:38 阅读更多 →
nix-env --list-generations 详解:查看与理解 Nix profile 代际(generations)

nix-env --list-generations 详解:查看与理解 Nix profile 代际(generations)

开发工具CLI 【免费下载链接】nix Nix, the purely functional package manager 项目地址: https://gitcode.com/gh_mirrors/ni/nix 点击查看 免费下载 nix-env --list-generations 是 Nix 包管理器中用于查看当前活动 profile(用户环境)所有…

2026/9/21 18:49:38 阅读更多 →
续雪一文搞懂:从证书补办到跨省转介的底层逻辑拆解

续雪一文搞懂:从证书补办到跨省转介的底层逻辑拆解

续雪一文搞懂:从证书补办到跨省转介的底层逻辑拆解 官方文档往往长达数百页,条款晦涩,新手一翻就头大,根本抓不住重点。别急,今天我们就用 一文搞懂…

2026/9/21 18:49:38 阅读更多 →
OpenWorker 的 Persona Manifest 格式与 E2E Tester 测试专用人格:从 e2e-tester.md 看人格清单的编写与全链路验证

OpenWorker 的 Persona Manifest 格式与 E2E Tester 测试专用人格:从 e2e-tester.md 看人格清单的编写与全链路验证

人工智能AI AgentAI 应用交互助手本地部署桌面应用MCP Clients 【免费下载链接】openworker 项目地址: https://gitcode.com/gh_mirrors/op/openworker 点击查看 免费下载 本篇技术指南以 OpenWorker 仓库中 surfaces/gui/e2e-live/fixtures/persona/e2e-tester.md…

2026/9/21 18:49:38 阅读更多 →
3个新手避坑点:亚洲网站部署底层原理与调试实战

3个新手避坑点:亚洲网站部署底层原理与调试实战

3个新手避坑点:亚洲网站部署底层原理与调试实战 代码从博客复制过来,本地跑通,一部署到亚洲区域的服务器就报 404 或者连接超时,这种“玄学”问题坑了多少应届生?别急着甩锅给网络, 新手避坑…

2026/9/21 18:49:38 阅读更多 →
CopyTranslator 复制即翻译外文阅读辅助:核心用法、功能特性与源码实现解析

CopyTranslator 复制即翻译外文阅读辅助:核心用法、功能特性与源码实现解析

桌面应用人工智能 【免费下载链接】CopyTranslator 🔠Foreign language reading and translation assistant based on copy and translate. 项目地址: https://gitcode.com/gh_mirrors/co/CopyTranslator 点击查看 免费下载 CopyTranslator 是一款基于&…

2026/9/21 18:48:38 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →