ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Ansible安装入门

2020-08-19 21:02:03  阅读:221  来源: 互联网

标签:入门 主机 ansible Ansible srv ssh 安装 name


Ansible安装与配置(自动化运维管理工具)
原创 2016年06月02日 18:35:01

    标签:
    ansible /
    运维管理 /
    python

原文链接:http://blog.csdn.net/xyang81/article/details/51568227

    Ansible是一个简单高效的自动化运维管理工具,用Python开发,能大批量管理N多台机器,可以并发的在多台机器上部署应用、安装软件、执行命令、配置和编排任务。

一、Ansible工作机制

ansible架构图

 

 

从图中可以看出ansible分为以下几个部份:

1> Control Node:控制机器
2> Inventory:主机清单,配置管理主机列表
3> Playbooks:剧本、任务编排。根据规则定义多个任务,模块组织结构清晰,由ansible自动执行。
4> Modules(Core | Custom):模块,用于执行某个具体的任务
5> connection plugin(连接插件):Ansible通过不同的协议连接到远程主机上,执行指定的命令。默认采用ssh协议连接远程主机。
二、Ansible执行流程

Ansible执行流程
简单理解就是Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。
三、安装Ansible

一台控制主机:192.168.0.202

三台管理主机:

    192.168.0.200
    192.168.0.201
    192.168.0.203

安装要求:

    控制服务器:需要安装 Python2.6/2.7
    管理服务器:需要安装 Python2.4 以上版本,若低于 Python2.5 需要安装 pythonsimplejson; 若启用了 selinux,则需要安装 libselinux-python。

本次安装基于CentOS7系统环境、Python2.7.5、root用户。
3.1、yum安装(推荐)

yum install epel-release
yum install ansible

3.2、pip安装

pip install ansible

注:pip方式安装不会在/etc/ansible目录下生成默认的相关配置文件
四、配置

控制主机:用于控制其它机器的主机
管理主机:被控制主机管理的主机
4.1、配置管理主机

vim /etc/ansible/hosts

在hosts文件中添加管理主机的IP地址列表:

配置管理主机
4.2、配置控制主机SSH密钥
4.2.1、在控制主机中生成ssh密钥对

ssh-keygen -t rsa

一路回车即可在$HOME/.ssh目录下生成id_rsa和id_rsa.put私钥和公钥两个文件。

注: 如果在生成密钥的时候设置了密码,ansible每次执行命令的时候,都会提示输入密钥密码,可通过下面的命令记住密码。

ssh-agent bsh
ssh-add ~/.ssh/id_rsa

4.2.2、将公钥拷贝到管理主机中.ssh/authorized_keys文件中,实现免密码登录远程管理主机

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.200
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.201
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.203

注:ssh-copy-id命令会自动将id_rsa.pub文件的内容追加到远程主机root用户下.ssh/authorized_keys文件中。
4.2.3、ansible配置

vim /etc/ansible/ansible.cfg


1> 禁用每次执行ansbile命令检查ssh key host
host_key_checking = False

2> 开启日志记录
log_path = /var/log/ansible.log

3> ansible连接加速配置

[accelerate]
#accelerate_port = 5099
accelerate_port = 10000 
#accelerate_timeout = 30
#accelerate_connect_timeout = 5.0

# If set to yes, accelerate_multi_key will allow multiple
# private keys to be uploaded to it, though each user must
# have access to the system via SSH to add a new key. The default
# is "no".
accelerate_multi_key = yes

五、测试

最后测试下在三台管理机器批量执行一个ping命令

 ansible all -m ping

结果如下:

ansible all -m ping运行结果

从上图可以看出,在每台管理机器上都成功执行了ping命令。

一些Ansible深入功能的学习资料:
http://blog.xiaorui.cc/category/ansible/
http://lixcto.blog.51cto.com/4834175/d-4
https://github.com/ansible/ansible-examples
http://rfyiamcool.blog.51cto.com/1030776/d-51
http://dl528888.blog.51cto.com/2382721/d-4/p-1
http://edu.51cto.com/course/course_id-2220.html
http://edu.51cto.com/course/course_id-2032.html

 

 

ansible 配置文件
ansible 配置文件/etc/ansible/ansible.cfg (一般保持不变)
[defaults]
#inventory  = /etc/ansible/hosts     #主机列表配置文件
#library = /usr/share/my_modules/     #库文件放目录
#remote_tmp  = $HOME/.ansible/tmp     # 临时py命令文件存放的远程主机目录
#local_tmp =  $HOME/.ansible/tmp    # 本机的临时命令执行目录
#forks = 5        # 默认并发数
#sudo_user = root     # 默认sudo  用户
#ask_sudo_pass = True    #每次执行ansible命令是否询问ssh密码
#ask_pass  = True
#remote_port = 22
#host_key_checking = False   # 检查对应服务器的host_key, 建议取消注释
#log_path = /var/log/ansible.log   #日志文件   建议取消注释

Ansible
ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点
ansible <host-pattern> [-m  module_name] [-a args]
-=-version    显示版本
-m module    指定模块,默认为command
-v    详细过程 -vv -vvv更详细
--list-hosts    显示主机列表,可简写为--list
-k, --ask-pass    提示输入ssh链接密码,默认key验证
-K,  --ask-become-pass    提示输入sudo时的口令
-C, --check    检查,并不执行
-T, --timeout=TIMEOUT    执行命令的超时时间,默认为10s
-u,  --user=REMOTE_USER    执行远程执行的用户
-b,  --become    代替旧版的sudo切换

Ansible的Host- 
逻辑与
ansible    "websrvs:&dbsrvs"  -m ping
在websrvs组并且在dbsrvs组的主机
逻辑非
ansible  'websrvs:!dbsrvs'  -m ping
在websrvs组但是不在dbsrvs组中的主机
注意:此处为单引号
综合逻辑
ansible    'websrvs:dbsrvs:&appsrvs:!ftpsrvs'  -m ping
正则表达式
ansible   "websrvs:&dbsrvs"  -m ping
ansible   "~(web|db).*\.magedu\.com"   -m ping

Ansible命令执行过程
ansible命令执行过程
加载自己的配置文件默认/etc/ansible/ansible.cfg
加载自己对应的模块文件,如command
通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/xxx.py文件
给文件+x执行
执行返回结果
删除临时py文件,sleep 0退出
执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败

Ansible常用模块
Command:在远程主机执行命令,默认模块,可忽略-m选项
ansible  websrvs  -m command -a  'service  vsftpd start'
ansible  websrvs  -m command  -a 'echo  magedu | passwd --stdin wang'不成功
此命令不支持$VARNAME <> | ; &等,用shell模块实现
Shell:和command相似,用shell执行命令
ansible  websrvs -m shell -a 'echo magedu |  passwd --stdin  wang'
调用bash执行命令 类似cat /tmp/stanley.md  | awk -F'|' '{print $1,$2}' &> /tmp/example.txt      这些复杂命令,即使使用shell也可能会失败,解决办法:写脚本时,copy到远程,执行,再把需要的结果拉回来执行命令的机器
script:运行脚本
-a "/PATH/TO/SCRIPT_FILE"
ansible  websrvs -m script -a f1.sh
Hostname:管理主机名
ansible  node1  -m hostname -a "name=websrv"
Cron:计划任务
支持时间:minute,hour, day, month, weekday
ansible srv  -m cron -a 'minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=synctime''创建任务
ansible  srv  -m cron -a 'state=absent name=synctime‘ 删除任务
Yum:管理包
ansible  srv  -m yum -a 'name=httpd state=latest' 安装
ansible  srv  -m yum -a 'name=httpd state=absent' 删除

Copy:从服务器复制文件到客户端
ansible srv  -m copy -a "src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600 backup=yes"
如目标存在,默认覆盖,此处指定先备份
ansible srv -m copy -a "content='test content\n' dest=/tmp/f1.txt" 利用内容,直接生成目标文件
Fetch:从客户端取文件到服务端,copy相反,目录可先tar
ansible  srv -m fetch  -a 'src=/root/a.sh dest=/data/scripts'
File:设置文件属性
ansible  srv -m file -a 'path=/root/a.sh owner=wang mode=755'
ansible  web  -m file -a 'src=/app/testfile  dest=/app/testfile-link state=link'
service:管理服务
ansible srv -m service -a 'name=httpd state=stopped'
ansible srv -m service -a 'name=httpd state=started'
ansible srv -m service -a 'name=httpd state=reloaded'
ansible srv -m service -a 'name=httpd state=restart'
User:管理用户
ansible srv -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1'
ansible srv -m user -a 'name=user1 state=absent remove=yes'  删除用户及家目录
Group:管理组
ansible srv -m group -a 'name=testgroup system=yes'
ansible srv -m group -a 'name=testgroup state=absent'

Ansible系列命令
Ansible系列命令
ansible  ansible-doc ansible-playbook  ansible-vault
ansible-console  ansible-galaxy    ansible-pull
Ansible显示模块帮助
ansible-doc  [options] [module...]
-a        显示所有模块的文档
-l, --list    列出可用的模块
-s, --snippet 显示模块的playbook片段
显示:
ansible-doc  -l    列出所有模块
ansible-cod  ping    查看指定模块帮助用法
ansible-doc  -s ping       查看指定模块帮助用法

Ansible系列命令
ansible-galaxy
链接https://galaxy.ansible.com下载相应的roles
列出所有已安装的galaxy
ansible-galaxy list
安装galaxy
ansible-galaxy install geerlingguy.redis
删除galaxy
ansible-galaxy remove geerlingguy.redis

Ansible系列命令
ansible-pull
推送命令至远程,效率无线提升,对运维要求较高
Ansible-playbook
ansible-playbook hello.yml

cat hello.yam
#hello world ymnl fille
- hosts:websrvs
  remote_user:root
  tasks:
     - name:hello world
       command:/usr/bin/wall hello world

 

标签:入门,主机,ansible,Ansible,srv,ssh,安装,name
来源: https://www.cnblogs.com/hanshengli/p/13531849.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有