原理
Ansible 的工作原理是通过一台安装并配置了 Ansible 组件的主机(称为 Ansible 控制节点
)来配置客户端机器(称为受管节点
)。
通过 SSH 通道进行通信,从远程系统获取信息、发布命令和复制文件。任何可以通过 SSH 管理的计算机,都可以通过 Ansible 进行管理。
Ansible 采用模块化方法,可以扩展主系统的功能,以应对特定场景。模块可以用任何语言编写,并以标准 JSON 进行通信。
Ansible 可以通过命令行工具或配置脚本(称为 Playbooks)与主机交互。
1. 安装 Ansible(On ubuntu 18.04)
- 安装
software-properties-common
软件包.
该软件将使管理这个软件库和其他独立软件库变得更容易
|
|
- 然后输入以下命令来添加 Ansible PPA
PPA(Personal Package Archive): 个人软件包存档, 是 Ubuntu 系统中的概念。
PPA
提供了一种方便的方式来安装、更新和管理非官方的软件包,从而扩展了 Ubuntu 的软件生态系统。但用户需要自行评估软件包的可信度和稳定性,以确保安全和稳定性。
|
|
- 安装 Ansible
|
|
2. 配置与ansible节点的SSH免密
3. ansible 注意
- ansible 主机需要安装 pip install netaddr,因为 playbook 依赖
- ansible 主机需要安装 apt install sshpass ,因为使用密码连接
- ansible 主机需要安装 apt install zip unzip 因为 playbook 需要解压文件
- ansible 主机需要配置 ansible 的
host_key_checking
(/etc/ansible/ansible.cfg)为False
,因为所有主机都是第一次连接,还没有主机指纹在known_hosts
中,需要忽略
4. 测试Ansible-Hosts连通性方法
vi /etc/ansible/hosts
追加以下内容,IP地址即为要测试的机器
|
|
- 执行以下命令,用
ping
模块进行测试。test
为上面为hosts配置的主机组名字。
|
|
5. Ansible 的一些约定
inventory 主机清单
-i
参数指定主机清单。例如ansible-playbook -i inventory.py nomad.yaml
1.1 静态inventory,通过静态配置文件
inventory.json
配置。1.2 动态inventory,通过动态生成脚本
inventory.py
生成。roles目录必须与playbook文件同级,并且文件夹名必须为
roles
。playbook文件中通过roles
下的各个文件夹名字引用role
例如1 2 3 4 5 6
- name: install mirrors and initialization hosts: all roles: # roles/ - yum-mirrors # |-- yum-mirrors/ - initialization # |-- initializations/ - docker-registry # |-- docker-registry/
单个role目录结构说明。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
. ├── install_nginx.yml # playbook 文件和 roles 目录应该处于平级目录 └── roles # 存放所有角色的的目录 └── nginx # nginx 角色 │ ├── defaults # 设定默认变量 │ │ └── main.yml │ ├── files # 存放由 copy 或 script 模块等调用的文件 │ │ └── index.html │ ├── handlers # 触发器任务 │ │ └── main.yml │ ├── meta # 定义当前角色的特殊设定及其依赖关系 │ ├── tasks # 定义任务,它是 role 的基本元素 │ │ └── main.yml │ ├── templates # templates 模块查找所需要模板文件的目录 │ │ └── nginx.conf.j2 │ └── vars # 定义变量 │ └── main.yml └── php # php 角色 └── ...
playbook文件的定义中,优先级:
role
>task
; 如果task-A
必须要在某role-B
之前执行,需要将task-A
封装为role-A
,放到role-B
之前。task
中常用的模块模块名称 作用 ping 检查指定节点机器是否还能连通 command 执行命令模块,可以不填,是ansible默认的模块,命令中无法使用变量,管道。 shell 启动一个子shell执行命令,执行的命令中有管道或者变量,就需要使用shell模块。 script 将本机的shell脚本在被管理主机运行 copy 将本机复制文件到远程位置 service 用于控制远程主机的服务 cron 用于管理定时任务 file 用于远程主机上的文件操作 yum 使用yum包管理器来管理软件包 user、group user、goup分别请求:useradd、userdel、usermod;groupadd、groupdel、groupmod filesystem 在块设备上创建文件系统 get_url 下载文件 synchronize 同步文件模块