Ansible部署

Ansible部署

一、部署环境及前置操作

1、测试环境

注:主机复用原测试环境,主机hostname根据需求调整
硬件环境:N100 x86主机 Proxmox系统
软件环境:Ubuntu 22.04.3 LTS
软件版本:redis-7.4.0.tar.gz
主机环境:主机IP          主机名  
		192.168.0.150 node1	#Ansible管理节点
		192.168.0.151 node2	#测试节点
		192.168.0.152 node3	#测试节点

2、主机IP及主机名调整

#配置静态IP
vi /etc/netplan/00-installer-config.yaml 
#添加以下内容,静态IP根据个人需求调整
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      addresses: [192.168.0.150/24]   # 静态 IP 和子网掩码
      dhcp4: false                    # 关闭 DHCP
      routes:
        - to: default                 # 默认路由
          via: 192.168.0.1           # 网关地址
      nameservers:
        addresses: [192.168.0.1, 114.114.114.114]  # DNS 服务器
#生效配置
netplan apply     

#主机复用原测试环境,主机hostname根据需求调整
#节点1:192.168.0.150 node1
hostnamectl set-hostname node1
#节点2:192.168.0.151 node2
hostnamectl set-hostname node2
#节点3:192.168.0.152 node3
hostnamectl set-hostname node3

3、调整hosts及时间同步

#添加host配置
cat >> /etc/hosts << EOF
192.168.0.150 node1
192.168.0.151 node2
192.168.0.152 node3
EOF
#node节点主机如果是使用其他主机克隆时,注意调整/etc/hosts中127.0.1.1配置,克隆主机默认为原始主机配置

#调整系统时区配置
timedatectl set-timezone Asia/Shanghai

#安装时间同步工具chrony
apt install chrony -y

#添加时间同步源/etc/chrony/chrony.conf
echo "server time1.aliyun.com iburst" >> /etc/chrony/chrony.conf

#启动服务
systemctl start chrony
systemctl enable chrony

#检查运行状态
chronyc sources -v

4、配置免密登录

#192.168.0.150主机执行
root@node1:/etc/ansible# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:40g2VL66TKcfb0X5l3alhHZscxP2mgOhL075cocK4iA root@node1
The key's randomart image is:
+---[RSA 3072]----+
|        .        |
|       o    .  o |
|      . .  . =. o|
|     .   .. * *.+|
|      + S  = * *+|
|     o = .+ o *oo|
|  E . = =o + ..o.|
|   . = = ++ + .  |
|      =...o+ .   |
+----[SHA256]-----+
#首次配置免密需要手动输入密码
root@node1:/etc/ansible# ssh-copy-id test@192.168.0.151  
root@node1:/etc/ansible# ssh-copy-id test@192.168.0.152 

二、Ansible部署

1、Ansible安装

Ansible安装方式有2种,具体安装方式如下:

1.1、使用apt安装

在线安装:

#联网情况下
apt update
apt install ansible -y

离线安装:

#离线环境
#在可联网主机创建相同环境架构本地环境/虚拟机下载安装包及依赖
mkdir -p /data/ansible_download/ #目录根据实际进行调整
cd /data/ansible_download/
#下载软件包及依赖
apt download ansible $(apt-rdepends ansible | grep -v "^ " | grep -v "^lib")
root@node1:/data/ansible_download# ll
total 17128
drwxr-xr-x 2 root root     4096 Jun  3 22:13 ./
drwxr-xr-x 3 root root     4096 Jun  3 22:13 ../
-rw-r--r-- 1 root root 17530700 Apr 29  2021 ansible_2.10.7+merged+base+2.10.8+dfsg-1_all.deb
#安装,如果有其他deb安装包,添加到命令
apt install ./ansible_2.10.7+merged+base+2.10.8+dfsg-1_all.deb -y

安装验证:

#安装验证
root@node1:/data/ansible_download# ansible --version
ansible 2.10.8
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Feb  4 2025, 14:57:36) [GCC 11.4.0]
1.2、使用pip安装

在线安装:

#联网情况下
apt update
apt install python3-pip -y
pip3 install ansible
#默认源安装较慢时
pip3 install ansible --index-url https://pypi.tuna.tsinghua.edu.cn/simple

离线安装:

#离线环境
#在可联网主机创建相同环境架构本地环境/虚拟机下载安装包及依赖
mkdir -p /data/ansible_download/ #目录根据实际进行调整
cd /data/ansible_download/
#下载软件包
pip3 download ansible
#如果默认源下载较慢,可以使用
#国内常用镜像源
#清华:https://pypi.tuna.tsinghua.edu.cn/simple
#阿里云:https://mirrors.aliyun.com/pypi/simple/
#腾讯云:https://mirrors.cloud.tencent.com/pypi/simple
#华为云:https://repo.huaweicloud.com/repository/pypi/simple
pip3 download ansible --index-url https://pypi.tuna.tsinghua.edu.cn/simple
#安装
pip3 install --no-index --find-links=./ ansible

安装验证:

#安装验证
root@node1:/data/ansible_download# ansible --version
ansible [core 2.17.12]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.10/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.10.12 (main, Feb  4 2025, 14:57:36) [GCC 11.4.0] (/usr/bin/python3)
  jinja version = 3.0.3
  libyaml = True

2、Ansible配置文件

2.1、主配置文件

位置(按优先级从高到低):

  • 当前目录下的 ./ansible.cfg

  • 用户家目录下的 ~/.ansible.cfg

  • 系统全局的 /etc/ansible/ansible.cfg

创建方法

# 创建默认配置文件
mkdir -p /etc/ansible/
mkdir -p /etc/ansible/{inventory,group_vars,host_vars,roles,files,templates}
touch /etc/ansible/ansible.cfg

#生成默认配置(配置较多,使用常用配置项即可)
ansible-config init --disabled > /etc/ansible/ansible.cfg

常用配置内容:

[defaults]
# 安全设置
# 禁用SSH主机密钥检查(测试环境用)
host_key_checking = False

# 禁用弃用警告
deprecation_warnings = False

# 性能优化
# 并发进程数
forks = 50
# 智能收集facts
gathering = smart
# 缓存facts加速后续执行
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts
# 缓存24小时
fact_caching_timeout = 86400

# 路径设置
# 默认库存文件
inventory = /etc/ansible/hosts
# 角色搜索路径
roles_path = /etc/ansible/roles
# 日志记录
log_path = /var/log/ansible.log

[privilege_escalation]
# 默认启用权限提升,根据需求配置
become = True
# 使用sudo                 
become_method = sudo
# 提升为root
become_user = root
# 不提示sudo密码
become_ask_pass = False

[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s
# 启用管道加速
pipelining = True
2.2、库存文件 (Inventory File)

默认位置/etc/ansible/hosts

创建方法

#以自定义为例
mkdir -p /etc/ansible/
touch /etc/ansible/hosts 

配置内容:

# 简单主机定义
[ubuntu_servers]
192.168.0.151
192.168.0.152 ansible_port=22  # 自定义SSH端口
2.3、主机变量文件

位置:通常在库存文件所在目录的 host_vars/group_vars/ 子目录中

创建方法

mkdir -p /etc/ansible/{host_vars,group_vars}

示例:

# /etc/ansible/group_vars/all.yml
---
ansible_python_interpreter: /usr/bin/python3
timezone: UTC

# /etc/ansible/host_vars/web1.example.com.yml
---
http_port: 8080
max_clients: 200
2.4、Ansible Vault 密码文件(可选)

用于加密敏感数据:

#全局存储
echo "my_vault_password" > /etc/ansible/vault_pass.txt
chmod 600 /etc/ansible/vault_pass.txt

#用户级存储
#在用户目录下创建
mkdir -p ~/.ansible/
echo "your_vault_password" > ~/.ansible/vault_pass
chmod 600 ~/.ansible/vault_pass
2.5、配置文件优先级

Ansible 按以下顺序查找配置文件:

  1. ANSIBLE_CONFIG 环境变量指定的文件

  2. 当前目录下的 ansible.cfg

  3. 用户家目录下的 ~/.ansible.cfg

  4. /etc/ansible/ansible.cfg

推荐目录结构如下:

ansible_project/
├── ansible.cfg          # 项目级配置
├── inventory/           # 库存目录
│   ├── hosts            # 主库存文件
│   ├── host_vars/       # 主机变量
│   └── group_vars/      # 组变量
├── roles/               # 自定义角色
├── playbooks/           # playbook 文件
└── files/               # 文件资源

验证配置文件:

#测试配置文件目录结构如下
root@node1:/etc/ansible# tree /etc/ansible
/etc/ansible
├── ansible.cfg
├── files
├── group_vars
│   └── all.yml
├── hosts
├── host_vars
├── inventory
├── roles
└── templates
root@node1:/etc/ansible# ansible --version          
ansible [core 2.17.12]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.10/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.10.12 (main, Feb  4 2025, 14:57:36) [GCC 11.4.0] (/usr/bin/python3)
  jinja version = 3.0.3
  libyaml = True
2.6、测试
#免密配置为test用户,直接执行ansible ubuntu_servers -m command -u test -a 'df -h'因配置开启权限提升,会出现执行失败情况,现象如下:
root@node1:/etc/ansible# ansible ubuntu_servers -m command -u test -a 'ls /tmp'
192.168.0.151 | FAILED | rc=-1 >>
Missing sudo password
192.168.0.152 | FAILED | rc=-1 >>
Missing sudo password

#处理方式1:可以通过-K参数手动输入密码
root@node1:/etc/ansible# ansible ubuntu_servers -m command -u test -a 'df -h' -K
BECOME password: 
192.168.0.151 | CHANGED | rc=0 >>
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              197M  1.1M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   15G  7.0G  7.0G  51% /
tmpfs                              982M     0  982M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  252M  1.6G  14% /boot
tmpfs                              197M  4.0K  197M   1% /run/user/1000
192.168.0.152 | CHANGED | rc=0 >>
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              197M  1.1M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   15G  6.5G  7.5G  47% /
tmpfs                              982M     0  982M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  252M  1.6G  14% /boot
tmpfs                              197M  4.0K  197M   1% /run/user/1000

#方式2:关闭权限提升配置,编辑ansible.cfg配置,将become=true,改为become=false
root@node1:/etc/ansible# ansible ubuntu_servers -m command -u test -a 'df -h'
192.168.0.151 | CHANGED | rc=0 >>
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              197M  1.1M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   15G  7.0G  7.0G  51% /
tmpfs                              982M     0  982M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  252M  1.6G  14% /boot
tmpfs                              197M  4.0K  197M   1% /run/user/1000
192.168.0.152 | CHANGED | rc=0 >>
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              197M  1.1M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   15G  6.5G  7.5G  47% /
tmpfs                              982M     0  982M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  252M  1.6G  14% /boot
tmpfs                              197M  4.0K  197M   1% /run/user/1000
使用Ansible部署Keepalived集群可按以下详细步骤操作: ### 1. 准备Ansible环境 确保Ansible已经安装在控制节点上,并且能够通过SSH连接到所有目标节点。可以使用以下命令验证Ansible是否安装: ```bash ansible --version ``` ### 2. 创建Ansible角色目录结构 在Ansible项目目录下创建Keepalived角色的目录结构,例如: ```bash mkdir -p roles/keepalived/{tasks,templates} ``` ### 3. 编写任务文件 在`roles/keepalived/tasks`目录下创建`main.yml`文件,内容如下: ```yaml --- # tasks file for keepalived - name: install keepalived yum: name: keepalived state: present - name: configure keepalived template: src: keepalived.conf.j2 dest: /etc/keepalived/keepalived.conf notify: restart keepalived - name: start keepalived service: name: keepalived state: started ``` 此文件定义了安装Keepalived、配置Keepalived并启动服务的任务[^1]。 ### 4. 编写配置模板文件 在`roles/keepalived/templates`目录下创建`keepalived.conf.j2`文件,根据实际需求编写Keepalived的配置模板。例如: ```plaintext ! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100 } } ``` ### 5. 编写Ansible Playbook 在项目根目录下创建一个Playbook文件,例如`deploy_keepalived.yml`,内容如下: ```yaml --- - name: Deploy Keepalived Cluster hosts: keepalived_nodes become: true roles: - keepalived ``` 这里`keepalived_nodes`是Ansible清单文件中定义的Keepalived节点组。 ### 6. 配置Ansible清单文件 在`/etc/ansible/hosts`或自定义的清单文件中定义Keepalived节点组,例如: ```plaintext [keepalived_nodes] node1 ansible_host=192.168.1.101 node2 ansible_host=192.168.1.102 ``` ### 7. 运行Ansible Playbook 使用以下命令运行Playbook: ```bash ansible-playbook deploy_keepalived.yml ``` ### 8. 验证部署 可以通过以下命令验证Keepalived服务是否正常运行: ```bash ansible keepalived_nodes -m service -a "name=keepalived state=started" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值