Почему мне нужно поместить ETCDCTL_API=3 перед etcdctl для сохранения снимка etcdctl?

Я выполнил индивидуальную установку Kubernetes на хардвее и успешно установил ее в кластере с 2 узлами в Hyper V (1 мастер 1 рабочий), все работает, но есть одна вещь, которая заставляет меня почесать голову, и мне было интересно, может ли кто-нибудь дать мне понимание того, почему это происходит.

etcdctl --help

Дает мне версию справки etcd v2, а также следующее предупреждение.

ВНИМАНИЕ: переменная окружения ETCDCTL_API не установлена; по умолчанию используется etcdctl v2. Установите переменную среды ETCDCTL_API=3, чтобы использовать v3 API, или ETCDCTL_API=2, чтобы использовать v2 API.

Если я установлю переменную окружения и снова введу команду, она игнорируется:

ETCDCTL_API=3
etcdctl --help

Но если я сделаю

ETCDCTL_API=3 etcdctl --help

Затем он дает мне версию справки etcd v3, мне также нужно поместить ETCDCTL_API=3 перед снимком состояния etcdctl, чтобы он был распознан как допустимая команда.

ETCDCTL_API=3 etcdctl snapshot save ~/etcd.backup \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/etcd/ca.pem \
  --cert=/etc/etcd/kubernetes.pem \
  --key=/etc/etcd/kubernetes-key.pem

Почему это?

2 ответа

Решение

Ну, это оказалось недостатком знаний о Linux. Когда я следил за несколькими Kubernetes, как руководить, я все время использовал переменные Bash, но я не осознавал, что есть разница между обычными переменными и переменными среды.

Я делал:

ETCDCTL_API=3 
echo $ETCDCTL_API
3

И это выглядело правильно, но потом я вспомнил команду printenv и не увидел того, что ожидал, именно тогда я понял, что существует разница между переменными окружения и обычными переменными.

Мне пришлось добавить экспорт перед оператором переменной, чтобы сделать его переменной среды.

Что действительно круто, так это то, что после прочтения
https://github.com/etcd-io/etcd/blob/master/etcdctl/README.md

Я смог сделать вышеизложенное, стать хорошими короткими командами, подобными этой:

export ETCDCTL_API=3
export ETCDCTL_CACERT=/etc/etcd/ca.pem
export ETCDCTL_CERT=/etc/etcd/kubernetes.pem
export ETCDCTL_KEY=/etc/etcd/kubernetes-key.pem

etcdctl member list --endpoints=https://127.0.0.1:2379 

etcdctl snapshot save ~/etcd.backup

Начиная с etcd 3.4 он больше не нужен: https://github.com/etcd-io/etcd/pull/9784

Другие вопросы по тегам