美文网首页
操作 Kubernetes 中的 etcd 集群

操作 Kubernetes 中的 etcd 集群

作者: 87d6dc4b11a7 | 来源:发表于2024-08-15 14:23 被阅读0次

    etcd 是 一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。

    • etcd 是一个基于主节点(Leader-Based)的分布式系统。确保主节点定期向所有从节点发送心跳,以保持集群稳定。
    • 运行的 etcd 集群成员个数应为奇数。
    • 确保不发生资源不足。

    集群的性能和稳定性对网络和磁盘 I/O 非常敏感。任何资源匮乏都会导致心跳超时, 从而导致集群的不稳定。不稳定的情况表明没有选出任何主节点。 在这种情况下,集群不能对其当前状态进行任何更改,这意味着不能调度新的 Pod。
    https://etcd.io/docs/v3.6/op-guide/hardware/#example-hardware-configurations

    • 使用堆叠(stacked)控制平面节点,其中 etcd 节点与控制平面节点共存
    • 使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行

    默认情况下,kubeadm 在每个控制平面节点上运行一个本地 etcd 实例。也可以使用外部的 etcd 集群,并在不同的主机上提供 etcd 实例。

    etcdctl 和 etcdutl

    etcdctletcdutl 是用于与 etcd 集群交互的命令行工具,但它们有不同的用途:

    • etcdctl:这是通过网络与 etcd 交互的主要命令行客户端。 它用于日常操作,比如管理键值对、管理集群、检查健康状态等。
    • etcdutl:这是一个被设计用来直接操作 etcd 数据文件的管理工具, 包括跨 etcd 版本迁移数据、数据库碎片整理、恢复快照和验证数据一致性等操作。 对于网络操作,你应使用 etcdctl

    启动 etcd 集群

    单节点 etcd 集群

    只为测试目的使用单节点 etcd 集群。
    1、运行以下命令:

    etcd --listen-client-urls=http://$PRIVATE_IP:2379 \
       --advertise-client-urls=http://$PRIVATE_IP:2379
    

    2、使用参数 --etcd-servers=$PRIVATE_IP:2379 启动 Kubernetes API 服务器。

    # /etc/kubernetes/manifests/kube-apiserver.yaml
    
    spec:
      containers:
      - command:
        - kube-apiserver
        - --etcd-cafile=/etc/ssl/etcd/ssl/ca.pem
        - --etcd-certfile=/etc/ssl/etcd/ssl/node-shawn-virtual-machine.pem
        - --etcd-keyfile=/etc/ssl/etcd/ssl/node-shawn-virtual-machine-key.pem
        - --etcd-servers=https://192.168.17.18:2379
    

    多节点 etcd 集群

    出于耐用性和高可用性考量,在生产环境中应以多节点集群的方式运行 etcd,并且定期备份。 建议在生产环境中使用五个成员的集群。
    考虑运行以下客户端 URL 的五个成员的 etcd 集群:http://$IP1:2379http://$IP2:2379http://$IP3:2379http://$IP4:2379http://$IP5:2379。 要启动 Kubernetes API 服务器:
    1、运行以下命令:

    etcd --listen-client-urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$IP5:2379 --advertise-client-urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$IP5:2379
    

    2、使用参数 --etcd-servers=$IP1:2379,$IP2:2379,$IP3:2379,$IP4:2379,$IP5:2379 启动 Kubernetes API 服务器。

    加固 etcd 集群

    通过生成密钥和证书对来建立安全的通信通道。 例如,使用密钥对 peer.keypeer.cert 来保护 etcd 成员之间的通信, 而 client.keyclient.cert 用于保护 etcd 与其客户端之间的通信。

    安全通信

    要使用安全客户端通信对 etcd 进行配置,请指定参数 --key-file=k8sclient.key--cert-file=k8sclient.cert,并使用 HTTPS 作为 URL 模式。 使用安全通信的客户端命令的示例:

    ETCDCTL_API=3 etcdctl --endpoints 192.168.17.18:2379 \
      --cert=/etc/ssl/etcd/ssl/node-shawn-virtual-machine.pem \
      --key=/etc/ssl/etcd/ssl/node-shawn-virtual-machine-key.pem \
      --cacert=/etc/ssl/etcd/ssl/ca.pem \
      member list
    
    image.png

    替换失败的 etcd 成员

    etcd 集群通过容忍少数成员故障实现高可用性。 但是,要改善集群的整体健康状况,请立即替换失败的成员。当多个成员失败时,逐个替换它们。 替换失败成员需要两个步骤:删除失败成员和添加新成员。

    备份 etcd 集群

    所有 Kubernetes 对象都存储在 etcd 中。
    备份 etcd 集群可以通过两种方式完成:etcd 内置快照和卷快照。

    内置快照

    ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
      --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> \
      snapshot save <backup-file-location>
    
    ETCDCTL_API=3 etcdctl --endpoints 192.168.17.18:2379 \
      --cert=/etc/ssl/etcd/ssl/node-shawn-virtual-machine.pem \
      --key=/etc/ssl/etcd/ssl/node-shawn-virtual-machine-key.pem \
      --cacert=/etc/ssl/etcd/ssl/ca.pem \
      snapshot save /root/tmp/snapshot.db
    

    使用 etcdutl 工具来验证快照:

    etcdutl --write-out=table snapshot status snapshot.db
    

    此命令应该生成类似于下例的输出:

    +----------+----------+------------+------------+
    |   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
    +----------+----------+------------+------------+
    | c5a93cce |    12534 |        978 |     3.8 MB |
    +----------+----------+------------+------------+
    

    卷快照

    定期备份 etcdkubeadm 配置的 etcd 数据目录位于控制平面节点上的 /var/lib/etcd 中。

    恢复 etcd 集群

    在使用 etcdutl 恢复集群时,使用 --data-dir 选项来指定集群应被恢复到哪个文件夹。

    etcdutl --data-dir <data-dir-location> snapshot restore snapshot.db
    

    如果 <data-dir-location> 与之前的文件夹相同,请先删除此文件夹并停止 etcd 进程,再恢复集群。 否则,需要在恢复后更改 etcd 配置并重新启动 etcd 进程才能使用新的数据目录。

    https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/configure-upgrade-etcd/

    相关文章

      网友评论

          本文标题:操作 Kubernetes 中的 etcd 集群

          本文链接:https://www.haomeiwen.com/subject/kzdekjtx.html