Почему мне нужно поместить ETCDCTL_API = 3 перед etcdctl для сохранения снимка etcdctl? - PullRequest
0 голосов
/ 08 октября 2018

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

etcdctl --help

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

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

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

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

Почему это?

1 Ответ

0 голосов
/ 08 октября 2018

Ну, это оказалось недостатком знаний о 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
...