[root@localhost etcd-cluster]# docker-compose up
Pulling etcd1 (quay.io/coreos/etcd:v3.5.1)...
Trying to pull repository quay.io/coreos/etcd ...
v3.5.1: Pulling from quay.io/coreos/etcd
df5590a8898b: Pulling fs layer
f646a1c1cb2a: Pulling fs layer
fe57bddd5a61: Pulling fs layer
d0f8eecc59f4: Waiting
50bb9dea0acd: Waiting
61c134d36f2f: Waiting
d32dce439c69: Waiting
ERROR: error pulling image configuration: Get https://cdn03.quay.io/sha256/ba/ba71c233964f3c4b2783515c7cf9a3b12608534b60eaf12634a5fe5eeaac5503?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAI5LUAQGPZRPNKSJA%2F20230209%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230209T081151Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Signature=07eb57f59d5c2c680df22ef13b3d16814f964524bc81e5e73d37f6feedf00305&cf_sign=QXDrIP06zVQOIMXPuoZp4Iqk1GEpd8Bt212GfUNgq4oy%2BcpyXKZW%2BQaxJ4L3Oe9ZpzZPZzoMkZEur4mqb4jachS2G1LgFYVykAjL3xu2tEgFp0kc1AElrXucWVCV%2FRVShsRx2PaV2PXWD3E7ynFmXgbKaozfvAzJuGWe%2FJDkJmBxiSAMWyDCCtrmvmvr59Vc91NVHB%2FGTMAhBrqeb8jPufaUgpQzoGC093e6MIgdRDYgb5cYcMxPW5IBUnGbKfnHXR9qomrdu2r6HkKZRpzadyNq3lrwH8ef5Ay%2FnLCgrfYYyrQPgEEz%2B1s4MlqE%2BL3U%2FEDVjl8ZyRhdEvT4JcM8pQ%3D%3D&cf_expiry=1675930911®ion=us-east-1: x509: certificate has expired or is not yet valid
以上是在使用docker-compose.yaml来创建etcd集群时失败的提示。
搜索了一下,都说是日期问题(一般是WINDOWS平台),修改了日期或时区没有作用
最终解决方法:
上这个页面[Docker] Etcd Cluster - piaohua's blog,重新弄了个docker-compose.yaml
执行docker-compose up ,就没问题了。
version: '2'
services:
etcd1:
image: bitnami/etcd:latest
environment:
- ALLOW_NONE_AUTHENTICATION=yes
- ETCD_NAME=etcd1
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_STATE=new
etcd2:
image: bitnami/etcd:latest
environment:
- ALLOW_NONE_AUTHENTICATION=yes
- ETCD_NAME=etcd2
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_STATE=new
etcd3:
image: bitnami/etcd:latest
environment:
- ALLOW_NONE_AUTHENTICATION=yes
- ETCD_NAME=etcd3
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_STATE=new
附本机使用goreman etcd3.5.1创建的ETCD集群状态查询
etcdctl -w table --endpoints=http://127.0.0.1:12379 member list
(上面命令最后一列是IS LEARNER,而不是LEADER,这让人一直误以为ETCD集群启动后没有leader, 实际使用put/get操作检测一下也能判断,如果能记录说明有leader存在,否则会提示集群中没有leader无法写入)
(查询LEADER需要如下命令)
etcdctl -w table --endpoints=http://127.0.0.1:12379 endpoint status
etcdctl -w table --endpoints=http://127.0.0.1:22379 endpoint status
etcdctl -w table --endpoints=http://127.0.0.1:32379 endpoint status
[root@localhost ]# etcdctl -w table --endpoints=localhost:12379,localhost:22379,localhost:32379 endpoint status
+-----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| localhost:12379 | 8211f1d0f64f3269 | 3.5.1 | 25 kB | false | false | 7 | 30 | 30 | |
| localhost:22379 | 91bc3c398fb3c146 | 3.5.1 | 25 kB | true | false | 7 | 30 | 30 | |
| localhost:32379 | fd422379fda50e48 | 3.5.1 | 25 kB | false | false | 7 | 30 | 30 | |
+-----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
[root@localhost ]# etcdctl -w table --endpoints=localhost:12379,localhost:22379,localhost:32379 endpoint health
+-----------------+--------+------------+-------+
| ENDPOINT | HEALTH | TOOK | ERROR |
+-----------------+--------+------------+-------+
| localhost:22379 | true | 2.846779ms | |
| localhost:12379 | true | 2.916372ms | |
| localhost:32379 | true | 2.923046ms | |
+-----------------+--------+------------+-------+