RHCE(ansible基础)
一:ansible简介
1:ansible的介绍
一个自动化工具,配置系统,部署软件,编写复杂的it任务,由python编写的,就是让你管理100台机器的话,部署一个服务,使用自动化工具可以迅速的帮你解决这个问题
2:ansible的优点
1、无需在被控节点上安装客户端,也就是agent代理,其他的自动化工具需要agent代理才行,ansible是一个无结构的架构,只需要sshd即可
2、在服务端不需要启动任何服务,只需要执行命令即可
3、是基于模块化工作的,可以yaml语言,可以使用任何的语言开发这个ansible的模块
4、yaml语言定制playbook
5、默认使用ssh控制节点
6、可以实现多级控制,就是管理100台虚拟机的时候,可以多分几个主控节点出来,分别管理50台虚拟机,完成一个操作
7、幂等性,也就是一次执行的结果和多次执行的结果是一样的,就是如果有一个地方报错了话,修改后,从这个报错的地方开始运行,
3:ansible的基本架构
图片:
4:安装ansible的方式
1:通过源码包的方式安装
安装步骤: 1.下载源码包 解压源码包 wget https://releases.ansible.com/ansible/ansible-2.9.0.tar.gz tar -xzf ansible-2.9.0.tar.gz 2.进入解压后的目录 cd ansible-2.9.0 2. pyhton3 setup.py build 构建源码包 3. python3 setup.py install 安装源码包
二:ansible的主机清单和配置文件详解
1:概念
主机清单就是ansible管理的主机或者主机组,管理里面的主机,没有写上的,不能管理
2:设置主机清单(/etc/ansible/hosts)
主机清单有很多的写法
1、通过ip来定义的
直接写ip即可
2、通过主机名
[root@server ~]# cat /etc/ansible/hosts 172.25.250.20 client client1
3、通过主机组来定义
就是包含多个主机
[root@server ~]# cat /etc/ansible/hosts 172.25.250.20 client client1 [server] client1 client
4、主机组嵌套定义
要是用children来定义
[root@server ~]# cat /etc/ansible/hosts 172.25.250.20 client client1 [c] client1 client [server:children] c
5、定义主机的范围
如果被控节点是主机名是有规律的话,可以使用这个范围
[root@server ansible]# cat hosts 172.25.250.20 client client1 [c] client1 client [server:children] c www.[a:c].com
3:查看主机清单
1、直接查询
ansible node1 --list-hosts 单个主机查询 ansible node1,node2 --list-hosts 多个主机查询 ansible webserver --list-hosts 主机组查询 ansible ungrouped --list-hosts 查询不属于任何主机组的主机
2、通配符查询
ansible exam* --list-hosts 查看以exam开头的所有主机 ansible *com --list-hosts 查看以com结尾的所有主机 ansible *ple* --list-hosts 查看存在ple的所有主机
3、正则查询
ansible '~^(e|t)' --list-hosts 正则查询,以e或者t开头的主机 ansible 'webserver,!mysqlserver' --list-hosts 取反 ansible 'webserver,&mysqlserver' --list-hosts 取交集 逻辑与 ansible 'userserver,&webserver,!mysqlserver' --list-hosts 组合使用
4、limit限制
ansible all --limit @hosts.txt --list-hosts 通过主机文件来查询(主机文件中的主机必须在 hosts主机清单中有) ansible all --limit node1 --list-hosts 在所有的主机里面查询node1主机
4:ansible.cfg文件优先级
环境变量--->>当前目录的配置文件---->>>用户家目录下的ansible.cfg---->>>/etc/ansible/ansible.cfg
依次从高到低
5:ansible.cfg配置文件详解
[defaults] 远程登录的用户、密码(密钥)、远程端口等 [inventory] 与主机清单相关的配置 是不是要设置主机清单的变量,配置主机清单的路径 [privilege_escalation] 提权相关的配置项 普通用户进行连接,要提权到哪个用户 提权的方式?是不是sudo [paramiko_connection] ansible管控被控节点的连接,后面都使用了ssh进行管控 [ssh_connection] ssh连接项 定义SSH的版本,端口,身份验证方式,加速器 [persistent_connection] 持久化连接的配置项 定义多久时间没有任务执行,则退出连接 [accelerate] 加速模式配置 是否要对数据进行压缩加速 传输 [selinux] SELinux相关配置项 selinux是否开启? [colors] ansible命令输出提示的颜色 [diff] 在运行ansible命令的时候,是否打印变更前和变更后差异
三:ansible基本配置
[default] inventory = /etc/ansible/hosts #定义主机清单的路径 ask_sudo_pass = false #使用sudo的时候,不输入密码 ask_pass = false #使用密钥进行验证 remote_user = devops #登录到被控节点的用户为devops [privilege_escalation] become = true #是否进行提权 become_method = sudo #提权的方式是什么 become_user = root #提权到的用户是什么 become_ask_pass = false #提权的时输入密码吗 #映射 [root@server ansible]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.25.250.10 server 172.25.250.20 client #在被控节点上创建devops用户,并且发送密钥给devops用户,进行提权 [root@server ansible]# ssh root@client useradd devops The authenticity of host 'client (172.25.250.20)' can't be established. ED25519 key fingerprint is SHA256:t6Zf1PYsUmDXG5LuUFM2JfwCfALpTonT4kuGnaGCaaI. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'client' (ED25519) to the list of known hosts. root@client's password: [root@server ansible]# ssh root@client "echo "000000" | passwd --stdin devops" root@client's password: Changing password for user devops. passwd: all authentication tokens updated successfully. #密钥 [root@server ansible]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:aPxuLk7kdeaEXxFj5kjuIGZZfBByEoGPD9X4KYF1PVY root@server The key's randomart image is: +---[RSA 3072]----+ | +***+..E | | o +Boo== o | | +=o.+o.o | | o+ooo+ . | | o=.S = . | | +.o * . | | o . o | | .... | | ..+o | +----[SHA256]-----+ [root@server ansible]# ssh-copy-id devops@client /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys devops@client's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'devops@client'" and check to make sure that only the key(s) you wanted were added. #对devops用户进行提权 [root@server ansible]# ssh root@client "echo 'devops ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers" root@client's password: #编写主机清单文件 [root@server ansible]# cat hosts client #进行测试 [root@server ansible]# ansible all -m ping [DEPRECATION WARNING]: Distribution rhel 9.0 on host client should use /usr/libexec/platform-python, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. client | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
四:ansible中的参数详解
[defaults] inventory = /etc/ansible/hosts ##定义主机清单的 remote_user = devops #被控节点登录的用户 deprecation_warnings=False ##警告不提醒 ask_pass = False ##连接远程主机的时候不需要输入密码 host_key_checking = True ##在连接远程主机的时候,检查密钥 [privilege_escalation] ##提权相关的配置 become=True ##是否提权 become_method=sudo ##提权的方式为sudo become_user=root ##提权到用户为root become_ask_pass=False ##提权的时候,不用输入密码
热门相关:豪门24小时:吻别霸道前夫 逍遥小书生 无敌大佬要出世 如意小郎君 九星之主