部署独立的ETCD
部署一个独立的ETCD服务,为多个K8s集群提供存储服务。
生成TLS需要的证书
为了更好的配置TLS访问,这里手工创建CA证书。
生成ca证书,在pki目录内
1
2
3$ cd pki
$ openssl genrsa -out ca.key 2048
$ openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/CN=root-ca"etcd的request配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16$ cat << EOF > etcd-req.cnf
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.sslip.io
IP.1 = 127.0.0.1
EOF生成etcd证书
1
2
3
4
5$ openssl genrsa -out etcd.key 2048
$ openssl req -new -sha256 -key etcd.key -out etcd.csr -subj "/CN=etcd-ca" -config etcd-req.cnf
$ openssl x509 -req -sha256 -in etcd.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out etcd.crt -days 3650 -extensions v3_req -extfile etcd-req.cnf
Certificate request self-signature ok
subject=CN=etcd-ca通过docker镜像启动etcd服务
1
2
3
4
5
6
7
8
9
10
11$ docker run -d --name etcd \
--publish 2379:2379 \
--publish 2380:2380 \
--volume $PWD/pki:/etc/etcd/ssl:Z \
--volume $PWD/etcd:/var/lib/etcd:Z \
--env ETCD_TRUSTED_CA_FILE=/etc/etcd/ssl/ca.crt \
--env ETCD_KEY_FILE=/etc/etcd/ssl/etcd.key \
--env ETCD_CERT_FILE=/etc/etcd/ssl/etcd.crt \
--env ETCD_LISTEN_CLIENT_URLS="https://0.0.0.0:2379" \
--env ETCD_ADVERTISE_CLIENT_URLS="https://0.0.0.0:2380" \
quay.io/coreos/etcd:v3.5.16访问etcd
1
2
3
4
5
6$ etcdctl --cacert pki/ca.crt --cert pki/etcd.crt --key pki/etcd.key member list -w table
+------------------+---------+---------+-----------------------+-----------------------+
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |
+------------------+---------+---------+-----------------------+-----------------------+
| 8e9e05c52164694d | started | default | http://localhost:2380 | http://127.0.0.1:2379 |
+------------------+---------+---------+-----------------------+-----------------------+
可以配置alias简化命令行操作
1 | $ alias et='etcdctl --cacert pki/ca.crt --cert pki/etcd.crt --key pki/etcd.key' |
- 导出etcd存储的原始数据(调试用)
1
2$ etcd-dump-db iterate-bucket etcd/default.etcd cluster
key="clusterVersion", value="3.5.0"
工具etcd-dump-db
需要自己下载代码编译,源码在etcd项目的tools目录下。
kind部署Kubernetes集群使用外部ETCD
通过kind部署K8s集群,配置使用外部的ETCD。
Kubernetes数据存储配置namespace
为每个K8s集群在ETCD内的数据增加namespace前缀(相当于集群名称),用以隔离不同集群的数据。