RHCE-B1. 按要求安装和配置 Ansible
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCE-B1. 按要求安装和配置 Ansible相关的知识,希望对你有一定的参考价值。
红帽RHCE考试下午-RHCE(RH294)
RH294任务概览
- 考试时间4个小时,6台虚拟机,15道题
- 原来通过脚本或者集群做的题现在都需要使用playbook实现
- 考试时大概有6台虚拟服务器,都已经做好了互相的免密
- 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
- 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
- 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
- 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
- 注意:考试的判分方式通过普通用户远程执行指定目录下的playbook或者脚本,如果使用root做题,则没有权限就是零分
1. 按要求安装和配置 Ansible
- 按照下方所述,在控制节点 workstation.lab.example.com 上安装和配置 Ansible:
任务要求
- 安装所需的软件包 (考试时要验证一下ansible是不是装好了)
- 创建名为/home/student/ansible/inventory 的静态清单文件, 以满足以下需求:
servera 是dev 主机组的成员
serverb 是 test 主机组的成员
serverc 和 serverd 是 prod 主机组的成员
prod 组 是webservers 主机组的成员
bastion 是 balancers 主机组的成员 - 创建名为/home/student/ansible/ansible.cfg 的配置文件, 以满足以下要求:
主机清单文件为/home/student/ansible/inventory
playbook 中使用的角色的位置包括/home/student/ansible/roles
注意:因student 执行命令时需要输入密码, 会导致ansible 执行失败, 因此先添加sudoers 规则(考试中不需要修改,在考试中用的是 admin 用户)
准备个工作
- 考试期间不需要做
- 安装ansible,编辑并下发/etc/sudoers.d/student ,为普通用户sutudent提权
[root@workstation ~]# vim /etc/sudoers.d/student
student ALL=(ALL) NOPASSWD: ALL
[root@workstation ~]# for i in server{a..d} bastion
> do scp /etc/sudoers.d/student root@$i:/etc/sudoers.d/
> done
[root@workstation ~]# su - student
完成步骤
- 先在控制端用root 安装ansible,考试时候可能装了,再装一下也无妨
[kiosk@foundation ~]$ ssh -X root@workstation ## 先用root账户登录,确认是否已安装ansible
[root@workstation ~]# dnf install -y ansible
- 切记要切回到题目中要求的用户做题
- 需要用题目中要求的用户完成所有ansible的题目,练习中用student,考试中可能用admin
[root@workstation ~]# su - student
- 要求1:配置inventory主机分组清单文件
[student@workstation ansible]$ vim inventory
[dev]
servera
[test]
serverb
[prod]
serverc
serverd
[balancers]
bastion
[webservers:children]
prod
- 要求2:要配置ansible.cfg文件,指定主机清单和角色的目录在指定的目录中
注意:安装完ansible之后会有一个默认的配置文件,拿过来改吧改吧就行了
1. 修改主机清单文件位置 inventory
2. 修改playbook角色位置 roles_path
3. 指定远程执行用户为student remote_user(考试时候是啥就指定啥)
4. 停用远程执行用户密码检测 host_key_checkin
5. 为远程用户提权:找到[privilege_escalation]把下边的四个注释去掉就行了
- 以下这些操作都是用student进行的,先进入student加目录中
[student@workstation ~]$ mkdir ansible ## 先创建ansible的目录
[student@workstation ~]$ cd ansible
## 安装完ansible会有一个默认的配置文件,拷贝到题中指定目录进行修改
[student@workstation ~]$ cp /etc/ansible/ansible.cfg /home/student/ansible/ ## 注意权限,不要用-a参数,权限应该是student的
[student@workstation ~]$ vi ansible.cfg
[defaults]
inventory = /home/student/ansible/inventory ## 首先找到inventory,改成题中指定的目录
remote_user = student ## 更改远端执行用户为题目中指定的用户,这里时student,考试时随机应变
roles_path = /home/student/ansible/roles ## 修改角色目录为指定目录
host_key_checking = no ## 关掉主机key检查
## 找到[privilege_escalation]标签和这些become,把下面四行注释去掉,最后一个改成no
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = no
注意:最后一个组是嵌套的组,需要加个:children关键字
- 验证,就在ansible这个目录中进行验证,因为ansible要读当前目录里边这个配置文件
[student@workstation ansible]$ ansible all -m ping
考察的知识点
ansible组成
- 主机清单 对主机进行分组
- 模块 实现不同功能
- 插件 实现补充功能
- 接口 第三方程序调用
Ansible安装
yum info ansible --enablerepo=*
- 利用epel源安装
yum -y install ansible --enablerepo=*
ansible -version
rpm -ql ansible
which ansible
- ansible 不是一个长期运行的程序
- ansible 利用ssh与其他服务器进行交互,没有对应的service,即没有私有端口
Ansible 相关文件
- 配置文件
- etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,
当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件 - /etc/ansible/hosts 主机清单
- /etc/ansible/roles/ 存放角色的目录
- ansible 主配置文件
- Ansible 的配置文件可以放在多个不同地方,优先级从高到低顺序如下
#环境变量,注意此项用 ansible --version 看不到,但可以生效
ANSIBLE_CONFIG ## 全局生效
#当前目录下的ansible.cfg,在某个目录中执行ansible命令,如果目录中有ansible.cfg,没有配置环境变量的前提下,此配置则可以被ansible自动加载
./ansible.cfg ## 尽在所在目录生效
#当前用户家目录下的.ansible.cfg,如果用户家目录中有ansible.cfg,没有配置环境变量的前提下,在没有配置文件的目录下,家目录中的配置可被ansible自动加载
~/.ansible.cfg ## 仅在切换到指定用户的情况下生效
/etc/ansible/ansible.cfg #系统默认配置文件,以上都没有,就用默认的
- Ansible 的默认配置文件/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 #默认并发数
#sudo_user = root #默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
#host_key_checking = False #检查对应服务器的host_key,建议取消此行注释,实现第一次连接自动信任目标主机
#log_path=/var/log/ansible.log #日志文件,建议启用
#module_name = command #默认模块,可以修改为shell模块
[privilege_escalation] #普通用户提权配置
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
- inventory 主机清单文件
- ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory 主机清单文件中将其分组组织
- 默认的inventory file为
/etc/ansible/hosts
- inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成
注意: 生产建议在每个项目目录下创建项目独立的hosts文件 - 主机清单文件格式
- inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中
- 此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明
- 如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机
- Inventory 参数说明
ansible_ssh_host #将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port #ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口192.168.1.100:2222
ansible_ssh_user #默认的 ssh 用户名
ansible_ssh_pass #ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass #sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
ansible_sudo_exe (new in version 1.8) #sudo 命令路径(适用于1.8及以上版本)
ansible_connection #与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
ansible_ssh_private_key_file #ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_shell_type #目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为'csh' 或 'fish'.
ansible_python_interpreter #目标主机的 python 路径.适用于的情况: 系统中有多个 Python,或者命令路径不是"/usr/bin/python",比如 \\*BSD, 或者 /usr/bin/python 不是 2.X 版本的Python.之所以不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python"可执行程序名不可为 python以外的名字(实际有可能名为python26).与ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
- 主机清单特殊用法范例
[webservers]
www[1:100].example.com
[dbservers]
db-[a:f].example.com
[appservers]
10.0.0.[1:100]
#定义testsrvs组中包括两个其它分组,实现组嵌套
[testsrvs:children]
webservers
dbservers
[test]
10.0.0.8 ansible_connection=local #指定本地连接,无需ssh配置
#ansible_connection=ssh 需要StrictHostKeyChecking no
10.0.0.7 ansible_connection=ssh ansible_ssh_port=2222 ansible_ssh_user=sun
ansible_ssh_password=123456
10.0.0.6 ansible_connection=ssh ansible_ssh_user=root
ansible_ssh_password=123456
#执行ansible命令时显示别名,如web01
[websrvs]
web01 ansible_ssh_host=10.0.0.101
web02 ansible_ssh_host=10.0.0.102
[websrvs:vars]
ansible_ssh_password=123456
some_host ansible_ssh_port=2222 ansible_ssh_user=manager
aws_host ansible_ssh_private_key_file=/home/example/.ssh/aws.pem
freebsd_host ansible_python_interpreter=/usr/local/bin/python
ruby_module_host ansible_ruby_interpreter=/usr/bin/ruby.1.9.3
以上是关于RHCE-B1. 按要求安装和配置 Ansible的主要内容,如果未能解决你的问题,请参考以下文章