ansible安装部署

发布时间 2023-08-15 21:23:01作者: 村尚chun叔

ansible安装部署

1、ansible安装

管理机上安装ansible,被管理节点必须打开ssh服务

yum install epel-release
yum install -y ansible
ansible --version

在管理机上对其他机器做免密操作
ssh-keygen 
ssh-copy-id -i 192.168.10.108
ssh-copy-id -i 192.168.10.110
配置文件位置/etc/ansible/ansible.cfg,里面存放的都是各个配置文件的具体位置

2、定义服务器分组的配置文件

vim /etc/ansible/hosts
在末尾添加
[group1]
192.168.10.107
192.168.10.110
[nginx]
apache[1:10].aaa.com 表示apache1.aaa.com到apache10.aaa.com这10台机器
nginx[a:z] 表示nginxa到nginxz这26台机器
192.168.10.[11:15] 表示192.168.10.11到192.168.10.15这5台机器
10.1.1.13:2222 表示10.1.1.13这台,但ssh的端口为2222

nginx1 表示别名为nginx1的这台机器
定义10.1.1.12:2222这台服务器的别名为nginx1
nginx1 ansible_ssh_host=10.1.1.12 ansible_ssh_port=2222
没有做免密登录的服务器可以指定用户名与密码
nginx1  ansible_ssh_host=10.1.1.13 ansible_ssh_port=2222 ansible_ssh_user=root ansible_ssh_pass="123456"

公共变量
[web:vars]
ansible_ssh_port=22999
ansible_ssh_user=root
ansible_ssh_pass=123123
[web]
172.16.1.[7:9]

新版参数

参数 参数类型 参数说明
ansible_host 主机地址 远程主机ip
ansible_port 主机端口 设置SSH连接端口,默认22
ansible_user 主机用户 默认SSH远程连接的用户身份
ansible_password 用户密码 指定SSH远程主机密码

故障解决

可能会遇见如下问题,关于新机器的指纹确认问题。

[root@master-61 ~]#ansible 172.16.1.9 -m ping
172.16.1.9 | FAILED! => {
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
}

解决办法1,手动ssh连接,进行指纹确认,写入到本机的

[root@master-61 ~]#cat ~/.ssh/known_hosts

解决办法2,ansible配置文件中忽略指纹确认

[root@master-61 ~]#grep 'host_key_checking' /etc/ansible/ansible.cfg 
host_key_checking = False

ansible命令用法

ansible 操作的机器名或组名 -m 模块名 -a "参数1=值1 参数2=值2"
ansible的状态,就是如下的颜色区分,看到不同的状态

绿色:命令以用户期望的执行了,但是状态没有发生改变;

黄色:命令以用户期望的执行了,并且状态发生了改变;

紫色:警告信息,说明ansible提示你有更合适的用法;出现了warning警告

红色:命令错误,执行失败;

蓝色:详细的执行过程;
关闭告警信息
ansible web  -m command -a "touch /opt/人生无常大肠包小肠.log    warn=false  "

使用command提供的专有命令

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html#ansible-collections-ansible-builtin-command-module

这些命令用于编写ansible-playbook,完成服务器部署的各种复杂条件限定。

选项参数 选项说明
chdir 在执行命令执行,通过cd命令进入指定目录
creates 定义一个文件是否存在,若不存在,则运行相应命令;存在则跳过
free_form(必须) 参数信息中可以输入任何系统命令,实现远程管理
removes 定义一个文件是否存在,如果存在,则运行相应命令;如果不存在则跳过
在/opt下创建test.log
2个写法
ansible  web -a "touch /opt/chaoge666.log"

ansible web -a "touch chaoge666.log  chdir=/opt"
备份/backup_config,必须先有文件夹,才能执行该备份命令
ansible web -a "tar -zcf /backup_config/etc.tgz   etc chdir=/  removes=/backup_config"
创建/opt目录
ansible backup -m command -a 'mkdir /opt creates=/opt'

shell模块(万能模块)

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/shell_module.html#ansible-collections-ansible-builtin-shell-module

shell模块可以识别特殊符号,就等于远程执行命令了

通过一条命令,做如下事情

- 创建文件夹
- 生成sh脚本文件(查看主机名)
- 赋予脚本可执行权限
- 执行脚本
- 忽略warning信息

ansible web  -m shell  -a "mkdir /test/;echo 'hostname' > /test/hostname.sh;chmod +x /test/hostname.sh;/test/hostname.sh;  warn=false"