我有一个使用kustomize的简单项目,如下所示:
base/
namespace.yaml
kustomization.yaml
service.yaml使用kustomization.yaml的是:
resources:
- namespace.yaml
- service.yaml
namespace: my_wanted_namespacenamespace.yaml是:
apiVersion: v1
kind: Namespace
metadata:
name: default问题是当我这样做的时候:kustomize build ./base
我有这样的想法:
apiVersion: v1
kind: Namespace
metadata:
name: default我怎么能有
apiVersion: v1
kind: Namespace
metadata:
name: my_wanted_namespace谢谢。
发布于 2019-08-25 01:36:46
如果要使用kustomize创建名称空间,kustomize文件应如下所示。它必须使用命名空间。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-wanted-namespace
resources:
- ./namespace.yml您的命名空间文件应该是一个普通的命名空间部署,如下所示:
apiVersion: v1
kind: Namespace
metadata:
name: my-wanted-namespace发布于 2020-12-05 03:31:57
您可以从base中删除命名空间资源,并仅将其包含在覆盖中。例如:
overlay/kustomization.yaml
namespace: my_wanted_namespace
bases:
- ../base
resources:
- namespace.yamloverlay/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: my_wanted_namespacekustomization.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密钥完全匹配。
发布于 2020-08-27 19:40:46
为了能够动态创建名称空间并将其用于Kustomize将定制的其他资源,您可以使用此技巧:
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 ./运行此脚本将输出:
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),这个定制的名称空间可以用于其他资源。
https://stackoverflow.com/questions/57594001
复制相似问题