小言_互联网的博客

Ansible原理与安装部署

490人阅读  评论(0)

今天,我们开始学习运维自动化工具Ansible。

一、Ansible原理

1.1 什么是Ansible

Ansible一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台/框架。基于Python语言实现,核心模块包括:jinja2、PyYAML和paramiko。Ansible允许重复执行而不出错,客户端无agent,服务端无deamon进程。Ansible特点:

  • Ansible支持API接口调用,例如通过CMDB调用或公有云接口调用

  • Ansible是一个框架,基于模块、插件工作

  • 基于SSH工作,即被管理端要支持SSH管理

  • 通过playbooks来编写强大的配置、状态管理,实现自动化

 

1.2 Ansible重要组件说明

  • 模块:Ansible由多种功能模块组成

  • playbook:Ansible剧本,使用yml语法调用不同功能模块完成特定的功能

  • roles:Ansbiel角色,可以使用ansible-galaxy命令下载第3方的roles角色。

  • ansible-vault:文件加密工具

  • ansilbe-console:基于console与用户进行交互

  • ansible-doc:帮助文档,-l所有模块,-s简要帮助

     

1.3 Ansible执行过程及原理说明

  1. 加载配置文件,默认是/etc/ansible/ansible.cfg

  2. 加载对应模块

  3. 生产临时py文件,并传输到目标机器的~/.ansible/tmp目录下

  4. 给py文件加上+x权限,执行并返回结果

  5. 删除py文件并sleep 0 退出

 

1.4 Ansible执行状态说明

  • 绿色:执行成功,不需要做改变

  • 黄色:执行成功,对目标主机做变更

  • 红色:执行失败

 

二、Ansible安装与配置

2.1 安装Ansible

安装Ansible,以CentOS 7.6为例:


  
  1. [root@ansible ~] # cat /etc/redhat-release
  2. CentOS Linux release 7.6 .1810 (Core)
  3. [root@ansible ~] # uname -a
  4. Linux ansible 3.10 .0 -957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
  5. #配置epel源
  6. [root@ansible ~] # cat /etc/yum.repos.d/epel-7.repo
  7. [epel]
  8. name=Extra Packages for Enterprise Linux 7 - $basearch
  9. baseurl=http://mirrors.aliyun.com/epel/ 7/$basearch
  10. failovermethod=priority
  11. enabled= 1
  12. gpgcheck= 0
  13. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL -7
  14. [epel-debuginfo]
  15. name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
  16. baseurl=http://mirrors.aliyun.com/epel/ 7/$basearch/debug
  17. failovermethod=priority
  18. enabled= 0
  19. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL -7
  20. gpgcheck= 0
  21. [epel-source]
  22. name=Extra Packages for Enterprise Linux 7 - $basearch - Source
  23. baseurl=http://mirrors.aliyun.com/epel/ 7/SRPMS
  24. failovermethod=priority
  25. enabled= 0
  26. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL -7
  27. gpgcheck= 0
  28. #安装Ansible
  29. [root@ansible ~] # yum install ansible -y
  30. #查看已安装Ansible版本
  31. [root@ansible ~] # ansible --version
  32. ansible 2.8 .2
  33. config file = /etc/ansible/ansible.cfg
  34. configured module search path = [ u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  35. ansible python module location = /usr/lib/python2 .7/site-packages/ansible
  36. executable location = /usr/bin/ansible
  37. python version = 2.7 .5 (default, Oct 30 2018, 23: 45: 53) [GCC 4.8 .5 20150623 (Red Hat 4.8 .5 -36)]
  38. [root@ansible yum.repos.d] #
  39. ansible -2.8 .2 -1.el7.noarch

查看Ansible相关文件


  
  1. yum info ansible
  2. rpm -qa ansible
  3. rpm -ql ansibel | less

2.2 Ansible配置文件

Ansible主要配置文件及作用说明如下:


  
  1. /etc/ansible/
  2. ├── ansible.cfg # Ansible主配置文件
  3. ├── hosts #用来定义被管理的机器清单
  4. └── roles #该目录用于定义角色

Ansible配置文件
/etc/ansible/ansible.cfg主要参数说明


  
  1. #关闭过时参数告警
  2. deprecation_warnings= False
  3. #关闭command告警
  4. command_warnings= False
  5. #首次连接不检查,配合下面的playbook实现免密码ssh登录
  6. host_key_checking= False
  7. #设置并行数量
  8. forks= 40
  9. #开启日志
  10. log_path = / var/log/ansible.log
  11. #ssh超时时间
  12. timeout = 30

2.3 hosts主机清单

默认hosts文件/etc/ansible/hosts,被操作的主机必须在hosts主机清单中。


  
  1. cd /etc/ansible
  2. vim hosts
  3. #分组
  4. [ mons]
  5. #设置主机别名
  6. ceph-node -1 ansible_ssh_host= 172.16 .93 .1
  7. [ client]
  8. 172.16 .93 .1: 2222
  9. #同时也支持域名和主机名,最终解释到IP
  10. #支持正则表达式
  11. [ kvm_node_all]
  12. 172.16 .93.[ 6: 9]
  13. #设置分组主机变量
  14. [ kvm_node_all:vars]
  15. ansible_ssh_user=root
  16. ansible_ssh_pass=Efly1234
  17. ansible_ssh_port= 22
  18. #自动义变量
  19. my_name=zhangsan
  20. #主机的继承关系,会继承父的所有变量
  21. [ kvm_node_all:children]
  22. client

2.4 Ansible管理机与被管理机做秘钥认证(可选)


  
  1. # 生成秘钥
  2. ssh-keygen
  3. #生成后会得到下面2个文件
  4. [root@ansible ~] # tree /root/.ssh/
  5. /root/.ssh/
  6. ├── id_rsa
  7. └── id_rsa.pub
  8. # 将公钥写入被管理机
  9. ssh- copy- id 192.168 .199 .52
  10. #或
  11. ssh- copy- id -i /root/.ssh/id_rsa.pub -p 22 root@ 192.168 .199 .52

 


转载:https://blog.csdn.net/RJ0024/article/details/105582589
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场