Ansible 实记
自动化运维工具 Ansible
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
首先安装
Ansible安装
ansible的安装方法有多种
EPEL源的rpm包安装:
[root@ansible ~]#yum install ansible
编译安装
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
Git方式
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
pip 安装
pip 是安装Python包的管理器,类似 yum
yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
pip install --upgrade pip
pip install ansible --upgrade
确认安装
[root@ansible ~]#ansible --version
ansible 2.9.5
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]
##ansible目录结构
## 以下为安装 docker 及 docker-compose 的ansible-playbook 直接上干货
[root@docker ansible]# tree
.
├── ansible.cfg
├── hosts
├── roles
│ ├── docker
│ │ ├── files
│ │ ├── handlers
│ │ │ └── main.yaml
│ │ ├── meta
│ │ ├── tasks
│ │ │ └── main.yaml
│ │ ├── templates
│ │ │ └── daemon.json.j2
│ │ └── vars
│ │ └── main.yaml
│ └── docker-compose
│ ├── files
│ │ └── docker-compose-Linux-x86_64
│ ├── handlers
│ ├── meta
│ ├── tasks
│ │ └── main.yaml
│ ├── templates
│ └── vars
│ └── main.yaml
└── work_dir
├── install_docker-compose.retry
├── install_docker-compose.yaml
├── install_docker.retry
└── install_docker.yaml
##解释各个目录作用
[root@docker docker]# tree
.
├── files 必要的一些需要的文件存放目录
├── handlers
│ └── main.yaml handler处理的动作
├── meta 元数据存放的一些依赖
├── tasks
│ └── main.yaml 主要执行的任务
├── templates
│ └── daemon.json.j2 一些配置文件的存放
└── vars
└── main.yaml 变量设置的存放目录
[root@docker docker]# cat tasks/main.yaml
- name: install required packages
yum:
name: "{{ item }}" 需要进行安装的一些包名
state: present 安装的包的状态
with_items: 对应上面的item(可以循环操作)
- yum-utils
- device-mapper-persistent-data
- lvm2
- name: add docker repo to /etc/yum.repos.d
shell: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
register: result 将shell的操作结果注册为result
- name: install docker-ce
yum:
name: docker-ce
state: present
when: result|success 如果上面的result为success,则该任务执行
- name: create /etc/docker
file:
path: "{{ docker_config_dir }}" 利用file模块进行创建一个目录,引用变量
state: directory
- name: start docker service
systemd: centos7开启服务,添加到启动项
name: docker
state: started
enabled: true
- name: provide docker-ce configfile
template:
src: daemon.json.j2 提供配置文件
dest: /etc/docker/daemon.json
notify: restart docker 配置文件修改了触发通知机制,提醒handler
[root@docker docker]# cat handlers/main.yaml
- name: restart docker
systemd:
name: docker
state: restarted 触发机制后,将服务进行重启
enabled: true
[root@docker docker]# cat vars/main.yaml
docker_config_dir: /etc/docker
[root@docker docker]# cat templates/daemon.json.j2
{
"registry-mirrors": ["https://cbd49ltj.mirror.aliyuncs.com"]
}
[root@docker work_dir]# tree
.
├── install_docker-compose.retry
├── install_docker-compose.yaml
├── install_docker.retry
└── install_docker.yaml
[root@docker work_dir]# cat install_docker.yaml
- hosts: container_nodes 对应hosts配置文件的两个节点
remote_user: root 执行使用root用户
roles:
- docker 针对的role名称
[root@docker work_dir]# ansible-playbook install_docker.yaml --syntax-check
playbook: install_docker.yaml
[root@docker work_dir]# ansible-playbook install_docker.yaml
##以下为安装 docker-compose的 ansible-playbook
[root@docker docker-compose]# tree
.
├── files
│ └── docker-compose-Linux-x86_64 docker-compose的二进制文件
├── handlers
├── meta
├── tasks
│ └── main.yaml
├── templates
└── vars
└── main.yaml
[root@docker docker-compose]# cat tasks/main.yaml
- name: copy docker-compose-Linux-x86_64 to /usr/local/bin
copy:
src: ../files/docker-compose-Linux-x86_64 这里可以使用相对路径,可以使用绝对路径
dest: "{{ docker_compose_dir }}/docker-compose-Linux-x86_64"
- name: install docker-compose
shell: cd "{{ docker_compose_dir }}" && mv docker-compose-Linux-x86_64 docker-compose && chmod +x docker-compose
[root@docker docker-compose]# cat vars/main.yaml
docker_compose_dir: /usr/local/bin
[root@docker work_dir]# cat install_docker-compose.yaml
- hosts: container_nodes
remote_user: root
roles:
- docker-compose