搭建单节点etcd的备份与恢复

1.创建密钥

步骤1:下载安装cfssl工具
下载地址:
https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

下载到/usr/local/bin/里,然后分别命名为cfssl 、cfssl-certinfo 、cfssljson。
[root@vms21 ca]# ls /usr/local/bin/
cfssl cfssl-certinfo cfssljson
[root@vms21 ca]#
给这些文件可执行权限:
[root@vms21 ~]# chmod +x /usr/local/bin/cfssl*
[root@vms21 ~]#

步骤2:编辑ca配置文件
在root家目录下创建一个目录ca并进入到此目录
[root@vms21 ~]# mkdir ca ; cd ca
[root@vms21 ~]#
生成CA配置文件
[root@vms21 ca]# cfssl print-defaults config > ca-config.json
修改成如下内容:
[root@vms21 ca]# cat ca-config.json

{
    "signing": {
        "default": {
            "expiry": "1680h"
        },
        "profiles": {
            "www": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            }
        }
    }
}

[root@vms21 ca]#
生成CA所需要的证书请求文件:
[root@vms21 ca]# cfssl print-defaults csr > ca-csr.json
改成如下内容:
[root@vms21 ca]# cat ca-csr.json

{
    "CN": "k8s",
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "CN",
            "ST": "Jiangsu",
            "L": "Xuzhou",
            "O": "Lduan",
            "OU": "cks"
        }
    ]
}

[root@vms21 ca]#
生成CA自签名的证书和私钥
[root@vms21 ca]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
[root@vms21 ca]# ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
[root@vms21 ca]#
这其中ca-key.pem是CA的私钥,ca.pem是CA的证书。

步骤3:生成用户所需要的证书请求文件
[root@vms21 ca]# cfssl print-defaults csr > admin-csr.json
[root@vms21 ca]#
修改成如下内容:
[root@vms21 ca]# cat admin-csr.json

{
  "CN": "k8s",
  "key": {
    "algo": "ecdsa",
    "size": 256
  },
  "hosts": [
     "localhost",
     "192.168.26.21",
     "192.168.26.22",
     "192.168.26.23"
  ],
  "names": [
    {
      "C": "CN",
      "ST": "Jiangsu",
      "L": "Xuzhou",
      "O": "Lduan",
      "OU": "cks"
    }
  ]
}

[root@vms21 ca]#
步骤4:生成由CA签发的私钥和证书
[root@vms21 ca]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www admin-csr.json | cfssljson -bare admin
[root@vms21 ca]#
步骤5:把所生成的证书、私钥及CA的证书拷贝到/ca2目录里
[root@vms21 ca]# mkdir /ca2
[root@vms21 ca]# cp admin-key.pem admin.pem ca.pem /ca2/
[root@vms21 ca]# cd
[root@vms21 ~]#

2.安装并配置etcd

步骤1:安装etcd
[root@vms21 ~]# yum install etcd -y
已加载插件:fastestmirror
...
[root@vms21 ~]#
步骤2:配置etcd
编辑/etc/etcd/etcd.conf,内容如下:
[root@vms21 ~]# cat /etc/etcd/etcd.conf

#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" 
ETCD_LISTEN_CLIENT_URLS="https://0.0.0.0:2379"
ETCD_NAME="default"
ETCD_TRUSTED_CA_FILE="/ca2/ca.pem"
ETCD_CERT_FILE="/ca2/admin.pem"
ETCD_KEY_FILE="/ca2/admin-key.pem"
ETCD_CLIENT_CERT_AUTH="true"
#[Clustering]
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.26.21:2379"

[root@vms21 ~]#
这里ETCD_LISTEN_CLIENT_URLS指的是,2379监听在哪张网卡上,写0.0.0.0的意思是在所有网卡上都开启2379端口。
ETCD_ADVERTISE_CLIENT_URLS指的是,用于通知集群中的节点,客户端可以通过什么地址能访问到“我”。

这里CLIENT_URLS是客户端访问etcd时的地址,端口为2379

步骤3:修改etcd的启动脚本
修改etcd的启动脚本 /usr/lib/systemd/system/etcd.service
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" --cert-file=\"${ETCD_CERT_FILE}\" --key-file=\"${ETCD_KEY_FILE}\" --trusted-ca-file=\"${ETCD_TRUSTED_CA_FILE}\" --client-cert-auth=false"
上述黑体字是新增的。
步骤4:启动etcd
[root@vms21 ~]# systemctl daemon-reload ; systemctl restart etcd
[root@vms21 ~]#
[root@vms21 ~]# export ETCDCTL_API=3
[root@vms21 ~]# etcdctl --endpoints=https://192.168.26.21:2379 --cacert=/ca2/ca.pem --cert=/ca2/admin.pem --key=/ca2/admin-key.pem member list
8e9e05c52164694d, started, default, http://localhost:2380, https://192.168.26.21:2379
[root@vms21 ~]#
因为这里没有对2380做设置,所以记过显示2380是通过http访问而不是https。

步骤5:为了使用的方便,这里做一个别名
[root@vms21 ~]# alias etcdctl="etcdctl --endpoints=https://192.168.26.21:2379 --cacert=/ca2/ca.pem --cert=/ca2/admin.pem --key=/ca2/admin-key.pem"

3.为etcd做快照

步骤1:随变写一个测试数据
[root@vms21 ~]# etcdctl put mykey myvalue
OK
[root@vms21 ~]# etcdctl get mykey
mykey
myvalue
[root@vms21 ~]#
步骤2:给etcd做快照,快照名为etcd.data,保存在当前目录里
[root@vms21 ~]# etcdctl snapshot save etcd.data
Snapshot saved at etcd.data
[root@vms21 ~]#
这样快照里是又mykey=myvalue数据的了。

步骤3:删除这个测试数据
[root@vms21 ~]# etcdctl del mykey
1
[root@vms21 ~]# etcdctl get mykey
[root@vms21 ~]#
现在etcd里是没有mykey=myvalue这个数据了,但是快照里有。所以下面开始练习还原数据。

4.还原etcd

步骤1:首先关闭etcd
[root@vms21 ~]# systemctl stop etcd
[root@vms21 ~]#
步骤2:删除存储目录
[root@vms21 ~]# rm -rf /var/lib/etcd/default.etcd
[root@vms21 ~]#
步骤3:恢复快照
[root@vms21 ~]# etcdctl snapshot restore etcd.data --initial-cluster="default=http://localhost:2380" --name="default" --data-dir=/var/lib/etcd/default.etcd
...输出...
[root@vms21 ~]#
注意,因为我们并没有对2380端口进行加密,所以这里--initial-cluster="default=http://localhost:2380"写的是http不是https

步骤4:测试数据是否被恢复
[root@vms21 ~]# etcdctl get mykey
mykey
myvalue
[root@vms21 ~]#
可以看到数据已经恢复出来了。

相关新闻

                                                                                                                                    RHCE9学习指南连载,点击阅读