kubernetes - Kubernetes命名空间中部署定义的唯一性
问题描述
我们有多个环境,如 dev、qa、prepod 等。我们有基于环境的命名空间。现在我们以环境为后缀命名服务。例如,
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-order-service-develop-deployment
namespace: dev
labels:
k8s-app: k8s-order-service-develop
spec:
selector:
matchLabels:
k8s-app: k8s-order-service-develop
相反,我可以在所有命名空间中使用以下内容吗?即deployment
每个命名空间是否唯一?
在开发环境中:
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-order-service-deployment
namespace: dev
labels:
k8s-app: k8s-order-service
spec:
selector:
matchLabels:
k8s-app: k8s-order-service
在 QA 环境中:
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-order-service-deployment
namespace: qa
labels:
k8s-app: k8s-order-service
spec:
selector:
matchLabels:
k8s-app: k8s-order-service
解决方案
从部署定义中删除命名空间并将其命名为 deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-order-service-develop-deployment
labels:
k8s-app: k8s-order-service-develop
spec:
selector:
matchLabels:
k8s-app: k8s-order-service-develop
然后您可以使用以下命令将其部署在特定命名空间中
kubectl create -f deploy.yaml -n <namespace-name>
ex:
kubectl create -f deploy.yaml -n dev
kubectl create -f deploy.yaml -n qa
您可以查看kustomize以获得更多选项和灵活性
这样您就可以为不同的环境使用相同的部署文件。并且每个环境都相互隔离
推荐阅读
- c# - 使用 MiniJSON C# Unity 进行漂亮的打印
- c# - Lambda 表达式无法识别鼠标右键
- javascript - 在 JavaScript 中访问 Chrome 选项(可选:来自 Galen 测试)
- r - 使用正则表达式提取字符串中的数字
- swift - stride(from: 0.0, to: 10.0, by: 2.0) 使用 Float 类型而不是 Double?
- java - Java:使用非标准比较器对 int[] 进行 Arrays.parallelSort
- java - 为什么 javax.websocket 不能解决?
- javascript - 测试运行卡在进度 CodeceptJS + Puppeteer
- laravel - 不想在每次计算时都写查询,我该如何使用变量?
- python - 在 csv 文件中追加数据问题