CoreOS - 如何使用新令牌?

CoreOS - How to use a new token?

我们有以下问题。在我们的集群中,url 发生了变化。一旦我们更改配置以反映这些更改,urls 就不会在 'discovery.etcd.io' 上更新。所以我们的想法是只使用一个新的令牌。然而,这是行不通的。集群未在 'discovery.etcd.io' 上使用新令牌注册。我们不想每次更改 url 或令牌时都重新安装。有没有更好的办法?重新安装没有问题。

#cloud-config
hostname: server1
coreos:
  etcd2:
    # generate a new token for each unique cluster from https://discovery.etcd.io/new?size=3
    discovery: https://discovery.etcd.io/<our token>
    # multi-region and multi-cloud deployments need to use $public_ipv4
    advertise-client-urls: server1:2379
    initial-advertise-peer-urls: server1:2380
    # listen on the official ports
    listen-client-urls: server1:2379
    listen-peer-urls: server1:2380
  #fleet:
  #    public-ip: server1
  #    metadata: region=eu-central-1
  #update:
  #  reboot-strategy: etcd-lock
  units:
    - name: etcd2.service
      command: start
   # - name: fleet.service
   #   command: start
ssh_authorized_keys:
   <our ssh keys>

discovery.etcd.io 仅用于 bootstrapping:例如,您使用 https://discovery.etcd.io/new?size=3 请求多个主机的令牌,并且您基本上将 URL 保留给 bootstrap 你的 3 个主机。

一旦集群被 bootstrapped,集群中的节点现在使用它们自己的本地存储:您的 3 个节点通过发现端点相互了解,现在形成一个具有该信息的集群,因此他们不再需要发现端点。

因此,如果您使用 'new' 令牌,您的集群实际上不会使用它,因为它已经 bootstrapped,因为节点已经形成了自己的集群。 要bootstrap一个新的集群,您需要删除每个节点上的本地数据。

如果您有其他数据需要迁移到新集群,我建议您阅读迁移文档。

基本备份过程如下:

etcdctl backup \
      --data-dir /var/lib/etcd \
      --backup-dir /tmp/etcd_backup

无需重复安装。下面的流程有助于集群一步步的上起来,而不是有一个巨大的 cloud-configure 文件难以调试。

  1. 停止 etcd 和所有依赖的服务(如依赖 etcd2 的 flannel、fleet 等):systemctl stop etcd2

  2. 从/var/lib/etcd2/*(或ETCD_DATA_DIR中的路径)删除etcd数据文件

  3. 更改存储在云配置文件中的发现令牌:/var/lib/coreos-install/user_data

  4. 重启。