kubernetes 使用Kustomize创建带有后缀的其他名称空间

xriantvc  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(1)|浏览(224)

只是目前正在与kustomize的问题斗争,没有太多的期待。
我有我的配置设置,并使用kustomize(v4.5.7)有单独的基础,变体和环境配置。我试图使用设置部署我的开发环境的副本到同一个集群使用不同的命名空间和后缀。
其思想是,所有内容都将使用名称的后缀进行部署(并使此工作正常进行,但它只处理名称,而不处理名称空间),并将它们放入带有后缀的单独名称空间中。
我目前正在使用以下配置定义所有命名空间:

apiVersion: v1
kind: Namespace
metadata:
  name: mynamespace

现在,我希望能够部署名为mynamespace-mysuffix的NS拷贝
我已经设法为对象名称实现了一个后缀,并使用了一个PrefixSuffixTransformer,以便将创建的对象中的名称空间更新为mynamespace-mysuffix
不幸的是,这并没有更新名称空间的配置,而是保持不变。简而言之,它试图将对象部署到不存在的名称空间中。
这是修改在各种对象中设置的命名空间的工作PrefixSuffixTransformer

apiVersion: builtin
kind: PrefixSuffixTransformer
metadata:
  name: customSuffixer
suffix: "-mysuffix"
fieldSpecs:
  - path: metadata/name
  - path: metadata/namespace

尝试使用以下附加PrefixSuffixTransformer定位命名空间对象失败

apiVersion: builtin
kind: PrefixSuffixTransformer
metadata:
  name: nsSuffixer
suffix: "-mysuffix"
fieldSpecs:
- kind: Namespace 
  path: metadata/name

我希望最后这部分能起作用,但没有成功。有人对我如何用后缀创建额外的命名空间有什么建议吗?

hl0ma9xz

hl0ma9xz1#

如果我没有理解错您的问题,那么解决方案就是在变量中的kustomization.yaml文件中添加一个namespace:声明。
例如,如果我有一个base目录,其中包含:

  1. namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: example
spec: {}
  1. service.yaml
apiVersion: v1
kind: Service
metadata:
  name: example
spec:
  ports:
  - name: http
    port: 80
    targetPort: http
  1. kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: example

resources:
  - namespace.yaml
  - service.yaml

我在overlays/example中创建了一个变量,它是kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: example-mysuffix
resources:
- ../../base

nameSuffix: -mysuffix

则运行kustomize build overlays/example会得到:

apiVersion: v1
kind: Namespace
metadata:
  name: example
spec: {}
---
apiVersion: v1
kind: Service
metadata:
  name: example-mysuffix
  namespace: example
spec:
  ports:
  - name: http
    port: 80
    targetPort: http

正如您在问题中所描述的,Namespace资源没有被nameSuffix配置重命名。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: example-mysuffix
resources:
- ../../base

nameSuffix: -mysuffix

然后,我得到了所需的输出:

apiVersion: v1
kind: Namespace
metadata:
  name: example-mysuffix
spec: {}
---
apiVersion: v1
kind: Service
metadata:
  name: example-mysuffix
  namespace: example-mysuffix
spec:
  ports:
  - name: http
    port: 80
    targetPort: http

相关问题