1、ansible的常用模块
1、主机连通性测试
[root@ansible1 ~]# ansible all -m ping
2、command: 在目标主机上执行一条命令。
- name: Run a command
command: ls -l
3、shell: 在目标主机上以 shell 的方式执行命令。
- name: Run a shell command
shell: echo "Hello, World!"
4、copy: 将文件从控制机复制到目标主机。
- name: Copy a file
copy:
src: /path/to/source/file
dest: /path/to/destination/
5、file: 管理文件和目录。
- name: Create a directory
file:
path: /path/to/directory
state: directory
6、template: 使用 Jinja2 模板引擎在目标主机上生成文件。
- name: Create a file from template
template:
src: template.j2
dest: /path/to/destination/file
7、yum/apt: 在目标主机上安装软件包。
- name: Install a package (YUM)
yum:
name: package-name
state: present
- name: Install a package (APT)
apt:
name: package-name
state: present
8、service: 管理系统服务。
- name: Restart a service
service:
name: service-name
state: restarted
9、user: 管理系统用户。
- name: Create a user
user:
name: username
password: password-hash
state: present
10、group: 管理系统用户组。
- name: Create a group
group:
name: groupname
state: present
11、lineinfile: 在文件中插入、修改或删除一行。
- name: Add a line to a file
lineinfile:
path: /path/to/file
line: 'some text'
state: present
2、ansible剧本格式
playbook由YMAL语言编写。YAML( /ˈjæməl/ )参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822,Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与OrenBen-Kiki也是这语言的共同设计者。 YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。首先学习了解一下YMAL的格式,对我们后面书写playbook很有帮助。
以下为playbook常用到的YMAL格式: 1、文件的第一行应该以 “—” (三个连字符)开始,表明YMAL文件的开始。 2、在同一行中,#之后的内容表示注释,类似于shell,python和ruby。 3、YMAL中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。 4、同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。 5、play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以”:”分隔表示,”:”后面还要增加一个空格。
下面是一个举例:—
#安装与运行mysql服务
– hosts: node1
remote_user: root
tasks:
– name: install mysql-server package
yum: name=mysql-server state=present
– name: starting mysqld service
service: name=mysql state=started
我们的文件名称应该以.yml
结尾,像我们上面的例子就是mysql.yml
。其中,有三个部分组成:
host部分
:使用 hosts 指示使用哪个主机或主机组来运行下面的 tasks ,每个 playbook 都必须指定 hosts ,hosts也可以使用通配符格式。主机或主机组在 inventory 清单中指定,可以使用系统默认的/etc/ansible/hosts
,也可以自己编辑,在运行的时候加上-i
选项,指定清单的位置即可。在运行清单文件的时候,–list-hosts
选项会显示那些主机将会参与执行 task 的过程中。remote_user
:指定远端主机中的哪个用户来登录远端系统,在远端系统执行 task 的用户,可以任意指定,也可以使用 sudo,但是用户必须要有执行相应 task 的权限。tasks
:指定远端主机将要执行的一系列动作。tasks 的核心为 ansible 的模块,前面已经提到模块的用法。tasks 包含name
和要执行的模块
,name 是可选的,只是为了便于用户阅读,不过还是建议加上去,模块是必须的,同时也要给予模块相应的参数。
使用ansible-playbook运行playbook文件,得到如下输出信息,输出内容为JSON格式。并且由不同颜色组成,便于识别。一般而言 | 绿色代表执行成功,系统保持原样 | 黄色代表系统代表系统状态发生改变 | 红色代表执行失败,显示错误输出 执行有三个步骤:1、收集facts 2、执行tasks 3、报告结果
3、写过什么剧本
ansible剧本yum安装mysql5.7.43(此剧本适用于服务器已yum装过mysql并且selinux和防火墙没关闭,如需使用请按照需要进行注释不用的行)
- hosts: 10.36.192.219
remote_user: root
tasks:
- name: disable firewalld
yum: name=firewalld state=absent
- name: disable selinux
shell: setenforce 0
- name: clean
shell: rm -rf /var/lib/mysql* /var/log/mysql* /etc/my.cnf
- name: Clean up the environment
shell: yum -y erase $(rpm -qa |egrep "mysql|mariadb")
- name: Configure the mysql5.7.43 yum source
shell: yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
- name: disable mysql8.0 yum source enable mysql5.7.43 yum
shell: yum-config-manager --disable mysql80-community && yum-config-manager --enable mysql57-community
- name: install mysql
yum: name=mysql-community-server state=present
- name: starting msyql service
service: name=mysqld state=started
- name: Change mysql database password
shell: mysqladmin -uroot -p"$(awk '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log)" password "QQqq123@123"
- name: create database
shell: mysql -uroot -p"QQqq123@123" -e "create database wordpress default charset 'utf8'"
- name: empower
shell: mysql -uroot -p"QQqq123@123" -e 'grant all on wordpress.* to "wordpress"@"10.36.192.219" identified by "QQqq123@123";flush privileges'
4、ansible 怎么优化
(1) Ansible SSH 关闭秘钥检测
默认以 SSH 登录远程客户端服务器,会检查远程主机的公钥(public key),并将该主机的公钥记录在~/.ssh/known_hosts 文件中。下次访问相同主机时,OpenSSH 会核对公钥,如果公钥不同,OpenSSH 会发出警告,如果公钥相同,则提示输入密码。 SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来设定的StrictHostKeyChecking 检查级别包括:no(不检查)、ask(询问)、yes(每次都检查)、False(关闭检查)。 Ansible 配置文件中加入如下代码,即可关闭 StrictHostKeyChecking 检查:
host_key_checking = False
(2) OpenSSH 连接优化
使用 OpenSSH 服务时,默认服务器端配置文件 UseDNS=YES 状态,该选项会导致服务器根据客户端的 IP 地址进行 DNS PTR 反向解析,得到客户端的主机名,然后根据获取到的主机名进行 DNS 正向 A 记录查询,并验证该 IP 是否与原始 IP 一致。关闭 DNS 解析代码如下:
sed -i ‘/^GSSAPI/s/yes/no/g; /UseDNS/d; /Protocol/aUseDNS no’ /etc/ssh/sshd_config
/etc/init.d/sshd restart
(3) SSH pipelining 加速 Ansible
SSH pipelining 是一个加速 Ansible 执行速度的简单方法,SSH pipelining 默认是关闭的,关闭是为了兼容不同的 sudo 配置,主要是 requiretty 选项。 如果不使用 Sudo 建议开启该选项,打开此选项可以减少 Ansible 执行没有文件传输时,SSH 在被控机器上执行任务的连接数。使用 Sudo 操作的时候, 必须在所有被管理的主机上将配置文件/etc/sudoers 中 requiretty 选项禁用。
sed -i ‘/^pipelining/s/False/True/g’ /etc/ansible/ansible.cfg
(4)Ansible Facts 缓存优化
Ansible-playbook 在执行过程中,默认会执行 Gather facts,如果不需要获取客户端的 fact 数据的话,可以关闭获取 fact 数据功能,关闭之后可以加快 ansible-playbook的执行效率。如需关闭 fact 功能,在 playbook yaml 文件中加入如下代码即可:
gather_facts: nogather_facts: no
Ansible facts 组件主要用于收集客户端设备的基础静态信息,这些信息可以在做配置管理的时候方便引用。Facts 信息直接当做 Ansible Playbook 变量信息进行引用,通过定制 facts 以便收集我们想要的信息,同时可以通过 Facter 和 Ohai 来拓展 facts 信息,也可以将 facts 信息存入 Redis 缓存中,如下为 Facts 使用 Redis 缓存的步骤
在配置文件/etc/ansible/ansible.cfg 中 defaluts 段中加入代码,如果 redis 密码为 admin,则开启 admin 密码行:
# yum install -y python-pip
# pip install redis==3.0.0
gathering = smart
fact_caching = redis
fact_caching_timeout = 86400
fact_caching_connection = localhost:6379
#fact_caching_connection = localhost:6379:0:admin
也可以使用json来缓存信息
fact_caching = jsonfile
fact_caching_timeout = 86400
fact_caching_connection = /tmp