Как вы можете выполнить подстановку переменных с помощью Kubectl? - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь создать 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 , но я не вижу много информации о том, как его можно использовать.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Другой способ, которым вы можете использовать. С помощью команды 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

0 голосов
/ 13 ноября 2018

Вы можете сделать это следующим образом.

  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 -
    
...