我正在尝试创建Role
和RoleBinding
,以便可以使用Helm。我想在运行{{namespace}}
命令时以某种方式使用变量替换将apply
替换为某些东西。
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: tiller-manager-{{namespace}}
namespace: {{namespace}}
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
我想通过命名空间传递这样的信息:
kubectl apply --file role.yaml --namespace foo
我已经看到kubectl apply
有一个--template参数,但是我看不到有关如何使用它的太多信息。
答案 0 :(得分:2)
您可以按照以下方式进行操作。
像这样写Role
文件:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: tiller-manager-${NAMESPACE}
namespace: ${NAMESPACE}
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
将NAMESPACE
环境变量设置为所需的值。
然后使用以下命令创建角色
envsubst < role.yaml | kubectl apply -f -
答案 1 :(得分:1)
另一种使用方式。使用sed
命令,您可以直接替换{{namespace}}
。无需设置任何环境变量或使用envsubst
。
role.yaml
中,该文件包含原始内容。sed 's/{{namespace}}/your-namespace-name/g' role.yaml
。将在stdout
中打印所需的文件。将{{namespace}}
替换为your-namespace-name
。 注意:您也可以使用sed 's/{{namespace}}/your-namespace-name/g' role.yaml > new-role.yaml
答案 2 :(得分:0)
可以这样做。
cat .env
IMAGE_SOURCE=hello
IMAGE_VERSION=2.3.4
source .env; kustomize build dev | envsubst