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

你可以看看 库斯托米泽 了解更多选择和灵活性

这样,您可以对不同的环境使用相同的部署文件。 并且每个环境都与其他环境隔离

您绝对可以在不同的命名空间中创建相同的部署。在不正确的环境/命名空间中更新部署时要小心。使用命名空间作为 shell 提示符的一部分可能很有用。

最新更新