ansible 自动化运维

  • 4台主机,需要配置主机名、IP地址、YUM。关闭SELINUX和防火墙
  • 配置控制节点pubserver,具体要求如下:

    • 配置名称解析,能够通过名字访问所有节点
    • 配置可以通过ssh到所有节点免密登陆
复制代码
[root@pubserver ~]# echo -e "192.168.88.240\tpubserver" >> /etc/hosts
复制代码
[root@pubserver ~]# for i in 1 2
复制代码
> do
复制代码
> echo -e "192.168.88.1$i\tweb$i" >> /etc/hosts
复制代码
> done
复制代码
[root@pubserver ~]# echo -e "192.168.88.13\tdb1" >> /etc/hosts
复制代码
[root@pubserver ~]# tail -4 /etc/hosts
复制代码
192.168.88.240   pubserver
复制代码
192.168.88.11    web1
复制代码
192.168.88.12    web2
复制代码
192.168.88.13    db1
复制代码
# 配置免密登陆
复制代码
[root@pubserver ~]# ssh-keygen   # 三个问题都直接回车,使用默认值
复制代码
# 执行以下命令时,可能需要回答yes和远程用户的密码,请按提示操作
复制代码
[root@pubserver ~]# for i in web{1..2} db1
复制代码
> do
复制代码
> ssh-copy-id $i
复制代码
> done

配置ansible管理环境

复制代码
# 创建ansible工作目录,目录名自己定义,不是固定的。
复制代码
[root@pubserver ~]# mkdir ansible
复制代码
[root@pubserver ~]# cd ansible
复制代码
# 创建配置文件。默认的配置文件是/etc/ansible/ansible.cfg,但是一般不使用它,而是在工作目录下创建自己的配置文件
复制代码
[root@pubserver ansible]# vim ansible.cfg    # 文件名必须是ansible.cfg
复制代码
[defaults]
复制代码
host_key_checking = false   # 不检查主机密钥,=号两边空格可有可无。
复制代码
inventory = inventory       # 定义主机清单文件为当前目录的inventory
复制代码
# 创建主机清单文件。写在[]里的是组名,[]下面的是组内的主机名
复制代码
[root@pubserver ansible]# vim inventory
复制代码
[webservers]
复制代码
web[1:2]   # web1和web2的简化写法,表示从1到2
复制代码
[dbs]
复制代码
db1
复制代码
# cluster是组名,自定义的;:children是固定写法,表示下面的组名是cluster的子组。
复制代码
[cluster:children]
复制代码
webservers
复制代码
dbs
复制代码
# 查看被管理的所有的主机。注意,一定在工作目录下执行命令。
复制代码
[root@pubserver ansible]# ansible all --list-hosts
复制代码
  hosts (3):
复制代码
    web1
复制代码
    web2
复制代码
    db1
复制代码
# 查看webservers组中所有的主机
复制代码
[root@pubserver ansible]# ansible webservers --list-hosts
复制代码
  hosts (2):
复制代码
    web1
复制代码
    web2

ansible管理

  • ansible进行远程管理的两个方法:

    • adhoc临时命令。就是在命令行上执行管理命令。
    • playbook剧本。把管理任务用特定格式写到文件中。
复制代码
ansible 主机或组列表 -m 模块 -a "参数"    # -a是可选的
  • 通过ping模块测试到远程主机的连通性。
复制代码
[root@pubserver ansible]# ansible all -m ping
复制代码
# 该命令检查是否可以管理远程主机。如果结果为绿色的SUCCESS,则表示成功。
复制代码
# 如果是红色的UNREACHABLE,则检查网络是否可通,是否已经可以免密登陆
shell模块
  • 与command模块类似,但是支持shell特性,如管道、重定向。
script模块
  • 用于在远程主机上执行脚本
file模块
  • 可以创建文件、目录、链接等,还可以修改权限、属性等

  • 常用的选项:

    • path:指定文件路径
    • owner:设置文件所有者
    • group:设置文件所属组
    • state:状态。touch表示创建文件,directory表示创建目录,link表示创建软链接,absent表示删除
    • mode:设置权限
    • src:source的简写,源
    • dest:destination的简写,目标
复制代码
# 将webservers组的主机上/tmp/file.txt的属主改为sshd,属组改为adm,权限改为0777
复制代码
[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/file.txt owner=sshd group=adm mode='0777'"
复制代码
[root@pubserver ansible]# ansible webservers -a "ls -l /tmp/file.txt"
copy模块
  • 用于将文件从控制端拷贝到被控端

  • 常用选项:

    • src:源。控制端的文件路径
    • dest:目标。被控制端的文件路径
    • content:内容。需要写到文件中的内容
复制代码
[root@pubserver ansible]# echo "AAA" > a3.txt
复制代码
# 将a3.txt拷贝到webservers主机的/root/
复制代码
[root@pubserver ansible]# ansible webservers -m copy -a "src=a3.txt dest=/root/"
复制代码
# 在目标主机上创建/tmp/mytest.txt,内容是Hello World
复制代码
[root@pubserver ansible]# ansible webservers -m copy -a "content='Hello World' dest=/tmp/mytest.txt"
fetch模块
  • 与copy模块相反,copy是上传,fetch是下载

  • 常用选项:

    • src:源。被控制端的文件路径
    • dest:目标。控制端的文件路径
复制代码
复制代码
 webservers组中的主机,把/etc/issue中有Hello的行,替换成chi le ma
复制代码
[root@pubserver ansible]# ansible webservers -m lineinfile -a "path=/etc/issue line='chi le ma' regexp='Hello'"
user模块
  • 实现linux用户管理

  • 常用选项:

    • name:待创建的用户名
    • uid:用户ID
    • group:设置主组
    • groups:设置附加组
    • home:设置家目录
    • password:设置用户密码
    • state:状态。present表示创建,它是默认选项。absent表示删除
    • remove:删除家目录、邮箱等。值为yes或true都可以。
复制代码
# 在webservers组中的主机上,创建lisi用户。设置其uid为1010,主组是adm,附加组是daemon和root,家目录是/home/lisi
复制代码
[root@pubserver ansible]# ansible webservers -m user -a "name=lisi uid=1010 group=adm groups=daemon,root home=/home/lisi"
复制代码
# 设置zhangsan的密码是123456
复制代码
# {{}}是固定格式,表示执行命令。password_hash是函数,sha512是加密算法,则password_hash函数将会把123456通过sha512加密变成zhangsan的密码[root@pubserver ansible]# ansible webservers -m user -a "name=zhangsan password={{'123456'|password_hash('sha512')}}"
group模块
  • 创建、删除组

  • 常用选项:

    • name:待创建的组名
    • gid:组的ID号
    • state:present表示创建,它是默认选项。absent表示删除
复制代码
# 在webservers组中的主机上创建名为devops的组
[root@pubserver ansible]# ansible webservers -m group -a "name=devops"
复制代码
# 在webservers组中的主机上删除名为devops的组
[root@pubserver ansible]# ansible webservers -m group -a "name=devops state=absent"
相关推荐
北京耐用通信4 小时前
耐达讯自动化赋能:Canopen转Profibus网关水泵连接新范式
人工智能·科技·物联网·自动化·信息与通信
AC赳赳老秦4 小时前
Shell 脚本批量生成:DeepSeek 辅助编写服务器运维自动化指令
运维·服务器·前端·vue.js·数据分析·自动化·deepseek
学Linux的语莫4 小时前
linux的root目录缓存清理
linux·运维·服务器
oMcLin4 小时前
如何在 SUSE Linux Enterprise Server 15 上部署并优化 K3s 集群,提升轻量级容器化应用的资源利用率?
linux·运维·服务器
Run Out Of Brain5 小时前
解决nginx代理配置下wordpress的 /wp-admin/返回 302 重定向到登录页问题
运维·nginx
Ghost Face...5 小时前
深入解析YT6801驱动模块架构
linux·运维·服务器
线束线缆组件品替网5 小时前
Amphenol LTW 防水线缆 IP67/IP68 结构解析
运维·网络·人工智能·汽车·硬件工程·材料工程
放寒假脚后跟v5 小时前
Pod 的 YAML 文件中 exitCode 字段的具体含义、不同取值代表的场景
运维·云原生·容器·kubernetes·k8s
东方佑5 小时前
使用Docker Compose一键部署OnlyOffice:完整指南与配置解析
运维·docker·容器
赵文宇(温玉)6 小时前
Docker的价值、特点、创新与关键技术
运维·docker·容器