在 kustomization.yaml 文件的 patchesJson6902 中使用变量
Use variable in a patchesJson6902 of a kustomization.yaml file
我想在 Namespace
资源中设置 name
字段,并用相同的值替换 Deployment
资源中的 namespace
字段,例如my-namespace
.
这里是kustomization.json
:
namespace: <NAMESPACE>
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
patchesJson6902:
- patch: |-
- op: replace
path: /metadata/name
value: <NAMESPACE>
target:
kind: Namespace
name: system
version: v1
resources:
- manager.yaml
和manager.yaml
:
apiVersion: v1
kind: Namespace
metadata:
labels:
control-plane: controller-manager
name: system
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: controller-manager
namespace: system
spec:
selector:
matchLabels:
control-plane: controller-manager
replicas: 1
template:
metadata:
labels:
control-plane: controller-manager
spec:
containers:
- command:
- /manager
args:
- --enable-leader-election
image: controller:latest
name: manager
我尝试使用 kustomize edit set namespace my-namespace && kustomize build
,但它只会更改 Deployment
对象中的 namespace
字段。
有没有办法在 'pure' kustomize
中不使用 sed
并且不必手动更改 kustomization.json
中的值来更改这两个字段?
有没有一种方法可以在不使用 sed
、'pure' kustomize
并且无需手动更改 kustomization.json
中的值的情况下更改这两个字段?
我设法通过以下配置实现了一些类似的效果:
kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace
resources:
- deployment.yaml
depyloment.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.2
name: nginx
ports:
- containerPort: 80
这是您使用的命令的输出:
➜ kustomize kustomize edit set namespace my-namespace7 && kustomize build .
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace7
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: my-namespace7
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.2
name: nginx
ports:
- containerPort: 80
这里发生的事情是,一旦您在 kustomization.yaml
中全局设置 namespace
,它就会将其应用于您的目标,在我看来,这看起来是实现您想要的目标的更简单方法。
如果没有 manager_patch.yaml
内容,我无法测试您的配置。如果您想继续前进,您将使用文件内容更新问题。
我想在 Namespace
资源中设置 name
字段,并用相同的值替换 Deployment
资源中的 namespace
字段,例如my-namespace
.
这里是kustomization.json
:
namespace: <NAMESPACE>
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
patchesJson6902:
- patch: |-
- op: replace
path: /metadata/name
value: <NAMESPACE>
target:
kind: Namespace
name: system
version: v1
resources:
- manager.yaml
和manager.yaml
:
apiVersion: v1
kind: Namespace
metadata:
labels:
control-plane: controller-manager
name: system
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: controller-manager
namespace: system
spec:
selector:
matchLabels:
control-plane: controller-manager
replicas: 1
template:
metadata:
labels:
control-plane: controller-manager
spec:
containers:
- command:
- /manager
args:
- --enable-leader-election
image: controller:latest
name: manager
我尝试使用 kustomize edit set namespace my-namespace && kustomize build
,但它只会更改 Deployment
对象中的 namespace
字段。
有没有办法在 'pure' kustomize
中不使用 sed
并且不必手动更改 kustomization.json
中的值来更改这两个字段?
有没有一种方法可以在不使用 sed
、'pure' kustomize
并且无需手动更改 kustomization.json
中的值的情况下更改这两个字段?
我设法通过以下配置实现了一些类似的效果:
kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace
resources:
- deployment.yaml
depyloment.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.2
name: nginx
ports:
- containerPort: 80
这是您使用的命令的输出:
➜ kustomize kustomize edit set namespace my-namespace7 && kustomize build .
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace7
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: my-namespace7
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.2
name: nginx
ports:
- containerPort: 80
这里发生的事情是,一旦您在 kustomization.yaml
中全局设置 namespace
,它就会将其应用于您的目标,在我看来,这看起来是实现您想要的目标的更简单方法。
如果没有 manager_patch.yaml
内容,我无法测试您的配置。如果您想继续前进,您将使用文件内容更新问题。