#bash #environment-variables #kubectl
#bash #переменные среды #kubectl
Вопрос:
Я использую env-vars, как $foo
в моих .yaml
файлах K8s:
> cat .env
NAMESPACE=fred
> cat my.yaml
apiVersion: v1
kind: Namespace
metadata:
name: $NAMESPACE
Я пропускаю их kubectl
таким образом:
function f() { ( set -a; source .env; cat $1 | envsubst | kubectl apply -f - ) }
f my.yaml
Это дает:
ошибка: вы должны войти в систему на сервере (сервер запросил у клиента учетные данные)
Однако,
> cat pure.yaml
apiVersion: v1
kind: Namespace
metadata:
name: fred
> kubectl apply -f pure.yaml
… завершается нормально!
Что может быть не так?
Комментарии:
1. Использование вашей функции (
set -a; source .env
) предполагает, что вы не запускаете это от своего обычного пользователя. Я прав? Если это так, вам может потребоваться указать, как / где находятся ваши учетные данные2. @NorbertvanNobelen Нет, я запускаю это от обычного пользователя. И он находит учетные данные, когда я запускаю его напрямую, без подстановок.
3. Хорошо, можете ли вы протестировать без функции
set -a; source .env;
in? Похоже, что он удалил часть настроек вашей среды, а не добавил к ней. Также добавьте a#!/bin/bash
в свой скрипт (если он еще не присутствует), чтобы сообщить оболочке, что вы хотите снова использовать bash4.
set -a; source .env;
это совершенно ясно и не должно быть проблемой здесь, он просто заботится о том, чтоNAMESPACE=fred
экспортируется, и похоже, что эта часть работает правильно. Как именно вы вызываете этот скрипт? Что произойдет, если вы вызоветеkubectl apply -f pure.yaml
, но также и из скрипта bash? Я думаю, проблема на самом деле не связана с заменой переменных здесь, поскольку, похоже, она работает хорошо. Это скорее вызовkubectl commands
из вашего скрипта.