在Kubernetes中部署同一应用多版本的问题及配置报错咨询
一、核心疑问解答
1. 能否在同一Namespace下部署第二个版本?
可以。只要保证所有Kubernetes资源(Deployment、Service、ConfigMap等)的名称唯一,Pod的标签不重复,就可以在同一Namespace下并行运行多个版本的应用。比如你配置中第二个Deployment命名为test-helloworld-gkp-v1,与第一个test-helloworld-gkp名称不同,Pod标签app: test-helloworld-gkp-v1也独立,满足要求。
2. 方案选择:同一Namespace vs 不同Namespace vs 其他集群
- 同一Namespace:适合短期测试、临时并行运行场景,资源管理集中,但需严格避免资源名称冲突,监控/日志需通过标签区分版本。
- 不同Namespace:更适合长期并行运行的生产场景,隔离性更强,可单独配置权限、资源配额,天然避免资源名称冲突,管理更规范。
- 其他集群:一般无需考虑,除非当前集群资源不足或有严格的环境隔离要求(如生产与测试集群物理隔离),你的场景同一集群完全满足需求。
二、部署错误修复
你遇到的错误分为两类,逐一解决:
1. API版本不兼容错误
unable to recognize "kube\kustomize\overlays\local": no matches for kind "Service" in version "v1beta1", unable to recognize "kube\kustomize\overlays\local": no matches for kind "Deployment" in version "apps/v1beta1"
- 原因:Kubernetes已废弃
apps/v1beta1(Deployment)和v1beta1(Service)这类旧API版本,当前稳定版本为:- Deployment:
apps/v1 - Service:
v1
- Deployment:
- 修复:检查
kube\kustomize\overlays\local目录下的所有资源文件,将Deployment的apiVersion改为apps/v1,Service的apiVersion改为v1。
2. 资源数量格式错误
Error from server (BadRequest): error when creating "kube\kustomize\overlays\local": Deployment in version "v1" cannot be handled as a Deployment: unable to parse quantity's suffix
- 原因:第一个Deployment的CPU资源配置中使用了无效后缀
625mm,Kubernetes的CPU单位仅支持m(毫核)或核心数(如1代表1核)。 - 修复:将第一个Deployment中
resources.requests.cpu和resources.limits.cpu的625mm改为625m。
3. 其他配置错误
你的第二个Deployment还存在两处问题:
apiVersion错误:Deployment没有apps/v2版本,需改为apps/v1;- 缩进错误:
metadata字段前多了空格,需修正缩进对齐。
修正后的第二个Deployment关键片段:
--- apiVersion: apps/v1 kind: Deployment metadata: name: test-helloworld-gkp-v1 spec: selector: matchLabels: app: test-helloworld-gkp-v1 # 其余配置保持不变
内容的提问来源于stack exchange,提问作者Ananya

