kubernetes - 为什么我需要将 ETCDCTL_API=3 放在 etcdctl 前面才能使 etcdctl 快照保存工作?

标签 kubernetes environment-variables etcd etcd3

我硬着头皮做了一个定制的 Kubernetes 安装,并成功地将它安装在 Hyper V 的 2 节点集群上(1 个主 1 个 worker ),一切正常,但是这件事让我摸不着头脑,我想知道是否有人可以给我关于它为什么发生的洞察力。

etcdctl --help

给了我 etcd v2 版本的帮助,它还给了我以下警告。

WARNING: Environment variable ETCDCTL_API is not set; defaults to etcdctl v2. Set environment variable ETCDCTL_API=3 to use v3 API or ETCDCTL_API=2 to use v2 API.



如果我设置环境变量并再次运行命令,它会被忽略:
ETCDCTL_API=3
etcdctl --help

但如果我这样做
ETCDCTL_API=3 etcdctl --help

然后它给了我 etcd v3 版本的帮助,我还需要将 ETCDCTL_API=3 放在 etcdctl snapshot save 前面,以便将其识别为有效命令。
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

为什么是这样?

最佳答案

好吧,结果证明是缺乏 Linux 知识。
当我在关注一些 Kubernetes 如何指南时,我一直使用 Bash 变量,但我没有意识到普通变量和环境变量之间存在差异。

我在做:

ETCDCTL_API=3 
echo $ETCDCTL_API
3

看起来是正确的,但后来我想起了printenv命令,但我没有看到我所期望的,那时我发现环境变量和常规变量之间存在差异。

我不得不在变量语句前添加 export ,使其成为环境变量。

真正酷的是,读完这篇文章后
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

关于kubernetes - 为什么我需要将 ETCDCTL_API=3 放在 etcdctl 前面才能使 etcdctl 快照保存工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52695573/

相关文章:

kubernetes - 由于工作流文件中的 'when' 表达式无效,无法执行 argo 工作流

kubernetes - 我是否可以获得一个日志,显示命中 Kubernetes 集群中 NodePort 的请求的源 IP?

docker - 如何在不提交给 git 的情况下在 circleci 中传递环境变量

firebase - vue App环境变量在开发模式下可以读取,生产模式下不能读取

go - 尝试创建新的 etcdv3 客户端时获取 "rpc error: code = Unavailable desc = error reading from server: EOF"

kubernetes - 在 Kubernetes 集群中,有没有办法将 etcd 从外部迁移到内部?

c# - 将 Visual Studio 调试器与在 Kubernetes 中运行的 ASP.NET Core Web 应用程序一起使用?

kubernetes - 如何从 Terraform 中的不同目录访问文件和变量?

c++ - 使用 C++ 功能在系统路径中进行模式匹配

etcd - 设置 etcd 集群时最多可以使用多少个节点