• K8S安装过程六:etcd 集群安装


    1 ETCD 基本信息介绍

    1.1 ETCD 官方定义

    etcd is a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or cluster of machines. It gracefully handles leader elections during network partitions and can tolerate machine failure, even in the leader node.

    1.2 ETCD 集群部署形式

    • 静态发现。启动 etcd 服务的时候,通过参数 --initial-cluster 添加所有的 etcd 节点信息。
    • ETCD 动态发现。通过已经存在的 etcd 集群来管理当前需要部署的 etcd 集群。
    • DNS 动态发现。
      通常 ETCD 集群规模在3个节点或5个节点就能满足很多业务场景的需求。所以,采用静态发现的形式部署ETCD集群相对其他几种方式更容易实现。

    2. 安装准备

    2.1 机器信息

    节点名称节点IPOS版本ETCD版本
    node1192.168.0.233CentOS 7.9v3.5.4
    node2192.168.0.200CentOS 7.9v3.5.4
    node3192.168.0.145CentOS 7.9v3.5.4

    ETCD 集群采用一主多从的架构。ETCD 集群中任何一个节点都可能成为主节点,节点之间选举主节点采用 Raft 一致性算法。Raft 算法需要一半以上的节点同意才能成为主节点,当节点数量为偶数时,可能会出现两个节点获取同样的票数导致选举失败,所以,ETCD集群节点数量建议采用奇数个。

    2.2 环境准备

    在上述的三个节点上执行下边的两个过程,主要完成账号的创建与基础开发包的下载更新。

    2.2.1 添加用户组与用户

    • 使用 root 账户执行下边的操作
    groupadd kube
    useradd -d /home/kube -m kube -s /bin/bash -g kube
    
    • 1
    • 2

    2.2.2 安装基础开发工具

    yum groupinstall -y "Development Tools"
    
    • 1

    注意:需要在上述三个节点上执行安装准备过程,由于 root 用户的权限太大,所以,不建议使用 root 用户来部署 etcd 集群,后续将会使用 kube 用户部署 etcd。

    3. ETCD集群部署

    etcd 集群部署主要分为两种方式,一种是使用etcd开源的源代码编译部署,另一种是使用etcd预编译包安装部署。使用源代码部署需要搭建 golang 开发环境,并且可能涉及到国外的依赖代码库下载,如果网络条件不允许的情况下,不建议采用源代码部署。3.1.1 章节主要介绍源代码部署的方式,3.1.2 章节主要介绍预编译包部署方式。建议选择 3.1.2 章节介绍的部署方式。

    3.1 节点部署

    请在 etcd 服务器节点上执行下面的操作步骤,但注意配置信息中IP地址一定要与节点实际IP地址对应。

    3.1.1 etcd 源代码部署模式(不推荐)

    3.1.1.1 基本工具准备
    yum install git
    yum install golang
    
    • 1
    • 2
    • 安装 git 工具
    • 安装 golang SDK
    3.1.1.2 获取源代码并编译
    cd /opt
    su - kube
    git clone -b v3.5.4 https://github.com/etcd-io/etcd.git etcd-v3.5.4
    cd etcd-v3.5.4
    ./build.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 切换到 /opt 目录
    • 切换到 kube 用户,并刷新 kube 用户环境变量变量
    • 使用git工具下载etcd指定版本源代码
    • 进入源代码目录
    • 执行编译脚本。编译过程中涉及到依赖库的下载,所以网络带宽不够大的情况下,需要耗费一定的时间执行编译过程。

    3.1.2 etcd 预编译包安装 (推荐)

    cd /opt
    su - kube
    wget https://github.com/etcd-io/etcd/releases/download/v3.5.4/etcd-v3.5.4-linux-amd64.tar.gz
    tar -xvf etcd-v3.5.4-linux-amd64.tar.gz 
    mv etcd-v3.5.4-linux-amd64 etcd-v3.5.4
    rm -rf etcd-v3.5.4-linux-amd64.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 切换到 /opt 目录
    • 切换到 kube 用户,并刷新 kube 用户的环境变量
    • 下载 etcd 软件包
    • 解压软件包到目录 etcd-v3.5.4 目录
    • 删除etcd压缩包

    3.2 环境变量设置

    修改 kube 用户的环境变量配置文件。配置文件路径: /home/kube/…bash_profile

    ETCD_HOME=/opt/etcd-v3.5.4
    PATH=$PATH:$ETCD_HOME
    export PATH
    
    • 1
    • 2
    • 3

    3.3 修改 etcd 配置信息

    • 创建 etcd 数据存储目录
    mkdir /opt/etcd-v3.5.4/data
    
    • 1
    • 创建 etcd 配置文件
    cat >/opt/etcd-v3.5.4/etcd.conf <
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    上边的 ETCD_NAME 变量为节点的名称,不同的节点请给予不同的名称,且在 ETCD_INITIAL_CLUSTER节点中引用了所有节点的地址信息。两者要对应上。其次其中涉及到IP地址要根据实际节点的IP地址进行调整,如上边配置中的 192.168.0.233 要替换成实际节点的IP地址。

    • 在 /usr/lib/systemd/system/etcd.service 目录中创建 etcd.service 文件
    cat > /usr/lib/systemd/system/etcd.service <
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    3.4 etcd 服务启动

    • 创建 systemctl 服务
    systemctl enable etcd
    
    • 1
    • 启动 etcd 服务
    systemctl start etcd
    
    • 1

    启动第一个 etcd 节点的时候,命令行会卡住,这个属于正常情况,当启动第二个etcd 节点时,卡住的状态将会消失。也就是当集群内第一个 etcd 节点初次启动时,它会阻塞等待至少另一个节点加入集群。当两个节点都正常的加入集群后,阻塞状态将会消失,服务成功启动。

    • 查看服务状态
    systemctl status etcd
    
    • 1

    4. ETCD 验证

    等到所有节点完成 etcd 的安装后,就可以通过下面的方法检查集群内 ETCD 节点的健康状态。

    • 切换到 kube 用户
    su - kube
    
    • 1
    • 查看 etcd 集群成员
    ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/ssl/etcd.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem --endpoints="https://192.168.0.200:2379,https://192.168.0.145:2379,https://192.168.0.233:2379" endpoint status --write-out='table'
    
    • 1

    显示信息是:
    在这里插入图片描述

    5. 问题汇总

    • 集群无法启动, 由于某个节点数据出现故障,导致节点无法启动。etcdcel 与 kubectl 客户端工具无法使用,均出现请求 timeout 的情况
    解决办法:
    1。 删除该节点的数据
    $ rm /opt/etcd-v3.5.4/data
    
    2。 设置 ETCD_INITIAL_CLUSTER_STATE="existing"
    
    3。 重启节点
    $ systemctl restart etcd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Java异常该如何正确使用,避坑指南
    【书籍】计算机
    redisson分布式锁原理剖析
    LLaVA:visual instruction tuning
    深入学习Linux内核(二)体系结构简析
    高新技术企业认定的重要指标
    linux实现tcp工具
    React Native 的手势和触摸事件
    《互联网大厂晋升指南》读书笔记-下
    电路分析中的函数介绍
  • 原文地址:https://blog.csdn.net/hzwy23/article/details/128084797