Kubernetes命名空间中部署定义的唯一性

时间:2019-04-24 10:14:25

标签: kubernetes namespaces

我们有多个环境,例如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 env”中:

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

2 个答案:

答案 0 :(得分:2)

从部署定义中删除名称空间,并将其命名为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以获得更多选择和便利性

这样,您可以将相同的部署文件用于不同的环境。 每个环境都相互隔离

答案 1 :(得分:0)

您绝对可以在不同的名称空间中创建相同的部署。在不正确的环境/名称空间中更新部署时请小心。将名称空间用作shell提示的一部分可能会有用。