kOps 1.36 版本特性全解析:Kubernetes 1.36 支持、gVisor 运行时、混合引导与多云能力刷新
【免费下载链接】kopsKubernetes Operations (kOps) - Production Grade k8s Installation, Upgrades and Management项目地址: https://gitcode.com/gh_mirrors/kop/kops
导读
本文基于 kOps 仓库的 1.36 版本发布说明,系统梳理 kOps 1.36 系列的核心变更:新增 Kubernetes 1.36 支持、彻底移除 in-tree 云提供商、containerd 2.2 / etcd-manager 等组件刷新、gVisor 沙箱运行时落地、Karpenter 托管EC2NodeClass与NodePool、gossip 集群混合引导(hybrid bootstrap),以及 Azure、Hetzner、GCP 的体验增强和实验性 Linode 云提供商。读完本文,你将掌握 kOps 1.36 的升级前置条件(Breaking changes)、各功能对应的集群规格字段(ClusterSpec / InstanceGroupSpec)写法,以及升级到 1.36 前必须处理的弃用项与迁移路线。
一、版本总览:1.36 系列做了什么
kOps 1.36 的核心变更可以概括为五条主线:
- Kubernetes 1.36 支持,并同步刷新
kube-apiserver、kubelet、kube-proxy、kube-scheduler等控制面组件的默认行为与可调参数; - 彻底摆脱 in-tree 云提供商,
cloud-provider-aws与cloud-provider-gcp依赖被移除,外部云提供商成为唯一路径(Kubernetes 1.33+ 本就强制要求); - 组件批量刷新:containerd v2.2、etcd-manager v3.0.20260707、AWS Load Balancer Controller v3.3.0、EBS CSI v1.58.0、CoreDNS v1.14.x、cluster-autoscaler v1.36.0、cert-manager v1.19.5 等;
kops-channels插件管理器的构建与部署方式重构:从独立二进制变为 kOps 托管镜像 + 控制面静态 Pod;- 多云能力扩展:Karpenter 原生托管节点组对象、gossip 集群混合引导、Azure / Hetzner 增强、实验性 Linode(Akamai)云提供商。
此外,构建系统全面升级到 Go 1.25.7+,发布二进制改用gcr.io/distroless/static基础镜像并默认 strip(Makefile 中的发布流程配套更新)。
二、Kubernetes 控制面与节点组件变更
2.1 kube-apiserver:大集群默认值对齐与存储初始化超时
- 将
deleteCollectionWorkers、MaxRequestInflight、compactionInterval与 kube-up 的大集群默认值对齐,改善大规模集群下 API 请求的处理与 etcd 压缩节奏; - 新增
storageInitializationTimeout字段,允许 etcd 在 kube-apiserver 判定就绪前获得更多准备时间。该字段定义在 pkg/apis/kops/componentconfig.go 的KubeAPIServerConfig中:
// StorageInitializationTimeout is the maximum amount of time to wait for the storage layer to initialize before declaring kube-apiserver ready. StorageInitializationTimeout *metav1.Duration `json:"storageInitializationTimeout,omitempty" flag:"storage-initialization-timeout"`对应集群规格写法:
spec: kubeAPIServer: storageInitializationTimeout: 2m0s2.2 kubelet:配置迁移与新调优项
- 将大量废弃的 CLI 标志迁移到通过
--config传入的 kubelet 配置文件; - 新增
kubeAPIQPS/kubeAPIBurst、nodeAllocatableUpdatePeriodSeconds等可调参数;其中nodeAllocatableUpdatePeriodSeconds仅在 Kubernetes 1.35+ 上设置(避免旧版本不识别该字段导致启动失败)。
在 pkg/apis/kops/componentconfig.go 中可见KubeAPIQPS的注释默认值为 50(kubelet 与 apiserver 通信的 QPS 上限):
// KubeAPIQPS Burst to use while talking with kubernetes apiserver. (default 50) KubeAPIQPS *int32 `json:"kubeAPIQPS,omitempty" flag:"kube-api-qps"`2.3 kube-proxy 与 kube-scheduler
kube-proxy改为绑定挂载 kubeconfig目录而非单个文件,这样 kubeconfig 轮换(rotation)后代理进程无需重启即可读取新凭据;kube-scheduler的KubeSchedulerConfiguration文档澄清(纯文档性变更)。
2.4 kops-controller 与云配置清理
kops-controller现在会校验实例组名称合法性;- 删除遗留的 node reconciler,DigitalOcean 走非 legacy 的
Identifier接口(见下文 DO 章节); - 移除未使用的 in-tree 云配置(cloud config)管道,为全面外置云提供商铺路。
三、容器运行时:containerd v2.2 与 gVisor RuntimeClass
3.1 containerd 默认版本与 TOML v3 兼容
- Kubernetes 1.32+ 集群默认 containerdv2.2.4(runc 1.3.5),更老集群保持 v1.7.32;kOps 特意留在 containerd 2.2.x,以规避 containerd 2.3 的 sandbox-image 回归;
- 支持 containerd 配置TOML v3格式,并清理 1.6 时代的死代码。
⚠️升级前必改:如果你在集群或实例组上设置了spec.containerd.configAdditions,必须在升级前把这些条目改写成 TOML v3 schema。源码 pkg/apis/kops/containerdconfig.go 明确注释了两种路径风格:
// configured containerd: v2 paths (e.g. plugins."io.containerd.grpc.v1.cri".*) for // containerd < 2.0, v3 paths (e.g. plugins."io.containerd.cri.v1.runtime".*) for >= 2.0. ConfigAdditions map[string]intstr.IntOrString `json:"configAdditions,omitempty"`- 注册表镜像通配符(registry mirror wildcard)映射到
_default目录; - nodeup 将校验过的镜像字节流直接送入
ctr import,并移除 containerized-mounter Archive 任务; kops toolbox dump新增导出 containerd 配置文件的能力,方便排障。
3.2 gVisor RuntimeClass 支持(新功能)
kOps 1.36 支持用gVisor(runsc)作为 containerd runtime handler 运行工作负载。启用后 kOps 会:
- 通过 apt 安装
runsc运行时; - 在 containerd 中注册
runscruntime handler; - 创建名为
gvisor的 Kubernetes RuntimeClass; - 通过
kops.k8s.io/gvisor节点标签,把引用该 RuntimeClass 的 Pod 自动调度到启用 gVisor 的节点。
配置是按 worker 实例组生效的,集群级配置会被拒绝;实例组级配置仅接受 worker 角色。源码 pkg/apis/kops/validation/instancegroup.go 的校验逻辑:
if g.Spec.Containerd != nil && g.Spec.Containerd.GVisor != nil && fi.ValueOf(g.Spec.Containerd.GVisor.Enabled) && !g.Spec.Role.HasNode() { allErrs = append(allErrs, field.Forbidden(field.NewPath("spec", "containerd", "gvisor"), "gVisor can only be enabled on instance groups with role Node")) }实例组配置示例(GVisorConfig 定义见 pkg/apis/kops/containerdconfig.go):
# instancegroup.yaml spec: role: Node containerd: gvisor: enabled: true platform: systrap # 默认;也支持 kvmplatform说明:systrap是默认执行平台,兼容包括虚拟机在内的所有环境;kvm面向支持 KVM 的裸金属/物理机。
限制:目前仅支持 Debian 系发行版(Debian、Ubuntu)。
四、网络组件:Cilium、Calico、kube-router 与 DNS
4.1 Cilium 新可调项
cilium-operator调度到控制面节点(默认行为调整);- 新增
Cilium.ExtraConfig:允许向cilium-configConfigMap 追加任意键值,且键会覆盖默认值。定义见 pkg/apis/kops/networking.go:
// ExtraConfig is appended to the cilium-config ConfigMap. Keys here override any value ExtraConfig map[string]string `json:"extraConfig,omitempty"`spec: networking: cilium: extraConfig: monitor-aggregation: medium- 新增
EnableHostFirewall字段,在 Cilium agent 中启用宿主机防火墙(pkg/apis/kops/networking.go):
// EnableHostFirewall enables the host firewall in the Cilium agent. EnableHostFirewall *bool `json:"enableHostFirewall,omitempty"`- 新增
bpf-lb-sock与bpf-lb-sock-hostns-only标志; - liveness probe 现在要求
k8s-connectivity; - ENI IPAM 模式下允许关闭
masquerade(对应 networking.go 的Masquerade字段)。
4.2 Calico、kube-router、AWS VPC CNI
- Calico eBPF 模式下自动禁用 kube-proxy;
- Calico 新增
NFTablesMode字段,配置 Felix 的 nftables 支持; - kube-router 更新到 v2.10.0,并关闭其严格的外部 IP 校验;
- AWS VPC CNI 更新到 v1.21.2;
- 移除基于 GCS 的 CNI 插件镜像(deprecated 镜像源)。
4.3 CoreDNS 与 dns-controller
- CoreDNS 先升到 v1.14.3 再钉在 v1.14.2(留在受支持分支),并提升大集群下的 CoreDNS 内存;
- CoreDNS 在
hostname拓扑分布约束中尊重节点污点; dns-controller的priorityClassName可配置;当ExternalDNS只配置了一部分时自动默认Provider;dns-controller现在总是应用 addon(未使用时就渲染空清单),这样当集群迁移走 dns-controller 后,遗留的 Deployment 会被自动清理。
五、AWS:负载均衡、Karpenter 与 IAM 精细化
5.1 移除 in-tree 云提供商
cloud-provider-aws依赖被彻底移除,AWS 上的cloud-controller-manager等外置组件成为唯一路径(Breaking changes 章节)。
5.2 AWS Load Balancer Controller v3.3.0
- 升级到 v3.3.0,manifest 改为 Helm + Kustomize 流水线生成;
- 裁剪内置 Deployment,移除
ALBTargetControlConfigCRD; - 对 cert-manager 绕过 LBC webhook,避免循环引导(circular bootstrap)问题;
- 新增
elasticloadbalancing:SetRulePriorities与ec2:DescribeSubnets权限; - 钉住 Deployment 的 label selector,保证从旧 kOps 版本原地升级成功。
5.3 Karpenter v1.13.0 与 kOps 托管节点组
- 升级到 v1.13.0,废弃的
karpenter.sh/provisioner-name标签替换为karpenter.sh/nodepool,addon manifest 同样走 Helm + Kustomize 流水线; - kOps 现在为每个
spec.manager: Karpenter的实例组自动生成受管EC2NodeClass与NodePool,实例组删除时对应对象会被裁剪(prune); - Karpenter 节点注册时带上
karpenter.sh/unregistered污点; - Karpenter IAM 策略补充缺失的 EC2 只读权限。
实例组侧字段定义在 pkg/apis/kops/instancegroup.go:
type InstanceManager string const ( InstanceManagerCloudGroup InstanceManager = "CloudGroup" InstanceManagerKarpenter InstanceManager = "Karpenter" ) // Manager determines what is managing the node lifecycle Manager InstanceManager `json:"manager,omitempty"`配套的判定方法IsKarpenterManaged()(instancegroup.go):
// IsKarpenterManaged checks if instanceGroup is a worker node group managed by Karpenter. func (g *InstanceGroup) IsKarpenterManaged() bool { return g.Spec.Manager == InstanceManagerKarpenter && g.Spec.Role == InstanceGroupRoleNode }spec: role: Node manager: Karpenter machineType: m6i.large minSize: 2 maxSize: 105.4 其他 AWS 变更
- EBS CSI 驱动更新到 v1.58.0,刷新上游 IAM 策略,并在 Kubernetes 1.35+ 上开启
MutableCSINodeAllocatableCount; kops-controller改为 HTTPS 服务,并在 API NLB 目标组上暴露/healthz;- 滚动更新时如果负载均衡 deregister 失败会中止,不再带病前进;目标组健康检查变更会同步 reconcile 到已存在的目标组;
NodeTerminationHandler新增EnableOutOfServiceTaint字段,并允许在 Queue Processor 模式下关闭enableScheduledEventDraining;- 混合实例策略:
onDemandAllocationStrategy应用到 ASG,无值的污点会作为 ASG 标签传播; instanceRequirements新增excludedInstanceTypes(instancegroup.go 中定义),并修复一个内存分配 bug:
spec: instanceRequirements: excludedInstanceTypes: - t3.micro - t3.nano- NLB 新增安全组模式选项;
- 已有 IPv6 CIDR 的私有子网会被视为已分配 CIDR;
- RHEL 9 上为 AWS VPC CNI 禁用
nm-cloud-setup; - 大规模裁剪实例角色 IAM 权限,只保留各组件实际使用的权限;
- S3 侧:用
HeadBucket解析桶区域、向 S3 客户端传递 VFS scheme 与 provider 选项、在 S3 provider 不支持 checksum 时静默告警。
六、Azure:权限收敛、CCM 落地与 CSI 支持
- 权限收敛(重要安全变更):控制面 VMSS identity 在集群资源组上由内置Owner角色降为Contributor。已存在的集群会保留旧 Owner 角色分配,直到用
az role assignment delete手动删除或删除集群; - 部署
cloud-controller-manager(v1.36.2),支持节点生命周期与负载均衡; - 实验性 Terraform target 支持;
- 新增Azure Disk CSI Driver(v1.34.4)支持;
- 节点到 API 的 NSG 规则收敛到 NAT 网关公网 IP;
- kops-controller 探针与 LB 健康检查改用 HTTPS,并把探针/规则配置迁移到 model 中的 SDK 类型;
- 云配置改为
/etc/kubernetes/azure.json,CCM/CSI 配置通过新的azure-cloud-configaddon 从 Secret 加载,节点上不再写 cloud-config 文件; - kubelet 启动时设置 provider ID;kubenet 与 Kindnet 启用 CCM cloud routes;
- 存储账号编码进
azureblob://URL(见下文 Breaking changes 的 URL 格式变更); - 删除集群健壮性:磁盘删除前先阻塞父 VMSS、在 VM scale set 之后再删除
RoleAssignment、处理缺失资源组、修复若干 nil 指针与顺序问题; - 失败 provisioning 状态的任务会重试;修复 Terraform
LoadBalancer对PublicIP的任务依赖;测试默认 VM SKU 改为更大的Standard_D4ls_v6。
七、GCP:kops-controller 入内网 LB、实例组与卷类型
kops-controller加入 GCE 内网负载均衡,并在 gossip 集群中通过内网 LB 暴露;- GCE 上
kops-controller使用 SSL 健康检查; - 支持 GCE 上
role=apiserver+dns=none组合,并修复role=apiserver的实例标签; - Calico 允许节点到控制面的 BGP;
- 不支持 live migration 的实例类型不再请求 live migration;
- 等待
InstanceManagers/InstanceTemplates删除完成;找不到实例时纳入 MIG 扩缩容错误; - 允许
N4A实例类型;多可用区实例组的所有 zonal MIG 都注册到 cluster-autoscaler; - 下发
kops.k8s.io/instancegroup节点标签; - 移除
cloud-provider-gcp依赖,clouddns切换到 fork 的gcetokensource; - GCE alias IP 下允许 Pod 访问控制面节点上的 metric 端口;
- GCE 支持控制面卷类型配置;修复实例组删除与删除时 nil panic;
- GCS bucket discovery store 处理迁移,并拒绝没有 bucket 的 GCS VFS 路径。
八、Hetzner、DigitalOcean、OpenStack 与实验性 Linode
8.1 Hetzner:集群自动扩缩容落地
- 启用 Cluster Autoscaler;
- Node-role 服务器携带
hcloud/node-group标签(Hetzner 的 autoscaler 依赖它识别节点组);旧 kOps 创建的服务器在替换后会获得该标签; - 行为变更:降低实例组
minSize不再删除多余服务器,minSize只是下限;请用kops delete instance或依赖 Cluster Autoscaler 缩容; hcloud-cloud-controller-manager升到 v1.31.0;hcloud-csi-driver升到 v2.20.2,并调整 CSI Deployment 先于 DaemonSet 部署;- hcloud Secret 拆成独立 addon,CSI 驱动消费 CCM 提供的 Secret。
8.2 DigitalOcean
- 默认机型改为
s-2vcpu-4gb-amd; - 节点标识迁移到非 legacy
Identifier接口,droplet 打上实例组角色标签; - 移除 CSI node-driver-registrar ClusterRole 中非法的
namespace字段。
8.3 OpenStack
- 解决 kOps 1.21 遗留的
floatingipTODO; - gossip 集群启用混合引导(hybrid bootstrap)模式。
8.4 Linode(Akamai,实验性)
- 云提供商 API 注册、VFS 对象存储 schema、VPC cloudup 任务、nodeup 配置与节点身份;
- ⚠️尚不具备生产就绪条件,仅用于实验验证。
8.5 Bare metal
- 裸金属工具链不再使用 protobuf;
- metal provider 的 Kubernetes 版本不再钉死(unpin)。
九、Etcd 与 etcd-manager 刷新
etcd-manager 更新到v3.0.20260707,带来:
- 数据盘被替换成空盘后的集群成员恢复能力;
- 面对不可达成员的 etcd membership 变更更稳健;
- 新增
--env-file标志,可从文件加载凭据; - 基于 go-runner 的 distroless 镜像;
- 单成员集群启动更快:把自己 seed 进 gossip peers 并跳过选举后等待。
配套变更:
- etcd 升到最新补丁版(3.5.31、3.6.12),移除 etcd 3.4 支持;
EtcdManagerSpec新增ListenClientHTTPURLs字段,支持纯 HTTP 的 etcd 客户端监听;- etcd-manager patch 符号链接动态生成;
- 可伸缩性测试中把
EtcdEventsHTTP 流量与主 etcd 集群流量解耦。
十、Channels 与 Addons:kops-channels 重构
1.36 把kops-channelsaddon 管理器从独立二进制改造为kOps 托管的容器镜像 + 控制面静态 Pod;protokube 不再负责应用 channels 或给控制面节点打标签。具体变化:
kops-channels新增--node-name、--interval参数、多 URL apply 支持,并在首次 reconcile 成功前更快地重试;- 节点标签器(node labeler)从 protokube 移入
kops-channels; - addon 应用失败通过 readiness probe 暴露;
- 修复区域检测与 discovery 缓存权限噪音;
spec.addons条目现在既支持 kOpsAddons索引,也支持直接指向普通 Kubernetes manifest(按原样应用);- 发布产物中不再包含独立的
channels二进制; - addons 以 fi-task 形式渲染,使 addon 模板可以引用最终确定的任务图;移除 legacy
9.99.0版本 shim 和废弃的 masternodeAffinity项。
spec.addons指向普通 manifest 的写法:
spec: addons: - manifest: https://example.com/path/to/manifest.yaml十一、Gossip:混合引导(Hybrid Bootstrap)
1.36 为 gossip 集群引入混合引导,覆盖 AWS、Azure、GCE、OpenStack:
- 控制面节点继续使用 gossip 引导;
- worker 直接向 API NLB / 内网 LB 引导,worker 不再需要 protokube;
- gossip seed 发现限制在控制面节点,不再向 worker 导出未使用的云凭据;
- 新建集群默认
dns=none,若仍请求 gossip 则输出弃用告警; - 不适用 dns-controller 的集群会以空 manifest 应用该 addon,从而自动清理遗留资源;
- 校验每个云提供商支持的 DNS 拓扑;
- protokube mesh gossip protobuf 从 gogo 迁移;
- 新增最小 gossip create/update 集成测试与升级 e2e 测试。
这为 gossip(.k8s.local)集群迁移到--dns=none或托管 DNS 提供了更平滑的路径——worker 引导链路不再依赖 gossip,只有控制面短暂依赖。
十二、操作系统支持变化
- 移除:Amazon Linux 2、Ubuntu 20.04、Debian 10;
- 新增(实验性):Ubuntu 26.04;
- RHEL 10+:加载
nf_tables模块、安装iptables-nft,并加载ip_set模块、禁用firewalld(Rocky Linux 10+ 同理); - Rocky 9:启用
nf_conntrack内核模块; - Debian 11:跳过
ImageVolume测试,防止cloud-ifupdown-helper劫持 CNI veth; - Rocky 10 的 E2E 使用
--node-os-arch=arm64。
十三、其他组件与工具链
- cluster-autoscaler 升级到 v1.36.0,并为旧 Kubernetes 版本保留按次版本(per-minor)的构建;
- cert-manager v1.19.5,Controller 上设置
AWS_REGION以支持 Route53 dns-01 solver; - metrics-server 在 AI Conformance 测试中以 insecure 模式运行;
- Go 升级到 v1.25.7 / v1.25.8 / v1.25.9 / v1.26.2 / v1.26.3 / v1.26.5;
- 发布二进制以
gcr.io/distroless/static为基础镜像并默认 strip; kops toolbox移除内置 helm 依赖,改用 fork 的helmstrvals;structured-merge-diff从 v4 切到 v6;hashicorp/memberlist升到 v0.5.4。
十四、CLI 与其他行为改进
kops reconcile cluster支持--use-kubeconfig,复用已有 kubeconfig 而非重新生成;kops create cluster支持--node-volume-type标志;kops create instancegroup与create cluster的节点标签对齐;kops get assets修复spec.dnsZone是 DNS 名称时的查找;kops update cluster拒绝非http(s)的assets.fileRepository并对其做校验;kops upgrade-ab允许 upgrade-AB 场景下的 kOps 降级;kops toolbox dump新增--node-dump-timeout控制每节点日志导出超时,提升可靠性并在 GCE 上跳过 not-found 节点;kops set与--set标志现在可以向切片追加新元素,而不是在索引缺失时报错;- nodeup:实验性 hybrid-bootstrap worker 跳过 protokube/channels 资源;为 Cilium-ENI 集群填充
DefaultMachineType;kops-channels复用共享系统组件环境变量; - 文件写入在 close/rename 前确保权限正确,修复
PrivateKey.WriteTo返回零长度的问题; dns-controller在-logtostderr=true时仍尊重klog -stderrthreshold;- 修复
HasHighlyAvailableControlPlane在实例组过滤下应使用AllInstanceGroups的问题; - 修复向已关闭 results channel 发送导致 kops panic 的问题;
AssetBuilder改为并发安全;side-loading 使用KOPS_BASE_URL镜像版本;- 移除显式
fs.inotify.max_user_watchessysctl 设置。
AI Conformance(实验性)
新增tests/ai-conformance实验测试套件,覆盖加速器指标、Kueue gang scheduling、可观测性与 AI 服务指标、Pod/集群自动扩缩容、GPU operator 与 Cilium gateway API 集成等。该套件服务于 kOps CI/E2E,尚未作为面向用户的特性暴露。
十五、Breaking Changes(升级前必读)
升级到 kOps 1.36 前,请逐条核对:
- 操作系统:Amazon Linux 2、Ubuntu 20.04、Debian 10 支持已移除,运行这些发行版的集群必须先迁移到受支持 OS 再升级;
- Kubernetes 1.30 支持已移除;
- etcd 3.4 支持已移除,集群必须运行 etcd 3.5 或 3.6;
- 独立
channels二进制不再分发,kops-channels以静态 Pod 运行在控制面节点; - legacy
9.99.0addons-version shim 已移除:kOps 1.22 之前设置的 addon 必须在升级前重新应用; - in-tree 云提供商依赖移除:
cloud-provider-aws、cloud-provider-gcp已从 kOps 中删除,外部云提供商成为必需(Kubernetes 1.33+ 已强制); azureblob://URL 格式变更:旧的azureblob://{container}/{key}(配合AZURE_STORAGE_ACCOUNT环境变量)不再接受,状态存储路径必须使用新的azureblob://{account}/{container}/{key}形式;spec.containerd.configAdditions:必须按 containerd TOML v3 schema 改写后再升级;authorization默认值变更:用kops create -f/kops replace -f应用且省略顶层authorization字段的清单,现在默认 RBAC 而非AlwaysAllow(与kops create cluster一致)。想让集群保持AlwaysAllow需显式设置spec.authorization.alwaysAllow: {}。
十六、弃用与迁移预告
- Kubernetes1.31 弃用,将在 kOps 1.37 移除;
- 独立
channels二进制不再分发(见上); - AWS Classic Load Balancer(CLB)用于 API:自 kOps 1.26 弃用,将在 1.37 移除。新建使用 CLB 的集群将被拒绝,现有集群须先迁移到 NLB 才能升级,迁移步骤见 CLB 到 NLB 迁移指南;
- gossip DNS:自 kOps 1.29 弃用,将在 1.37 移除。新建 gossip 集群将被拒绝,现有集群须先迁移才能升级。受影响的是名字以
.k8s.local结尾且未用--dns=none创建的集群;用--dns=none创建(即使名字带.k8s.local)不受影响。建议迁移到--dns=none或托管 DNS 区域,kOps 1.36 的混合引导(hybrid bootstrap)正是为降低这一迁移难度而引入,详见 gossip 说明文档。
十七、Known Issues
截至 1.36 发布,官方记录None at this time(暂无已知问题)。
总结:升级到 1.36 的行动清单
- 确认集群操作系统在受支持列表内(不在 Amazon Linux 2 / Ubuntu 20.04 / Debian 10 上);
- 确认 Kubernetes 版本 ≥ 1.31,etcd 为 3.5 / 3.6;
- 检查并改写
spec.containerd.configAdditions为 TOML v3 格式; - 若曾使用
kops -f应用省略authorization的清单,确认 RBAC 默认值符合预期; - 将 Azure 状态存储路径改写为新版
azureblob://{account}/{container}/{key}; - 规划 CLB→NLB 与 gossip→
dns=none的迁移(1.37 将强制执行); - 升级后验证
kops-channels静态 Pod、Karpenter 生成的EC2NodeClass/NodePool、以及 worker 的 hybrid bootstrap 引导是否正常。
【免费下载链接】kopsKubernetes Operations (kOps) - Production Grade k8s Installation, Upgrades and Management项目地址: https://gitcode.com/gh_mirrors/kop/kops
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考