首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用kustomize创建命名空间?

如何使用kustomize创建命名空间?
EN

Stack Overflow用户
提问于 2019-08-21 22:34:48
回答 4查看 10.8K关注 0票数 17

我有一个使用kustomize的简单项目,如下所示:

代码语言:javascript
复制
base/
  namespace.yaml
  kustomization.yaml
  service.yaml

使用kustomization.yaml的是:

代码语言:javascript
复制
resources:
  - namespace.yaml
  - service.yaml
namespace: my_wanted_namespace

namespace.yaml是:

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  name: default

问题是当我这样做的时候:kustomize build ./base

我有这样的想法:

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  name: default

我怎么能有

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  name: my_wanted_namespace

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2019-08-25 01:36:46

如果要使用kustomize创建名称空间,kustomize文件应如下所示。它必须使用命名空间。

代码语言:javascript
复制
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-wanted-namespace
resources:
- ./namespace.yml

您的命名空间文件应该是一个普通的命名空间部署,如下所示:

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  name: my-wanted-namespace
票数 12
EN

Stack Overflow用户

发布于 2020-12-05 03:31:57

您可以从base中删除命名空间资源,并仅将其包含在覆盖中。例如:

overlay/kustomization.yaml

代码语言:javascript
复制
namespace: my_wanted_namespace
bases:
- ../base
resources:
- namespace.yaml

overlay/namespace.yaml

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  name: my_wanted_namespace

kustomization.yaml文件中的namespace属性必须与namespace.yaml资源中的名称匹配,并且base/service.yaml 不能设置namespace属性,这一点很重要。

编辑:以下是原始回复

作为Hadrien答案的替代方案,JSON Patch也适用于我:

namespace: my-wanted Namespace patchesJSON6902:- target: version: v1种类:namespace name: base-namespace patch:|- - op: replace path: /metadata/name值:my-wanted namespace

此方法的关键是转换基本Namespace名称,使其与覆盖kustomization.yaml文件中的namespace密钥完全匹配。

票数 8
EN

Stack Overflow用户

发布于 2020-08-27 19:40:46

为了能够动态创建名称空间并将其用于Kustomize将定制的其他资源,您可以使用此技巧:

代码语言:javascript
复制
namespace=${1:-"my-namespace-meaning"}

rm -rf ./base
mkdir ./base

cat <<EOF > ./base/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: suffix
EOF

cat <<EOF > ./base/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: docker-registry
  labels:
    name: docker-registry
spec:
  ports:
    - port: 5001
      targetPort: 5000
  selector:
    name: docker-registry
  type: ClusterIP
EOF

cat <<EOF > ./base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: docker-registry
spec:
  replicas: 1
  selector:
    matchLabels:
      app: docker-registry
  template:
    metadata:
      labels:
        app: docker-registry
    spec:
      containers:
        - name: docker-registry
          image: registry
          ports:
            - containerPort: 5000
          resources:
            limits:
              memory: 200Mi
              cpu: 300m
            requests:
              memory: 100Mi
              cpu: 100m
EOF

cat <<EOF > ./kustomization.yaml
namePrefix: "${namespace}-"

namespace: "${namespace}-suffix"

resources:
- base/deployment.yaml
- base/namespace.yaml
- base/service.yaml
EOF

kubectl kustomize ./

运行此脚本将输出:

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace-meaning-suffix
---
apiVersion: v1
kind: Service
metadata:
  labels:
    name: docker-registry
  name: my-namespace-meaning-docker-registry
  namespace: my-namespace-meaning-suffix
spec:
  ports:
  - port: 5001
    targetPort: 5000
  selector:
    name: docker-registry
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-namespace-meaning-docker-registry
  namespace: my-namespace-meaning-suffix
spec:
  replicas: 1
  selector:
    matchLabels:
      app: docker-registry
  template:
    metadata:
      labels:
        app: docker-registry
    spec:
      containers:
      - image: registry
        name: docker-registry
        ports:
        - containerPort: 5000
        resources:
          limits:
            cpu: 300m
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 100Mi

其思想是首先使用namePrefix关键字(doc here),以便在定制后确定地定义名称空间的值。然后,由于namespace关键字(doc here),这个定制的名称空间可以用于其他资源。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57594001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档