【Ansible自动化运维】Ansible入门基础信息【安装配置、常用命令与模块】

发布于:2024-04-12 ⋅ 阅读:(345) ⋅ 点赞:(0)

介绍

  • Ansible 是一个开源 IT 自动化引擎,可自动执行供应、配置管理、应用程序部署、编排和许多其他 IT 流程。它可以免费使用,并且该项目受益于数千名贡献者的经验和智慧。
    在这里插入图片描述

  • 红帽® Ansible 自动化平台将十多个上游项目整合到一个统一的、安全性强化的企业平台中,以实现任务关键型自动化。它建立在开源项目的基础上,为跨职能团队创建端到端的自动化体验。
    在这里插入图片描述

安装配置

注意事项

  • ansible的安装主机一般称为主控端,中控,master或堡垒机
  • ansible 2.4版本开始,主控端Python版本需要2.6或以上(CentOS 5 Python版本为 2.4.3)
  • 被控端Python版本小于2.4的,需要安装python-simplejson
  • 被控端如开启SELinux需要安装libselinux-python
  • windows不能做为主控端
  • ansible不是服务,只在需要的时候启动(本质是Python脚本)

yum安装

  • epel-release
yum install epel-release -y
  • ansible
yum install ansible -y

验证安装

 ansible --version

在这里插入图片描述

配置

  • 去配置目录,会有三个文件
cd /etc/ansible/

在这里插入图片描述

  • 配置 ansible.cfg
vim /etc/ansible/ansible.cfg
 
[defaults]
#inventory     = /etc/ansible/hosts      # 主机列表配置文件
#library       = /usr/share/my_modules/  # 库文件存放目录
#remote_tmp    = $HOME/.ansible/tmp      # 临时py命令文件存放在远程主机目录
#local_tmp     = $HOME/.ansible/tmp      # 本机的临时命令执行目录  
#forks         = 5                       # 默认并发数,同时可以执行5次
#sudo_user     = root                    # 默认sudo 用户
#ask_sudo_pass = True                    # 每次执行ansible命令是否询问ssh密码
#ask_pass      = True                    # 每次执行ansible命令是否询问ssh口令
#remote_port   = 22                      # 远程主机的端口号(默认22)
 
# 建议调整项 
host_key_checking = False               # 检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log           # 日志文件,建议取消注释
module_name   = command                 # 默认模块,可以改为shell

host配置

在这里插入图片描述

主机清单配置

主控端

  • IP:11.0.1.141
  • 执行命令生成:ssh-keygen -t rsa
  • 一直按默认的执行
    在这里插入图片描述
  • 在该目录存在文件:/root/.ssh
    在这里插入图片描述

被控端

  • IP:11.0.1.150、11.0.1.151、11.0.1.152
  • 上传公钥至被控机器
ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.151
ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.152
ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.153
  • root@11.0.1.151 被控机的账号@IP
  • 输入密码信息
    在这里插入图片描述
ansible "*" -m ping  # (*表示所有主机)
ansible 192.168.1.* -m ping
ansible "*srvs" -m ping

常用模块

命令组成

ansible <host-pattern> [-m module_name] [-a args]
ansible +被管理的主机(ALL) +模块  +参数
    
    --help                 显示帮助
    --version              显示版本
    -m module              指定模块,默认为command
    -v                     详细过程 –vv -vvv更详细
    --list-hosts           显示主机列表,可简写 --list
    -k, --ask-pass         提示输入ssh连接密码,默认Key验证
    -C, --check            检查,并不执行
    -T, --timeout=TIMEOUT  执行命令的超时时间,默认10s
    -u, --user=REMOTE_USER 执行远程执行的用户
    -b, --become           代替旧版的sudo切换
        --become-user=USERNAME 指定sudo的runas用户,默认为root
    -K, --ask-become-pass  提示输入sudo时的口令

command模块

  • 默认模块,支持简单的linux命令,不支持管道、重定向等,不建议使用
ansible k8s -m command -a "pwd"
ansible k8s -m command -a "echo testa|grep a" #这个不能正常使用
ansible k8s -m command -a "echo bb >>/tmp/testansible" #重定向也无法正常使用

在这里插入图片描述

shell模块

ansible k8s -m shell -a "echo testa|grep a" #支持管道
ansible k8s -m shell -a "echo bb >>/tmp/testansible" #支持重定向
ansible k8s -m shell -a "cat /etc/passwd|awk -F':' '{print \$1}'" #遇到特殊符号需要加入\转义,这样子ansible才能正常运行

在这里插入图片描述

copy模块

  • 从ansible主控机复制文件到目录到远程主机,常用参数:

src:源文件/目录
dest:指定目标路径
mode:设置权限
backup:备份源文件
content:代替src,将本机指定内容传至远程主机并生成目标文件

# src指定本地文件,dest指定远程主机目录或者文件
ansible k8s -m copy -a "src=/home/ansible/ansible.txt dest=/home/ansible/"
  • 拷贝文件夹
ansible k8s -m copy -a "src=/home/ansible/ dest=/home/" #ansible文件夹没拷贝
ansible k8s -m copy -a "src=/home/ansible dest=/home/" #ansible文件夹拷贝了

script模块

  • 在远程主机上运行ansible服务器上的脚本,优点是不需手动传送脚本至每个服务器。
  • 其实是ansible自动传到远程主机、执行然后再删除脚本,即copy+shell+delete
ansible k8s -m script -a "/home/ansible/test.sh"

日志信息

  • 之前配置的ansible日志目录
  • log_path=/var/log/ansible.log # 日志文件,建议取消注释
    在这里插入图片描述

最后

  • 之前运维多台主机的时候都是挨个执行命令,可能主机只有几台,但是还是感觉有些许重复的操作,现在通过ansible主控操作,效率提升,还在主动探索中。。。
    在这里插入图片描述