GitLab Runner部署K3S集群资源报错:服务器找不到请求资源
问题分析与解决方案
核心问题
你遇到的the server could not find the requested resource错误,根源是CI中使用的kubectl版本(v1.9.2)与目标K3S集群版本严重不兼容。旧版本kubectl会调用K3S集群已移除的API端点(比如报错日志里的/swagger-2.0.0.pb-v1),直接导致404 NotFound错误。
Kubernetes官方明确要求kubectl客户端版本与集群Server版本的差距不能超过±1个大版本,v1.9.2是2018年的老旧版本,远低于当前K3S的默认发行版本,必然会出现API交互不兼容的问题。
解决步骤
1. 匹配kubectl与K3S集群版本
- 先在本地执行
kubectl version --short,查看K3S集群的Server版本(示例输出:Server Version: v1.27.9+k3s1)。 - 修改CI配置中的kubectl镜像版本,与集群大版本保持一致:
若私有镜像仓库无对应版本,可使用公共镜像(如deploy: stage: deploy image: name: harbor.localdomain.ma/devops/lachlanevenson/k8s-kubectl:v1.27.9 entrypoint: [] # 其余配置保持不变bitnami/kubectl:1.27.9),或自行构建对应版本的镜像。
2. 验证版本兼容性
修改后保留CI脚本中的kubectl version --insecure-skip-tls-verify命令,确认客户端与Server版本差距在±1个大版本内,示例正常输出:
Client Version: v1.27.9 Server Version: v1.27.9+k3s1
3. 额外排查点(可选)
- 确认
bs命名空间存在:若未创建,可在CI脚本中加入kubectl create namespace bs --dry-run=client -o yaml | kubectl apply -f -,避免因命名空间缺失导致部署失败。 - 检查资源文件API版本:确保deployment/service使用集群支持的稳定版本(如Deployment用
apps/v1、Service用v1),不过你本地已验证过配置,这一步大概率没问题。
验证
修改镜像版本后重新运行CI流水线,kubectl apply命令可正常与K3S集群API服务器交互,不会再出现404错误。
内容的提问来源于stack exchange,提问作者zakblack
相关产品推荐
相关产品推荐

