如何在使用kubeadm创建的Kubernetes集群上备份etcd-RPC错误:代码= 13

时间:2018-07-16 22:26:55

标签: kubernetes etcd kubeadm

我有一个用kubeadm创建的K8s集群,它由一个主节点和两个工作器组成。

我正在关注有关etcd备份的本文档文章:https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster

我必须使用etcdctl来备份etcd数据库,所以我进入在主节点上运行的etcd pod中,从那里进行操作:kubectl exec -it -n kube-system etcd-ip-x-x-x-x sh

注意:主节点在此路径/var/lib/etcd中托管etcd数据库,该路径作为/var/lib/etcd中的VolumeMount安装在Pod上。

按照我运行的文档操作:ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 snapshot save snapshotdb,它返回以下错误:

Error:  rpc error: code = 13 desc = transport: write tcp 127.0.0.1:44464->127.0.0.1:2379: write: connection reset by peer

这是什么问题?

2 个答案:

答案 0 :(得分:1)

我设法使其能够将证书信息添加到命令中:

ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key /etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save ./snapshot.db

答案 1 :(得分:0)

您还可以在运行Etcd的节点上的以下行中检查Etcd配置文件。

/etc/kubernetes/manifests/etcd.yaml

在Etcd配置的命令部分中获取命令后,

template <class Container>
Container front_back_pairing(Container&& c)
{
    Container res;
    res.reserve(c.size());
    auto it = std::make_move_iterator(c.begin());
    auto rit = std::make_move_iterator(c.rbegin());

    if (c.size() % 2 == 1) {
        while (it.base() != std::prev(rit.base().base())) {
            res.push_back(*it);
            res.push_back(*rit);
            ++it;
            ++rit;
        }
        res.push_back(*it);
    } else {
        while (it.base() != rit.base().base()) {
            res.push_back(*it);
            res.push_back(*rit);
            ++it;
            ++rit;
        }
    }
    return res;
}

您可以像以下命令一样运行Etcd命令。

ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key /etc/kubernetes/pki/etcd/healthcheck-client.key