如何使用 Kubectl 执行变量替换?

How Can You Perform Variable Substitution using Kubectl?

我正在尝试创建 RoleRoleBinding 以便我可以使用 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 参数,但我看不到关于它如何使用的太多信息。

您可以按照以下方式进行。

  1. 像这样写 Role 文件:

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: tiller-manager-${NAMESPACE}
      namespace: ${NAMESPACE}
    rules:
    - apiGroups: ["", "batch", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    
  2. NAMESPACE 环境变量设置为您想要的值。

  3. 然后使用以下命令创建角色

    envsubst < role.yaml | kubectl apply -f -
    

您可以使用的另一种方式。使用 sed 命令可以直接替换 {{namespace}}。无需设置任何环境变量或使用 envsubst.

  1. 首先将您的角色保存在一个文件中,例如 role.yaml,其中包含原始内容。
  2. 然后使用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