本文介绍Ansible的安装、部署和使用。Ansible是一种开源软件,通过声明性语言提供配置管理和应用程序部署等功能。
介绍
- Python 实现
Paramiko(远程)
、PyYAML(配置)
、Jinja2(模板语言)
三个关键模块组成
- 安全,基于OpenSSH
- 支持playbook编排任务
- 幂等性:一个任务执行1遍和执行n遍效果是相同的
- 运行原理
- Galaxy NG 是一个Ansible内容公共资源库,分享和管理 ansible role、playbook 等
基本概念
hosts
执行的远程主机列表tasks
任务集合varniables
内置变量或自定义变量,在playbook
中调用templates
模板,可替换模板中的变量并实现一些简单的逻辑的文件tags
标签,制定某条任务执行,用户选择运行playbook中的部分代码
安装
$ apt install python3-pip -y
$ pip3 install ansible
$ ansible --version
ansible [core 2.13.8]
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.8.10 (default, Mar 13 2023, 10:26:41) [GCC 9.4.0]
jinja version = 3.1.2
libyaml = True
dnf install ansible -y
ansible --version
示例环境
基于Docker创建的容器
主机情况
Hostname | IP | Role |
---|
dev | 172.17.0.2 | ansible server |
h-1 | 172.17.0.3 | ansible client |
h-2 | 172.17.0.4 | ansible client |
h-3 | 172.17.0.5 | ansible client |
/etc/hosts
所有主机配置
$ cat /etc/hosts
172.17.0.3 h-1
172.17.0.4 h-2
172.17.0.5 h-3
配置 ssh 免密
在 ansible server
主机上执行
# 生成 key
ssh-keygen -t ed25519
# 分发 key
ssh-copy-id h-1
ssh-copy-id h-2
ssh-copy-id h-3
配置 ansible hosts
172.17.0.3
172.17.0.4
172.17.0.5
ping 测试
$ ansible all -m ping
172.17.0.5 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
172.17.0.3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
172.17.0.4 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
UI