如何使用 Kubectl 执行变量替换?
How Can You Perform Variable Substitution using Kubectl?
我正在尝试创建 Role
和 RoleBinding
以便我可以使用 Helm。当我 运行 一个 apply
命令时,我想以某种方式使用变量替换来替换 {{namespace}}
。
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 参数,但我看不到关于它如何使用的太多信息。
您可以按照以下方式进行。
像这样写 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 -
您可以使用的另一种方式。使用 sed
命令可以直接替换 {{namespace}}
。无需设置任何环境变量或使用 envsubst
.
- 首先将您的角色保存在一个文件中,例如
role.yaml
,其中包含原始内容。
- 然后使用
sed 's/{{namespace}}/your-namespace-name/g' role.yaml
。在 stdout
中打印所需的文件。将 {{namespace}}
替换为 your-namespace-name
。
N.B:您也可以使用 sed 's/{{namespace}}/your-namespace-name/g' role.yaml > new-role.yaml
将其保存在文件中
可以这样做。
cat .env
IMAGE_SOURCE=hello
IMAGE_VERSION=2.3.4
来源.env; kustomize 构建开发 | envsubst
我正在尝试创建 Role
和 RoleBinding
以便我可以使用 Helm。当我 运行 一个 apply
命令时,我想以某种方式使用变量替换来替换 {{namespace}}
。
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 参数,但我看不到关于它如何使用的太多信息。
您可以按照以下方式进行。
像这样写
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 -
您可以使用的另一种方式。使用 sed
命令可以直接替换 {{namespace}}
。无需设置任何环境变量或使用 envsubst
.
- 首先将您的角色保存在一个文件中,例如
role.yaml
,其中包含原始内容。 - 然后使用
sed 's/{{namespace}}/your-namespace-name/g' role.yaml
。在stdout
中打印所需的文件。将{{namespace}}
替换为your-namespace-name
。
N.B:您也可以使用 sed 's/{{namespace}}/your-namespace-name/g' role.yaml > new-role.yaml
可以这样做。
cat .env
IMAGE_SOURCE=hello
IMAGE_VERSION=2.3.4
来源.env; kustomize 构建开发 | envsubst