大家好,欢迎来到IT知识分享网。
文章目录
Ansible自动化运维
一、Ansible简介
ansible自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能,无客户端。
1、工作原理
管理节点management定义主机组,通过SSH连接远程主机,使用功能模块实现对node节点的部署操作。
通过编写playbook来实现较为复杂的项目。
二、Ansible部署
1、环境
ansible域名解析
IP Role
192.168.116.131 ansible
192.168.116.132 host1
192.168.116.133 host2
192.168.116.134 host3
2、安装ansible
# yum -y install ansible
3、定义主机清单
# vim /etc/ansible/ansible.cfg
host_key_checking = False
------------------------------------------------------------------
# vim /etc/ansible/hosts
[web1]
host1
[web2]
host[2:3]
[web:children]
web1
web2
[web:vars]
ansible_ssh_user="root"
ansible_ssh_pass="1"
ansible_ssh_port="22"
------------------------------------------------------------------
# 参数
[web] # 主机组
host1 # 主机
[web:children] # 子分组
[web:vars] # 组变量
ansible_ssh_user="" # 用户变量
ansible_ssh_pass="" # 密码变量
ansible_ssh_port="" # 端口变量
变量表
4、连通测试
# ansible web -m ping -o
---------------------------------------------------------
# 参数
web # 主机组
-m # 模块
ping # ssh探测
-o # 简介输出
---------------------------------------------------------
使用自定义外部主机清单
# ansible -i 文件路径 主机组 -m 模块
三、Ansible模块
Ad-Hoc-点对点模式
①、Shell模块
# ansible web -m shell -a 'hostname' -f 2
# ansible web -m shell -a 'yum -y install httpd' -f 2
---------------------------------------------------------------------------------------
-m # 模块
shell # shell模块
-a # 执行参数
-f # 并发线程数
②、复制模块
# ansible web -m copy -a 'src=/etc/hosts dest=/mnt/1.txt owner=root group=bin mode=777 backup=yes'
---------------------------------------------------------------------------------------
copy # 复制模块
src # 源地址
dest # 目标地址
owner # 属主
group # 属组
backup # 备份(是否覆盖)
③、用户模块
# ansible web -m user -a 'name=lz state=present password="XXX" shell=/sbin/nologin'
---------------------------------------------------------------------------------------
user # 用户模块
name # 用户名
state # 状态 present创建 absent删除
password # 密码 (echo XXX|openssl passwd -1 -stdin)
shell # 登录权限
append=yes # 追加修改
④、Yum模块
# ansible web -m yum -a 'name=httpd state=present'
---------------------------------------------------------------------------------------
yum # 软件模块
name # 软件包名
state # 状态 present安装 latest安装最新版 absent卸载
⑤、服务模块
# ansible web -m service -a 'name=httpd state=started enabled=yes'
---------------------------------------------------------------------------------------
service # 服务模块
name # 程序名
state # 状态 started启动 stopped停止 restarted重启
enabled=yes # 开机自启
⑥、文件模块
# ansible web -m file -a 'path=/mnt/a.txt state=touch'
---------------------------------------------------------------------------------------
file # 文件模块
path # 路径
state # 状态 touch文件 directory目录
⑦、收集模块
# ansible web -m setup -a 'filter=ansible_processor'
---------------------------------------------------------------------------------------
# ansible host3 -m setup # 查询所有模块
setup # 收集模块
filter # 过滤信息
四、YAML语法
YAML Ain’t Markup Language-非标记语言
1、编写剧本
# vim apache.yaml
- hosts: web
tasks:
- name: install httpd package
yum: name=httpd state=present
- name: copy httpd.conf
copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
- name: ensure httpd running
service: name=httpd state=started enabled=yes
handlers:
- name: restart httpd
service: name=httpd state=restarted
-----------------------------------------------------------------------------------
- host: # 针对主机对象
tasks: # 主任务列表
- name: # 任务名
yum: # 任务
notify: # 引用处理程序
handlers: # 定义处理程序
- name: # 任务名
service: # 任务
2、语法检查
# ansible-playbook apache.yaml --syntax-check
# ansible-playbook apache.yaml --list-tasks
# ansible-playbook apache.yaml --list-hosts
3、执行剧本
# ansible-playbook apache.yaml
五、角色扮演
roles则是在ansible中,playbooks的目录组织结构
将代码或文件进行模块化,成为roles的文件目录组织结构
易读,代码可重用,层次清晰
目录结构
nginx 角色名
files 普通文件
handlers 触发器程序
tasks 主任务
templates 金甲模板(有变量的文件)
vars 自定义变量
①、编写剧本
# vim roles/site.yaml
- hosts: web
roles:
- nginx
②、编写主任务
# vim roles/nginx/tasks/main.yaml
---
- name: copy nginx.repo
copy: src=nginx.repo dest=/etc/yum.repos.d/nginx.repo
- name: yum makecache
shell: yum makecache
- name: install epel-release package
yum: name=epel-release state=present
- name: install nginx package
yum: name=nginx state=latest
- name: copy index.html
copy: src=index.html dest=/usr/share/nginx/html/index.html
- name: copy nginx.conf.j2 template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart nginx
- name: ensure nginx service running
service: name=nginx state=started enabled=yes
③、编写触发任务
# vim roles/nginx/handlers/main.yaml
---
- name: restart nginx
service: name=nginx state=restarted
④、配置金甲模板
# cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2
# vim roles/nginx/templates/nginx.conf.j2
...
worker_processes {
{
ansible_processor_cores }};
...
worker_connections {
{
worker_connections }};
⑤、配置变量
# vim roles/nginx/vars/main.yaml
worker_connections: 100
⑥、配置普通文件
# cp /etc/yum.repos.d/nginx.repo roles/nginx/files/nginx.repo
# echo nginx > roles/nginx/files/index.html
⑦、执行剧本
# ansible-playbook site.yaml --syntax-check
# ansible-playbook site.yaml
六、主机清单加密
①、设置加密
# ansible-vault encrypt /etc/ansible/hosts
②、加密编辑
# ansible-vault edit /etc/ansible/hosts --ask-vault-pass
③、加密使用
# ansible web -m ping -o --ask-vault-pass
七、变量设置
- hosts: web
tasks:
- name: useradd abc
user: name={
{
item }} state=present group=wheel
with_items:
- testuser1
- testuser2
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24541.html