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

时间:2018-11-13 16:49:53

标签: kubernetes kubectl

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

3 个答案:

答案 0 :(得分:2)

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

  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 -
    

答案 1 :(得分:1)

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

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