ansible--etcd集群部署
手工部署服务:
手工安装
三台服务器均执行
##下载服务包:
wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz
## 解压文件
tar -zxvf etcd-v3.4.13-linux-amd64.tar.gz
## 创建run.sh
TOKEN=etcd_test
CLUSTER_STATE=new
DATA_DIR=/data/op/etcd-v3.4.13-linux-amd64/data_etcd
NAME_1=k8s-slave2 ##主机名1
NAME_2=k8s-slave1 ##主机名2
NAME_3=k8s-master ##主机名3
HOST_1=10.10.80.176 ##主机地址1
HOST_2=10.10.80.177 ##主机地址2
HOST_3=10.10.80.178 ##主机地址3
CLUSTER=${NAME_1}=http://${HOST_1}:2388,${NAME_2}=http://${HOST_2}:2388,${NAME_3}=http://${HOST_3}:2388
THIS_NAME=${NAME_1} ## 第几个主机名
THIS_IP=${HOST_1} ## 第几个主机地址
./etcd --data-dir=${DATA_DIR} --name ${THIS_NAME} \
--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
## 启动:
nohup sh ./run.sh > /dev/null 2>&1 &
ansible自动部署:
相关安装包下载链接:
链接:https://pan.baidu.com/s/1DYU-JBod0HAAX5foyFs48w
提取码:7571
## etcd-v3.4.13-linux-amd64.tar.gz
目录结构:
[root@localhost ansible]# tree etcd_install/
etcd_install/
├── conf
│ └── run.sh
├── etcd.yml
├── id_rsa
├── inv
├── README.TXT
└── run.sh
etcd.yml配置文件
- name: etcd集群安装
hosts: all
gather_facts: no
remote_user: sa
become_user: root
serial: 3
vars:
tasks:
- name: 下载安装包 {{ etcd_package }}
get_url:
url: '{{ http_url }}{{ etcd_package }}'
dest: '{{ download_dir }}'
mode: 0644
force: no
checksum: '{{ etcd_md5 }}'
become: yes
- name: 解压安装包 {{ etcd_package }} 到 {{ Unpack }}
unarchive:
src: '{{ download_dir }}{{ etcd_package }}'
dest: '{{ Unpack }}'
remote_src: yes
args:
creates: '{{ etcd_file }}'
become: yes
- name: 传输文件到 {{ addr_1 }}
template:
src: ./conf/run.sh
dest: '{{ pro_dir }}'
vars:
THIS_NAME: '${NAME_1}'
THIS_IP: '${HOST_1}'
when: inventory_hostname == (addr_1)
become: yes
- name: 传输文件到 {{ addr_2 }}
template:
src: ./conf/run.sh
dest: '{{ pro_dir }}'
vars:
THIS_NAME: '${NAME_2}'
THIS_IP: '${HOST_2}'
when: inventory_hostname == (addr_2)
become: yes
- name: 传输文件到 {{ addr_3 }}
template:
src: ./conf/run.sh
dest: '{{ pro_dir }}'
vars:
THIS_NAME: '${NAME_3}'
THIS_IP: '${HOST_3}'
when: inventory_hostname == (addr_3)
become: yes
- name: 启动服务etcd
shell: nohup sh ./run.sh > /dev/null 2>&1 &
args:
chdir: '{{ pro_dir }}'
become: yes
run.sh配置文件
cd `dirname $0`
IP=`awk 'BEGIN{ ORS="" }{a[NR]=$1}END{for(i=1;i<=NR;i++){print i%5?a[i]",":a[i]"\n"}}' inv`
addr_1=`awk 'NR == 1' inv | awk {'print $1'}`
addr_2=`awk 'NR == 2' inv | awk {'print $1'}`
addr_3=`awk 'NR == 3' inv | awk {'print $1'}`
HOSTNAME_1=`awk 'NR == 1' inv | awk {'print $2'}`
HOSTNAME_2=`awk 'NR == 2' inv | awk {'print $2'}`
HOSTNAME_3=`awk 'NR == 3' inv | awk {'print $2'}`
## 安装包源
http_url='http://192.168.1.230/packages/'
## etcd安装包名称
etcd_package='etcd-v3.4.13-linux-amd64.tar.gz'
## etcd安装包md5值
etcd_md5='md5:b4a093f33fb75e49f2b53f8062ead621'
## 解包路径
Unpack='/data/op/'
## 拉包存放位置
download_dir='/tmp/'
## etcd解压完成路径
pro_dir='/data/op/etcd-v3.4.13-linux-amd64/'
## etcd解压完成标识
etcd_file='data/op/etcd-v3.4.13-linux-amd64/etcdctl'
ansible_options="
-e addr_1=$addr_1
-e addr_2=$addr_2
-e addr_3=$addr_3
-e HOSTNAME_1=$HOSTNAME_1
-e HOSTNAME_2=$HOSTNAME_2
-e HOSTNAME_3=$HOSTNAME_3
-e http_url=$http_url
-e etcd_package=$etcd_package
-e etcd_md5=$etcd_md5
-e Unpack=$Unpack
-e download_dir=$download_dir
-e pro_dir=$pro_dir
-e etcd_file=$etcd_file"
ansible-playbook -i ${IP} \
$ansible_options \
--key-file "./id_rsa"\
etcd.yml $*
inv配置文件
10.10.80.176 k8s-slave2
10.10.80.177 k8s-slave1
10.10.80.178 k8s-master
id_rsa配置文件
三台服务器公用的私钥
conf目录:
run.sh配置文件
TOKEN=etcd_test
CLUSTER_STATE=new
DATA_DIR=/data/appdata/etcd/data.etcd
NAME_1={{ HOSTNAME_1 }}
NAME_2={{ HOSTNAME_2 }}
NAME_3={{ HOSTNAME_3 }}
HOST_1={{ addr_1 }}
HOST_2={{ addr_2 }}
HOST_3={{ addr_3 }}
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
THIS_NAME={{ THIS_NAME }}
THIS_IP={{ THIS_IP }}
./etcd --data-dir=${DATA_DIR} --name ${THIS_NAME} \
--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
测试验证:
./etcdctl --write-out=table --endpoints="10.10.80.176:2388,10.10.80.177:2388,10.10.80.178:2388" member list
./etcdctl --write-out=table --endpoints="10.10.80.176:2388,10.10.80.177:2388,10.10.80.178:2388" endpoint status
[root@k8s-master /data/op/etcd-v3.4.13-linux-amd64]$ ./etcdctl --endpoints="10.10.80.176:2388" put /test "123行不行"
OK
[root@k8s-master /data/op/etcd-v3.4.13-linux-amd64]$ ./etcdctl --endpoints="10.10.80.176:2388" get /test "123行不行"
/test
123行不行
分类:
ansible
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了