RHCE-B1. 按要求安装和配置 Ansible

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCE-B1. 按要求安装和配置 Ansible相关的知识,希望对你有一定的参考价值。

红帽RHCE考试下午-RHCE(RH294)

RH294任务概览

  • 考试时间4个小时,6台虚拟机,15道题
  • 原来通过脚本或者集群做的题现在都需要使用playbook实现
  • 考试时大概有6台虚拟服务器,都已经做好了互相的免密
  • 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
  • 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
  • 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
  1. 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
  2. 注意:考试的判分方式通过普通用户远程执行指定目录下的playbook或者脚本,如果使用root做题,则没有权限就是零分

1. 按要求安装和配置 Ansible

  • 按照下方所述,在控制节点 workstation.lab.example.com 上安装和配置 Ansible:

任务要求

  1. 安装所需的软件包 (考试时要验证一下ansible是不是装好了)
  2. 创建名为/home/student/ansible/inventory 的静态清单文件, 以满足以下需求:
    servera 是dev 主机组的成员
    serverb 是 test 主机组的成员
    serverc 和 serverd 是 prod 主机组的成员
    prod 组 是webservers 主机组的成员
    bastion 是 balancers 主机组的成员
  3. 创建名为/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 相关文件

  1. 配置文件
  • etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,
    当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件
  • /etc/ansible/hosts 主机清单
  • /etc/ansible/roles/ 存放角色的目录
  1. 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
  1. 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的主要内容,如果未能解决你的问题,请参考以下文章

RHCE-B2. 创建和运行 Ansible 临时命令

RHCE-B15.更新 Ansible 库的密钥

RHCE-B15.更新 Ansible 库的密钥

RHCE-B13. 创建Ansible密码库,使用文件内密码加密yml

RHCE-B14. 基于Ansible密码库创建用户帐户

RHCE-B14. 基于Ansible密码库创建用户帐户