Dan*_*ite 6 kubernetes kustomize
在以下场景中,我在 ../base/ 中定义了我的容器。
在这个 /dev/ 目录中,我想启动命名空间 dev 中的所有部署和状态集。
问题是我还想在 local-path-storage 命名空间中运行 local-path-storage CSI。kustomize 将覆盖它并在“dev”命名空间中创建它。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: dev
bases:
- ../base
resources:
- local-path-storage.yaml
Run Code Online (Sandbox Code Playgroud)
如何仅撤销 local-path-storage.yaml 的命名空间覆盖?
小智 14
从 kustomize 4.5.6 开始,可以通过添加命名空间转换器来实现。您想将该字段设置unsetOnly为true。
这是一个例子:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../base
resources:
- local-path-storage.yaml
transformers:
- |-
apiVersion: builtin
kind: NamespaceTransformer
metadata:
name: notImportantHere
namespace: dev
unsetOnly: true
Run Code Online (Sandbox Code Playgroud)
对于没有设置命名空间的所有资源,这应该将命名空间设置为 dev。
链接到namespaceTransformer规范:https://kubectl.docs.kubernetes.io/references/kustomize/builtins/#_namespacetransformer _
Kustomize 中尚不存在此功能。有一个未解决的问题解决的解决这个,但在撰写本文时还没有公开的 PR。
这里最快的解决方案是删除 中的namespace设置dev/kustomize.yaml并手动设置所有资源中的命名空间dev。
另一种选择,无耻地从我之前引用的问题中复制而来,是创建一个转换器来解决这个问题:
#!/usr/bin/env /usr/bin/python3
import sys
import yaml
with open(sys.argv[1], "r") as stream:
try:
data = yaml.safe_load(stream)
except yaml.YAMLError as exc:
print("Error parsing NamespaceTransformer input", file=sys.stderr)
# See kubectl api-resources --namespaced=false
blacklist = [
"ComponentStatus",
"Namespace",
"Node",
"PersistentVolume",
"MutatingWebhookConfiguration",
"ValidatingWebhookConfiguration",
"CustomResourceDefinition",
"APIService",
"MeshPolicy",
"TokenReview",
"SelfSubjectAccessReview",
"SelfSubjectRulesReview",
"SubjectAccessReview",
"CertificateSigningRequest",
"ClusterIssuer",
"BGPConfiguration",
"ClusterInformation",
"FelixConfiguration",
"GlobalBGPConfig",
"GlobalFelixConfig",
"GlobalNetworkPolicy",
"GlobalNetworkSet",
"HostEndpoint",
"IPPool",
"PodSecurityPolicy",
"NodeMetrics",
"PodSecurityPolicy",
"ClusterRoleBinding",
"ClusterRole",
"ClusterRbacConfig",
"PriorityClass",
"StorageClass",
"VolumeAttachment",
]
try:
for yaml_input in yaml.safe_load_all(sys.stdin):
if yaml_input['kind'] not in blacklist:
if "namespace" not in yaml_input["metadata"]:
yaml_input["metadata"]["namespace"] = data["namespace"]
print("---")
print(yaml.dump(yaml_input, default_flow_style=False))
except yaml.YAMLError as exc:
print("Error parsing YAML input\n\n%s\n\n" % input, file=sys.stderr)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是不可能的,kustomization 中的命名空间覆盖假设所有资源都应该属于同一个命名空间。
您的选择是:
kubectl apply -f .我通常为每组资源创建一个 kustomization,这些资源一起部署在一个命名空间中,以使 kustomization 简单且独立于任何其他资源。
| 归档时间: |
|
| 查看次数: |
3930 次 |
| 最近记录: |