Ansible的基本配置

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: Ansible的基本配置

Ansible的基本配置

目录

定义主机和组

在使用ansible来批量管理主机的时候,通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做Inventory,也叫做主机清单,该文件默认位于/etc/ansible/hosts(如果是pip安装则没有)

当然我们也可以通过修改ansible的配置文件来修改默认使用的主机清单

主机的定义

  • 主机部分可以使用域名,主机名,IP地址来定义;使用前2者时,需要主机能够解析到对应的IP地址
[devops@node1 ~]$ cat hosts
node1
node2
node1.example.com
node2.example.com
192.168.200.100
192.168.200.200

我们可以看到,现在主机清单里面是写了node1(主机名),node1.example.com(域名),192.168.200.100(IP地址),这三种定义方式都是可以的,但是你要想管理的话,主机名和域名必须是有对应的解析的

这种方式是一个个定义,我们还可以指定范围,比如

[devops@node1 ~]$ cat hosts
192.168.200.[1:10]
# 通过命令来查看当前被定义的主机是哪些
# ansible all --list就是列出主机清单内的全部主机
[devops@node1 ~]$ ansible all --list
  hosts (10):
    192.168.200.1
    192.168.200.2
    192.168.200.3
    192.168.200.4
    192.168.200.5
    192.168.200.6
    192.168.200.7
    192.168.200.8
    192.168.200.9
    192.168.200.10

可以看到,他确实是我们定义的那样从1-10这个IP地址范围

主机组的定于

主机的定义就是直接讲被管理的节点写入到主机清单内,而主机组的定义是需要加上一个[组名]的

[devops@node1 ~]$ cat hosts
[webserver]
node1
node2

中括号里面写的就是组名,下面的内容就是这个组内有哪些主机

同样我们可以通过组名来查看组内有哪些主机

# 注意,我之前写的是ansible all --list
# 这里写的是webserver,也就是主机组的名字,所以他只会列出这个主机组内的成员
[devops@node1 ~]$ ansible webserver --list
  hosts (2):
    node1
    node2

如果有多个主机组,那么就可以写多个中括号,一个主机可以隶属于不同主机组

[devops@node1 ~]$ cat hosts
[webserver]
node1
node2
[sqlserver]
node2
node3
[devops@node1 ~]$ ansible all --list
  hosts (3):
    node1
    node2
    node3

这里不知道你有没有疑问,那我主机和主机组同时定义的时候,位置是随意的吗?不是!

单个主机只能写在主机组之前,如果你写在主机组之后,不管你空多少行,他都会认为你这个主机是属于这个组内的,来看例子

现在我想定义一个单个主机192.168.1.1

从截图我们可以看到,这个192.168.1.1与主机组sqlserver之前是空了很多行的,我们通过命令来查一下看看

# 我们直接来查sqlserver主机组内有哪些成员
[devops@node1 ~]$ ansible sqlserver --list
  hosts (3):
    node2
    node3
    192.168.1.1

看到了吗,sqlserver主机组内是包含这个主机的,那我们将这个主机提前到所有主机组之前

我们再来查一下

[devops@node1 ~]$ ansible sqlserver --list
  hosts (2):
    node2
    node3
# 通过这个命令可以查到不属于任何主机组的主机
[devops@node1 ~]$ ansible ungrouped --list
  hosts (1):
    192.168.1.1

现在他被定义成了一个单个主机

主机组的嵌套

主机组的嵌套是什么呢?我们可以这样来想象,假设你现在管理2个机房的服务器,现在你需要对机房1的所有服务器进行软件升级,这个时候你怎么去选择机房1呢?我们可以通过主机嵌套来解决

[devops@node1 ~]$ cat hosts
192.168.1.1
[webserver]
node1
node2
[sqlserver]
node2
node3
[MachineRoom:children]
webserver
sqlserver

就是这样定义的,[MachineRoom:children],也就是说MachineRoom下面有哪些孩子嘛,它下面有webserver组和sqlserver组,这2个组就代表着机房1,所以我需要对机房1进行操作的话我就可以直接选择Machine这个组就可以了

[devops@node1 ~]$ ansible MachineRoom --list
  hosts (3):
    node1
    node2
    node3

选择主机和组

上面我们说到了定义主机和主机组,定义完了之后我们如何去选择呢?上面也提到了一些,选择我们来看如果更精准的选择

匹配主机

# 或者执行ansible all --list-hosts是一样的
[devops@node1 ~]$ ansible all --list
  hosts (4):
    192.168.1.1
    node1
    node2
    node3
  1. 匹配指定的主机或组
# 匹配单个主机
[devops@node1 ~]$ ansible 192.168.1.1 --list
  hosts (1):
    192.168.1.1
# 配置主机组
[devops@node1 ~]$ ansible webserver --list
  hosts (2):
    node1
    node2
# 匹配多个主机,这种方式可以选择多个,只需要用逗号隔开就行
[devops@node1 ~]$ ansible 192.168.1.1,webserver --list
  hosts (3):
    192.168.1.1
    node1
    node2
# 匹配不属于任何主机组的主机
[devops@node1 ~]$ ansible ungrouped --list
  hosts (1):
    192.168.1.1

使用通配符匹配

先改一个hosts文件内容

[devops@node1 ~]$ cat hosts
192.168.1.1
node1.example.com
node2.example.com
[webserver]
node1
node2
[sqlserver]
node2
node3

使用通配符匹配

# 匹配所有以.example.com结尾的主机
[devops@node1 ~]$ ansible *.example.com --list
  hosts (2):
    node1.example.com
    node2.example.com
# 匹配所有.example.com结尾的主机但是不匹配node2开头的主机,这种情况需要使用引号,如果不使用引号终端会将!当作历史命令给执行的
[devops@node1 ~]$ ansible '*.example.com,!node2*' --list
  hosts (1):
    node1.example.com

配置文件优先级

ansible的配置文件也是有优先级的,他一般会存在4个地方

  1. ANSIBLE_CONFIG:首先,Ansible命令会检查这个环境变量以及指向的配置文件,优先级最高
  2. ./ansible.cfg:当前目录下的ansible.cfg,如果ANSIBLE_CONFIG环境变量不存在,那么就会使用这个
  3. ~/.ansible.cfg:当前用户家目录下的一个隐藏文件,如果当前目录下没有ansible.cfg文件,就会检查这个隐藏文件是否存在
  4. /etc/ansible/ansible.cfg:默认的配置文件,如果以上所有的配置文件都不存在,则会使用这个

配置文件详解

配置文件段

ansible.cfg的配置迷人分为十段:

[defaults] 通用配置项目

[inventory] 与主机清单相关配置

[privilege_escalation] 特权升级相关配置

[paramiko_connection] 使用paramiko连接的相关配置

[ssh_connection] 使用openssh连接的相关配置

[persistent_connection] 持久连接的配置项

[accelerate] 加速模式相关配置

[selinux] selinux相关配置

[color] ansible命令输出的颜色相关配置

[diff] 是否再运行时打印diff (变更前与变更后的差异)

配置文件参数说明

[defaults]
inventory = /etc/ansible/hosts
ask_pass = false
remote_user = root
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = False

这些配置我们一行行来看

  1. inventory: 定义默认使用的主机清单,当前是使用的/etc/ansible/hosts,可以将他修改成你想用的那个文件
  2. remote_user:ansible在操作远程主机时,使用远程主机上的哪个用户身份,默认是root,为了安全可以使用一个普通用户
  3. ask_pass:在操作远程主机时,登录时是否输入密码,默认为true。如果使用密钥认证,将这里设置为false
  4. become:是否提权
  5. become_method:如果使用提权,将以何种方式提权,默认时sudo
  6. become_user:提权到哪个用户,默认提权到root
  7. become_ask_pass:提权是否需要输入密码,默认为False

配置案例

前置条件,配置hosts映射,所有节点都要做

主机 IP 主机名
node1 192.168.100.210 node1
kvm 192.168.100.220 node2
echo "192.168.100.210 node1" >> /etc/hosts
echo "192.168.100.220 node2" >> /etc/hosts

需求,使用普通用户devops去操作主机,devops使用密钥验证,可以免密提权到root

1. 在节点上创建一个普通用户devops,并设置密码123

[root@node1 ~]# useradd devops
[root@node1 ~]# echo 123|passwd --stdin devops
[root@kvm ~]# useradd devops
[root@kvm ~]# echo 123|passwd --stdin devops

2. 配置sudo提权

[root@node1 ~]# cat /etc/sudoers.d/devops 
devops ALL=(root) NOPASSWD:ALL
[root@kvm ~]# cat /etc/sudoers.d/devops 
devops ALL=(root) NOPASSWD:ALL

3. 配置管理节点免密登录到被管节点

[root@node1 ~]# su - devops
[devops@node1 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/devops/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/devops/.ssh/id_rsa.
Your public key has been saved in /home/devops/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:eUVPHb1laerU/LB+EDBFHu8nrtjz9jE91cZ2SditO8Y devops@node1.example.com
The key's randomart image is:
+---[RSA 3072]----+
|            .o=o+|
|           .o+o=*|
|            .+B+=|
|         . . o+Bo|
|        S . o o=@|
|         .   +o=*|
|             .E=.|
|           o.oo.=|
|          . o+.o.|
+----[SHA256]-----+
# 将公钥发送到被管节点
[devops@node1 ~]$ ssh-copy-id node1
[devops@node1 ~]$ ssh-copy-id node2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/devops/.ssh/id_rsa.pub"
The authenticity of host 'node2 (192.168.100.220)' can't be established.
ECDSA key fingerprint is SHA256:sH7gqZEak7Xap0VARUzaZJXrr2y4RE2ds40WKMoCspw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
devops@node2's password: # 这里输入密码
Now try logging into the machine, with:   "ssh 'node2'"

4. 配置

# 1. 将配置文件拷贝到普通用户家目录下
[devops@node1 ~]$ cp -r /etc/ansible/ .
[devops@node1 ~]$ ls
ansible
# 2. 进入目录修改配置
[devops@node1 ~]$ cd ansible/
[devops@node1 ansible]$ ls
ansible.cfg  hosts  roles
# 最后将配置文件修改成这样就行
[devops@node1 ansible]$ cat ansible.cfg
[defaults]
inventory      = ./hosts
sudo_user      = devops
ask_sudo_pass = False
ask_pass      = False
host_key_checking = False
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

5. 写主机清单

[devops@node1 ansible]$ cat hosts 
node1
node2

6. 验证配置是否生效

[devops@node1 ansible]$ ansible all --list
  hosts (2):
    node1
    node2
[devops@node1 ansible]$ ansible all -m shell -a 'whoami'
node2 | CHANGED | rc=0 >>
root
node1 | CHANGED | rc=0 >>
root

我们可以看到,node1和node2上都执行成功了,并且返回的结果时root,说明提权也是配置正确的

这就是ansible的基本配置了

本文来自博客园,作者:FuShudi,转载请注明原文链接:https://www.cnblogs.com/fsdstudy/p/18030956

分类: Ansible

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
4月前
|
运维 应用服务中间件 nginx
自动化运维的利剑:Ansible Role 打造标准化配置
【8月更文挑战第31天】在追求效率和稳定性的今天,自动化运维不再是奢侈品,而是必需品。Ansible Role,作为自动化配置管理的利器,它如何帮助我们实现标准化部署和维护?本文将通过一个简单示例,带你了解 Ansible Role 的魅力所在,并探讨其在现代 IT 架构中的应用价值。
|
4月前
|
JSON 运维 Linux
在CentOS 7上安装和配置Ansible的方法
在CentOS 7上安装和配置Ansible的方法
202 0
|
7月前
|
运维 关系型数据库 MySQL
Ansible自动化运维工具主机清单配置
Ansible自动化运维工具主机清单配置
198 0
|
Kubernetes Linux 持续交付
在 Alibaba Cloud Linux 上搭建并配置 Ansible
本场景简单介绍了在Alibaba Cloud Linux上安装并配置Ansible的方式。
|
Linux 网络安全 数据安全/隐私保护
在 Alibaba Cloud Linux 上配置 Ansible
本场景是在 Alibaba Cloud Linux 上配置 Ansible
|
网络协议 网络安全 数据安全/隐私保护
Ansible模块介绍——配置网络模块、上传下载文件模块
Ansible模块介绍——配置网络模块、上传下载文件模块
404 0
|
运维 安全 算法
金鱼哥RHCA回忆录:DO447Ansible Tower的维护和常规管理--配置TLS/SSL
第十四章 Ansible Tower的维护和常规管理--配置TLS/SSL
190 0
金鱼哥RHCA回忆录:DO447Ansible Tower的维护和常规管理--配置TLS/SSL
【初始环境】ansible配置/免密登录配置
文章目录 前言 一、ansible 二、结语
354 0
|
运维 关系型数据库 Shell
【运维】Ansible 自动化运维工具配置及模块使用
【运维】Ansible 自动化运维工具配置及模块使用
2105 2
【运维】Ansible 自动化运维工具配置及模块使用
|
Shell 网络安全 数据安全/隐私保护
ansible主机清单配置以及变量解释(二)
1.配置ansible主机清单 清单文件位于/etc/ansible/hosts
575 0
ansible主机清单配置以及变量解释(二)