# 创建etcd配置文件 create_etcd_config() { local config_file=$1 local node_name=$2 local data_dir=$3 local wal_dir=$4 local client_url=$5 local peer_url=$6 local cluster_token=$7 local cluster=$8 local new_opt=${9}
get_etcd_from_local() { local source_path=$1 local target_dir=$2
if [ ! -f "$source_path" ]; then echo"Source etcd binary does not exist at ${source_path}." exit 1 fi
echo"Copying etcd binary from ${source_path} to ${target_dir}..." ifcp"$source_path""${target_dir}/etcd"; then chmod +x "${target_dir}/etcd" echo"Successfully copied and prepared etcd binary." else echo"Failed to copy etcd binary from ${source_path}." exit 1 fi }
get_etcd_from_remote() { local bin_dir=$1 local ftpserver=$2 local http_user=$3 local http_passwd=$4
echo"Downloading etcd binary from ${ftpserver}..." if wget -P "$bin_dir" --http-user="$http_user" --http-passwd="$http_passwd""${ftpserver}/repo/kubernetes/etcd"; then chmod +x "${bin_dir}/etcd" echo"Successfully downloaded and prepared etcd binary." else echo"Failed to download etcd binary from ${ftpserver}." exit 1 fi }
get_etcd() { local option=$1 local target_dir=$2 local source_path_or_url=$3 local http_user=$4# 仅 remote 时需要 local http_passwd=$5# 仅 remote 时需要
# 主函数:安装etcd集群节点 install_etcd_cluster_node() { local node_name=$1 local node_ip=$2 local cluster_ips=$3 local new_opt=$4
local data_dir="/opt/k8s/data" local wal_dir="/opt/k8s/wal" local bin_dir="/opt/k8s/bin" local work_dir="/opt/k8s/work" local ftpserver="http://119.91.145.27:12800" local http_user="team" local http_passwd="xdmybl" local config_file="${work_dir}/etcd.conf" local service_file="/lib/systemd/system/etcd.service" local etcd_executable="${bin_dir}/etcd" local etcd_src_path="/opt/etcd" local cluster_gs="cluster_token1"
local client_url="http://${node_ip}:2379" local listen_peer_url="http://${node_ip}:2380"
sequenceDiagram
participant Manager as Manager
participant Node1 as node1
participant Node2 as node2
participant Node3 as node3
par 建立新集群
Manager->>Node1: new cluster: node1, node2, node3
Manager->>Node2: new cluster: node1, node2, node3
Manager->>Node3: new cluster: node1, node2, node3
and 相应节点响应
Node1-->>Manager: 响应
Node2-->>Manager: 响应
Node3-->>Manager: 响应
end
Note over Manager,Node3: etcd 初始集群建立完成
# member_add_by_etcdctl.sh # 新增集群 member_add_by_etcdctl() { local new_member_name=$1 local new_member_peer_url=$2 local existing_member_client_urls=$3
# 设置ETCDCTL_API版本,确保使用v3 API export ETCDCTL_API=3
# 添加新成员到集群 etcdctl --endpoints="${existing_member_client_urls}" \ member add "${new_member_name}" \ --peer-urls="${new_member_peer_url}"
# 检查命令执行的退出状态 if [ $? -eq 0 ]; then echo"Member ${new_member_name} successfully added to the cluster." else echo"Failed to add member ${new_member_name} to the cluster." exit 1 fi }
# 删除etcd二进制文件和数据目录 cleanup_etcd_files() { local bin_dir="/opt/k8s/bin" local data_dir="/opt/k8s/data" local wal_dir="/opt/k8s/wal" local work_dir="/opt/k8s/work"
echo"Cleaning up etcd binary and data directories..." rm -f "${bin_dir}/etcd" rm -rf "$data_dir" rm -rf "$wal_dir" rm -rf "$work_dir" }