设为首页 收藏本站
查看: 2357|回复: 0

[经验分享] Ansible安装配置

[复制链接]

尚未签到

发表于 2018-1-2 14:34:21 | 显示全部楼层 |阅读模式
  1  软件安装
  Ansible是用Python开发的,使用ansible需要操作系统有Python,建议Python版本2.6以上。
  Ansible安装所依赖插件较多,具体安装过程如下:
  注:所有的软件包全部在/usr/local/目录下进行安装
  基本安装
  安装gcc,用于编译Python源码
  yum install gcc
  安装zlib(如果没安装,在安装setuptools时可能会出现的错误RuntimeError:Compression requires the (missing) zlib module)
  yum install zlib zlib-devel -y
  安装openssl(如果不安装,使用easy_install时可能会出现的错误:error:Could not find suitable distribution for Requirement.parse('jinja2'))
  本实践未使用这种安装方式,就如下一个一个模块来安装(具体命令:easy_install pycrypto pyyaml jinja2 markupsafe ecdsa paramiko simplejson)
  yum install openssl openssl-devel -y
  (1)、python2.7安装
  https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
  # tar xvzf Python-2.7.8.tgz
  # cd Python-2.7.8
  # ./configure --prefix=/usr/local
  # make
  # make install
  ## 将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件
  # cd /usr/local/include/python2.7
  # cp -a ./* /usr/local/include/
  ## 备份旧版本的python,并符号链接新版本的python
  # cd /usr/bin
  # mv python python.old
  # ln -s /usr/local/bin/python2.7 /usr/local/bin/python
  # rm -f /usr/bin/python && cp /usr/local/bin/python2.7 /usr/bin/python
  ## 修改yum脚本,使其指向旧版本的python,已避免其无法运行
  # vim /usr/bin/yum
  #!/usr/bin/python  -->  #!/usr/bin/python2.4
  (2)、setuptools模块安装
  https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz
  # tar xvzf setuptools-7.0.tar.gz
  # cd setuptools-7.0
  # python setup.py install
  安装好setuptools后就可以利用easy_install这个工具安装下面的python模块了,但我的电脑是虚拟机,配置太低了,所以基本无法安装,所以只好一个一个下载下来再安装了。
  (3)、pycrypto模块安装
  https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
  # tar xvzf pycrypto-2.6.1.tar.gz
  # cd pycrypto-2.6.1
  # python setup.py install
  (4)、PyYAML模块安装
  http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz
  # tar xvzf yaml-0.1.5.tar.gz
  # cd yaml-0.1.5
  # ./configure --prefix=/usr/local
  # make --jobs=`grep processor/proc/cpuinfo | wc -l`
  # make install
  https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz
  # tar xvzf PyYAML-3.11.tar.gz
  # cd PyYAML-3.11
  # python setup.py install
  (5)、Jinja2模块安装
  https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz
  # tar xvzf MarkupSafe-0.9.3.tar.gz
  # cd MarkupSafe-0.9.3
  # python setup.py install
  https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz
  # tar xvzf Jinja2-2.7.3.tar.gz
  # cd Jinja2-2.7.3
  # python setup.py install
  (6)、paramiko模块安装
  https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz
  # tar xvzf ecdsa-0.11.tar.gz
  # cd ecdsa-0.11
  # python setup.py install
  https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz
  # tar xvzf paramiko-1.15.1.tar.gz
  # cd paramiko-1.15.1
  # python setup.py install
  (7)、simplejson模块安装
  https://pypi.python.org/packages/source/s/simplejson/simplejson-3.6.5.tar.gz
  # tar xvzf simplejson-3.6.5.tar.gz
  # cd simplejson-3.6.5
  # python setup.py install
  (8)、ansible安装
  https://github.com/ansible/ansible/archive/v1.7.2.tar.gz
  # tar xvzf ansible-1.7.2.tar.gz
  # cd ansible-1.7.2
  # python setup.py install
  3 ansible配置
  注:centos7.0安装ansible后发现找不到ansible.cfg,配置文件的路径如下图,并将配置文件拷贝过去
DSC0000.jpg

  默认配置文件位置为/etc/ansible/ansilble.cfg,配置文件位置可以修改。
  Ansible 按照如下位置和顺序来查找ansible.cfg 文件:
  1.ANSIBLE_CONFIG 环境变量所指定的文件。
  2../ansible.cfg(当前目录下的ansible.cfg)。
  3.~/.ansible.cfg(家目录下的.ansible.cfg)。
  4./etc/ansible/ansible.cfg。
  4  配置ssh登录
  4.1  由于ansible使用的登陆方式是ssh所以,在做实验的两台主机需要配置ssh秘钥对,这样ansible才能正常使用。
  服务端:192.168.186.131   客户端:192.168.186.130
  在131的主机上,执行:
  #  ssh-keygen -t rsa  直接回车即可,不用设置密钥密码。
  然后将公钥(id_rsa.pub)拷贝到130的机器上:
   # ssh-copy-id   -i /root/.ssh/id_rsa.pub 192.168.186.130  这个命令就能生成authorized_keys文件的,没必要一个一个无复制.pub文件,那样反而麻烦容易错误的
  本机131也要操作:
  # cat  /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
  #  chmod  600 /root/.ssh/authorized_keys
  在131和130的机器上关闭selinux
  #  setenforce  0
  在131的机器测试ssh是否可以登录:
  # ssh   192.168.186.130
  成功登录130的机器。
  4.2  修改ansible的hosts文件
  在131的机器:
  #  vim  /etc/ansible/hosts
  在末尾添加:
[testhosts]    #  testhosts 是服务器组的名字,用来统一管理服务器

  127.0.0.1
  gx.com         #gx.com是192.168.186.130 这台服务器,当然,这里可以直接写IP地址。
  如果写成域名的形式,则需要修改一下dns的指向或者/etc/hosts ,让dns可以找到gx.com的IP指向了哪个服务器。
  修改
  # vim  /etc/hosts
  加入:192.168.186.130 gx.com
  4.3  进行远程连接测试
  4.3.1  执行w命令,查看服务器的状态:
  #  ansible  testhosts  -m command -a  ‘w‘
DSC0001.jpg

  4.3.2  ansible拷贝文件或者目录
  在服务端创建文件
  # vi  /tmp/test.sh
  #!/bin/bash
  echo `date` > /tmp/ansible_test.txt
  利用ansible可以方便地将本地的目录或者文件同步到远程服务器,具体命令:
  #  ansible testhosts -s -m copy -a 'src=/tmp/test.sh dest=/tmp/test.sh mode=0755'
  复制结果:
DSC0002.jpg

  然后,可以批量执行该脚本:
  #  ansible testhosts -m shell -a '/tmp/test.sh'
DSC0003.jpg

  已经创建了/tmp/ansible_test.txt文件了,并在该文件中成功写入了结果。测试成功
  4.3.3  ansible实现远程任务执行
  利用ansible的cron模块,给远程的服务器批量增加任务计划
  每个星期天都重新创建一个文件/tmp/day.txt
  # ansible testhosts -m cron -a "name='testday cron' job='/bin/touch /tmp/day.txt' weekday=6"
DSC0004.jpg

  如果想要删除任务计划,只需增加state=absent,如下图,已经将刚刚添加的任务删除了
   DSC0005.jpg
  ========================华丽的分割线===========================
  生产环境中jenkins主机ansible配置如下:
[defaults]

  hostfile       = ./hosts
  library        = /usr/share/ansible
  remote_tmp     = $HOME/.ansible/tmp
  pattern        = *
  transport      = smart
  remote_port    = 22
  log_path = /home/jenkins/ansible/ansible.log
  pipelining = True
  module_lang    = C
  gathering = implicit
  host_key_checking = False
  sudo_exe = sudo
  timeout = 10
  ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
  action_plugins     = /usr/share/ansible_plugins/action_plugins
  callback_plugins   = /usr/share/ansible_plugins/callback_plugins
  connection_plugins = /usr/share/ansible_plugins/connection_plugins
  lookup_plugins     = /usr/share/ansible_plugins/lookup_plugins
  vars_plugins       = /usr/share/ansible_plugins/vars_plugins
  filter_plugins     = /usr/share/ansible_plugins/filter_plugins
[paramiko_connection]

[ssh_connection]

[accelerate]

  accelerate_port = 5099
  accelerate_timeout = 30
  accelerate_connect_timeout = 5.0
  accelerate_daemon_timeout = 30
  主要配置项有:
  hostfile:指定ansible inventory文件路径,默认路径为/etc/ansible/hosts,生产环境Jenkins主机已修改为./hosts,也可以在使用ansible或ansible-playbook命令时通过-i参数指定其路径。
  log_path:指定日志文件。
  remote_port:指定连接远程主机的默认端口。
  4 ansible使用
  Ansible常用命令有三个:ansible  ansible-playbook  ansible-doc
  4.1 ansible用法
  首先是集群hosts列表的配置。如下:
  root@localhost[/home/centos/ansible-demo]cat hosts
[bpm:children]

  bpm57
  bpm58
[bpm57]

  192.168.100.57 ansible_ssh_user=bpm  ansible_ssh_pass=******Zhang
[bpm58]

  192.168.100.58 ansible_ssh_user=bpm  ansible_ssh_pass=*******Zhang
[110]

  192.168.100.110 ansible_ssh_user=yangsw ansible_ssh_pass=bs bsP********
[64]

  192.168.100.64:2202 ansible_ssh_user=yangsw ansible_ssh_pass=bsP********
  其中,中括号(类似[110])表示一个节点组,下面每行表示一个节点,一个节点组可以包括多个节点,也可以通过指定children节点组(类似[bpm:children])将多个节点组组成一个新的组,hosts文件中每行需要指定的有ip:port(端口也可以通过ansible_ssh_port=22来指定,默认为配置文件中remote_port的值) 远程主机用户名 远程主机密码(配置为免密登陆则不用指定)。
  密码中如果包含$ ” ‘ \ 字符时,需要进行转义。
  Ansible命令:ansible  host_clluster -m 模块 -a 命令
  -m:指定模块
  -a:指定模块参数
  -i:指定inventory路径(hosts文件位置)
  -e:指定变量
  -f :指定并行进程数,默认5
  root@localhost[/home/centos/ansible-demo]ansible bpm -m shell -a"pwd"
  192.168.100.58 | SUCCESS | rc=0 >>
  /home/bpm
  192.168.100.57 | SUCCESS | rc=0 >>
  /home/bpm
  Ansible 常用模块有file shell command copy template fetch script croon ping等
  可以使用ansible-doc -l查看ansible都有哪些模块及各个模块功能,模块具体用法可以使用ansible-doc命令查看,如file模块可以使用ansible-doc file查看。
  4.2 ansible-playbook
  playbook简单的说就是定义一个配置文件,文件中写入你需要安装的服务,配置文件,变量等信息,使他们可以按照事先定义好的机制完成一个任务。Playbook使用YAML语法结构,所以配置阅读起来都比较简单。
  Playbooks常用参数:
  hosts:指定远程主机组
  vars:定义所用到的变量,可以使用变量名:变量值的方式,也可使用var_files指定存放变量的文件。
  Ansible变量命名规则:变量由字母、数字、下划线组合而成,且必须以字母开头。
  roles: ansible的roles用于层次性、结构化地组织palybook。roles能够根据层次型结构自动装载变量文件、tasks及handlers等。
  tasks:指定要执行的任务列表。
  如下为mzone发布的一个简单的playbook:

  Playbook文件一般命名成.yml形式,hosts指定要操作的远程主机组,可以用变量表示,ansible中以双花括号{{ }}的形式表示变量,变量值可以在执行命令时通过-e参数指定,如:ansilbe-playbook deploy_mzone.yml -e”host_cluster=web”
  Tasks表示要执行的操作,-name指定执行playbook该语句时在屏幕上显示的信息,为提示信息。copy 以及 shell 为要执行的模块,冒号后面跟模块所需指定的参数。
  Ansible-playbook常用到的还有template模块,用法与copy模块相似,不同的是template模块可以使用变量,其与copy模块的区别在于,拷贝到远程可以替换src文件中变量的值。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430826-1-1.html 上篇帖子: ansible-2.1.0.0 下篇帖子: Ansible基础(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表