如何更改云配置以指定特定版本的 etcd

How to change the cloud-config to specify a specific version of etcd

我正在使用 core-os 并使用云配置文件对其进行配置。我需要为我的应用程序使用 etcd 服务。

这是云配置文件的相关部分。

- name: etcd.service
  command: start
  content: |
    [Unit]
    Description=etcd
    Requires=setup-network-environment.service
    After=setup-network-environment.service

    [Service]
    EnvironmentFile=/etc/network-environment
    User=etcd
    PermissionsStartOnly=true
    ExecStart=/usr/bin/etcd \
    --name ${DEFAULT_IPV4} \
    --addr ${DEFAULT_IPV4}:4001 \
    --bind-addr 0.0.0.0 \
    --discovery https://discovery.etcd.io/SOMEKEY \
    --data-dir /var/lib/etcd \
    --http-read-timeout 86400 \
    --peer-addr ${DEFAULT_IPV4}:7001 \
    --snapshot true
    Restart=always
    RestartSec=10s

我不知道如何更新etcd的版本。

我有一个模板生成器,我可以通过设置一个环境变量告诉它在 etcd 和 etcd2 之间切换。我做的一件事是使用 etcd2.service 名称或 etcd.service(我不只是将 etcd2 配置放在 etcd 单元部分)。这可行,但是,您可能会考虑将文件中的所有 etcd.service 引用更改为 etcd2.service。无论如何,这是 etcd2 的 ExecStart 部分:

    ExecStart=/usr/bin/etcd2 \
    --name ${d['etcd']['name']} \
    --advertise-client-urls ${d['etcd']['advertise-client-urls']} \
    --discovery ${d['etcd']['discovery']} \
    --data-dir /var/lib/etcd \
    --initial-advertise-peer-urls ${d['etcd']['initial-advertise-peer-urls']} \
    --listen-client-urls ${d['etcd']['listen-client-urls']} \
    --listen-peer-urls ${d['etcd']['listen-peer-urls']}

这是我的环境变量 d['etcd']:

"etcd": {
    "mver":"etcd2.service",
    "discovery":"http://discovery.etcd.io/SOMEKEY",
    "addr":"$private_ipv4:4001",
    "name":"$private_ipv4",
    "peer-addr":"$private_ipv4:7001",
    "advertise-client-urls":"http://$private_ipv4:2379",
    "initial-advertise-peer-urls":"http://$private_ipv4:2380",
    "listen-client-urls":"http://0.0.0.0:2379,http://0.0.0.0:4001",
    "listen-peer-urls":"http://$private_ipv4:2380,http://$private_ipv4:7001"
}

我记得在某处读到这些变量之一需要 $public_ipv4,我只是为所有这些变量使用了私有 ip。我这里的环境是数字海洋。请务必使用 coreos-alpha(至少我认为在撰写本文时仍然需要)。

原来 etcd2 已经安装在 coreos 上了。它目前与 etcd 一起发布在 coreos-alpha 653 版本中。 要在云配置中更改它,您只需更改

ExecStart=/usr/bin/etcd

ExecStart=/usr/bin/etcd2

并删除一些在 etcd2 中弃用的标志。

云配置解析器内置了对 etcd2 和新配置参数的支持:https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/#etcd2

一个例子:

#cloud-config

coreos:
  etcd2:
    # generate a new token for each unique cluster from https://discovery.etcd.io/new?size=3
    discovery: https://discovery.etcd.io/<token>
    # multi-region and multi-cloud deployments need to use $public_ipv4
    advertise-client-urls: http://$public_ipv4:2379
    initial-advertise-peer-urls: http://$private_ipv4:2380
    # listen on both the official ports and the legacy ports
    # legacy ports can be omitted if your application doesn't depend on them
    listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
    listen-peer-urls: http://$private_ipv4:2380,http://$private_ipv4:7001