概述
文章目录
- 1 ETCD 基本信息介绍
- 1.1 ETCD 官方定义
- 1.2 ETCD 集群部署形式
- 2. 安装准备
- 2.1 机器信息
- 2.2 环境准备
- 2.2.1 添加用户组与用户
- 2.2.2 安装基础开发工具
- 3. ETCD集群部署
- 3.1 节点部署
- 3.1.1 etcd 源代码部署模式(不推荐)
- 3.1.1.1 基本工具准备
- 3.1.1.2 获取源代码并编译
- 3.1.2 etcd 预编译包安装 (推荐)
- 3.2 环境变量设置
- 3.3 修改 etcd 配置信息
- 3.4 etcd 服务启动
- 4. ETCD 验证
- 5. 问题汇总
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 机器信息
节点名称 | 节点IP | OS版本 | ETCD版本 |
---|---|---|---|
node1 | 192.168.0.233 | CentOS 7.9 | v3.5.4 |
node2 | 192.168.0.200 | CentOS 7.9 | v3.5.4 |
node3 | 192.168.0.145 | CentOS 7.9 | v3.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
2.2.2 安装基础开发工具
yum groupinstall -y "Development Tools"
注意:需要在上述三个节点上执行安装准备过程,由于 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
- 安装 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
- 切换到 /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
- 切换到 /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
3.3 修改 etcd 配置信息
- 创建 etcd 数据存储目录
mkdir /opt/etcd-v3.5.4/data
- 创建 etcd 配置文件
cat >/opt/etcd-v3.5.4/etcd.conf <<EOF
#[Member]
ETCD_NAME="etcd1"
ETCD_DATA_DIR="/opt/etcd-v3.5.4/data"
ETCD_LISTEN_PEER_URLS="https://192.168.0.233:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.0.233:2379,https://127.0.0.1:2379"
ETCD_CERT_FILE=/etc/kubernetes/ssl/etcd.pem
ETCD_KEY_FILE=/etc/kubernetes/ssl/etcd-key.pem
ETCD_TRUSTED_CA_FILE=/etc/kubernetes/ssl/ca.pem
ETCD_CLIENT_CERT_AUTH=true
ETCD_PEER_CERT_FILE=/etc/kubernetes/ssl/etcd.pem
ETCD_PEER_KEY_FILE=/etc/kubernetes/ssl/etcd-key.pem
ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/ssl/ca.pem
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.0.233:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.0.233:2379"
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.0.233:2380,etcd2=https://192.168.0.200:2380,etcd3=https://192.168.0.145:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
上边的 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 <<EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos
[Service]
Type=notify
WorkingDirectory=/opt/etcd-v3.5.4/data
EnvironmentFile=/opt/etcd-v3.5.4/etcd.conf
ExecStart=/opt/etcd-v3.5.4/etcd \
--auto-compaction-mode=periodic \
--auto-compaction-retention=1 \
--max-request-bytes=33554432 \
--quota-backend-bytes=6442450944 \
--heartbeat-interval=250 \
--election-timeout=2000
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
3.4 etcd 服务启动
- 创建 systemctl 服务
systemctl enable etcd
- 启动 etcd 服务
systemctl start etcd
启动第一个 etcd 节点的时候,命令行会卡住,这个属于正常情况,当启动第二个etcd 节点时,卡住的状态将会消失。也就是当集群内第一个 etcd 节点初次启动时,它会阻塞等待至少另一个节点加入集群。当两个节点都正常的加入集群后,阻塞状态将会消失,服务成功启动。
- 查看服务状态
systemctl status etcd
4. ETCD 验证
等到所有节点完成 etcd 的安装后,就可以通过下面的方法检查集群内 ETCD 节点的健康状态。
- 切换到 kube 用户
su - kube
- 查看 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'
显示信息是:
5. 问题汇总
- 集群无法启动, 由于某个节点数据出现故障,导致节点无法启动。etcdcel 与 kubectl 客户端工具无法使用,均出现请求 timeout 的情况
解决办法:
1。 删除该节点的数据
$ rm /opt/etcd-v3.5.4/data
2。 设置 ETCD_INITIAL_CLUSTER_STATE="existing"
3。 重启节点
$ systemctl restart etcd
最后
以上就是阳光蜡烛为你收集整理的K8S安装过程六:etcd 集群安装1 ETCD 基本信息介绍2. 安装准备3. ETCD集群部署4. ETCD 验证5. 问题汇总的全部内容,希望文章能够帮你解决K8S安装过程六:etcd 集群安装1 ETCD 基本信息介绍2. 安装准备3. ETCD集群部署4. ETCD 验证5. 问题汇总所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复