基础知识补充:

  1. 常用自动化运维工具
  2.  
  3. Ansible:使用python来开发的,无需设置Agentless(代理),一般管理几百台。与ssh的方式也不一样,ssh是基于c/s模式(客户端+服务器)来使用服务端提供的服务,属于多台客户端访问一台服务器。而ansible是控制端,使用装了ansible的主机管理多台主机。也叫做主控端。Ansible是通过ssh端口来实现无代理配置。
  4.  
  5. Saltstack:使用python语言开发,一般需部署agent(代理),执行效率更高,一般管理几千台。
  6.  
  7. Puppet:使用ruby语言开发,功能强大,配置复杂,适合大型环境(了解即可)
  8.  
  9. 下面这些使用者较少,不做介绍
  10.  
  11. Fabric:使用python语言开发,agentless(不需要设置代理)
  12.  
  13. Chef: 使用ruby语言开发
  14.  
  15. Cfengine
  16.  
  17. Func
  18.  
  19. Ansible特性
  20.  
  21. 模块化:调用特定的模块,完成特定任务
  22.  
  23. Paramiko(基于ssh的开发语言),PyYAMLYAML语言),Jinja2(模板语言)这三个关键模块,并支持自定义模块
  24.  
  25. 基于Python语言实现
  26.  
  27. 部署简单,基于pythonSSH(默认已安装),agentless(不需要设置代理)
  28.  
  29. 安全,基于OpenSSH
  30.  
  31. 支持playbook编排任务
  32.  
  33. 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
  34.  
  35. 无需代理不依赖PKI(无需ssl
  36.  
  37. 可使用任何编程语言写模块
  38.  
  39. YAML格式,编排任务,支持丰富的数据结构
  40.  
  41. 较强大的多层解决方案

用户通过ANSIBLE来下达指令,通常是逐条命令执行。可以通过公有/私有云来实现远程管理.

  1.  

主机库存中包含着所有主机的列表,通过主机分组及连接插件来实现管理不同的主机,给一些主机升级,一些主机创建用户等目的。

  1.  

剧本是用在批量,定期做例行性工作的时候,比如定期做备份等等。在复杂一些的情况会使用角色(Roles),相当于多个剧本的组合。

  1.  

Ansible主要组成部

  1.  

ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件

  1.  

INVENTORY:Ansible管理主机的清单,位于/etc/anaible/hosts文本文件中,内容为要管理的主机的名称或IP地址.

  1.  

MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义

  1.  

PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插

  1.  

件等,该功能不常用

  1.  

API:供第三方程序调用的应用程序编程接口

  1.  

ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具

  1.  

Ansible命令执行来源:

  1.  

1 USER,普通用户,SYSTEM ADMINISTRATOR(系统管理员)

  1.  

2 CMDB(配置管理数据库) API 调用(需要开发接口)

  1.  

3 PUBLIC/PRIVATE CLOUD API调用(需要开发接口)

  1.  

USER-> Ansible Playbook -> Ansibile(运维工程师通常用这种方式)

  1.  

利用ansible实现管理的方式:

  1.  

1 Ad-Hoc 即单条ansible命令,主要用于临时命令使用场景

  1.  

Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前提的规划

  1.  

Ansible-playbook(剧本)执行过程:

  1.  

将已有编排好的任务集写入Ansible-Playbook,通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

  1.  

Ansible主要操作对象:

  1.  

HOSTS主机

  1.  

NETWORKING网络设备

  1.  

注意事项

  1.  

执行ansible的主机一般称为主控端,中控,master或堡垒机

  1.  

主控端Python版本需要2.6或以上

  1.  

被控端Python版本小于2.4需要安装python-simplejson

  1.  

被控端如开启SELinux需要安装libselinux-python

  1.  

windows不能做为主控端

  1.  

ansible安装:配置好仓库的epel源,直接yum install ansible即可。

  1.  

确认版本号: ansible –version

 ansible的配置文件

  1.  

/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,大部分配置不用修改,默认值即可.

  1.  

/etc/ansible/hosts 主机清单,要控制的主机必须存放在这个文件中。

  1.  

/etc/ansible/roles/ 存放角色的目录,角色可理解为多个剧本的集合

  1.  

 ansible的程序

  1.  

/usr/bin/ansible 主程序,临时命令执行工具

  1.  

/usr/bin/ansible-doc 查看配置文档,模块功能查看工具(很多模块的帮助信息都在这里,相当于man)

  1.  

/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台

  1.  

/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具/usr/bin/ansible-pull 远程执行命令的工具(pull,拉取的意思。有时候把别人的文件拉取到我这来,有时候把我的东西推送到别人那)

  1.  

/usr/bin/ansible-vault 文件加密工具

  1.  

/usr/bin/ansible-console 基于Console界面与用户交互的执行工具

  1.  

ansible模块介绍:

执行哪些模块,就使用-m参数来指定。对其执行哪些动作则使用-a参数指定。

下面的演示都是一个中控机,然后2个node。

1)group模块

  1. group模块:管理用户组模块
  2.  
  3.     相关选项:
  4.  
  5.       name:组名称
  6.  
  7.       gid:指定GID
  8.  
  9.       state:present/absent
            present:表示创建。absent:表示删除
  10.  
  11.       system:yes/no
            yes/no:是否为系统用户。

  1.1)案例演示:

  1. [root@ELK-chaofeng01 ~]#ansible all -m group -a "gid=3000 name=chaofeng state=present system=no"
  2. 172.16.0.53 | CHANGED => {
  3. "changed": true,
  4. "gid": 3000,
  5. "name": "chaofeng",
  6. "state": "present",
  7. "system": false
  8. }
  9. 172.16.0.52 | CHANGED => {
  10. "changed": true,
  11. "gid": 3000,
  12. "name": "chaofeng",
  13. "state": "present",
  14. "system": false
  15. }

2)user模块

  1. 由于user模块的选项众多,这里只介绍一些常用的选项:
  2.  
  3.       name:用户名
  4.  
  5.       password:为用户设置登陆密码,此密码是明文密码加密后的密码
  6.  
  7.       update_password:always/on_create
  8.  
  9.         always:只有当密码不相同时才会更新密码(默认)
  10.  
  11.         on_create:只为新用户设置密码
  12.  
  13.       shell:用户的shell设定
  14.  
  15.       groups:用户附加组设定
  16.  
  17.       home:指定用户的家目录
  18.       append:yes/no
  19.  
  20.         yes:增量添加group
  21.  
  22.         no:全量变更group,只设置groups指定的group组(默认)
  23.  
  24.       remove:配合state=absent使用,删除用户的家目录->remove=yes

案例演示:

  2.1)添加一个用户

  1. [root@ELK-chaofeng01 ~]#ansible all -m user -a "uid=5000 name=testuser state=present groups=root shell=/bin/tcsh"
  2. 172.16.0.52 | CHANGED => {
  3. "changed": true,
  4. "comment": "",
  5. "create_home": true,
  6. "group": 5000,
  7. "groups": "root",
  8. "home": "/home/testuser",
  9. "name": "testuser",
  10. "shell": "/bin/tcsh",
  11. "state": "present",
  12. "system": false,
  13. "uid": 5000
  14. }
  15. 172.16.0.53 | CHANGED => {
  16. "changed": true,
  17. "comment": "",
  18. "create_home": true,
  19. "group": 5000,
  20. "groups": "root",
  21. "home": "/home/testuser",
  22. "name": "testuser",
  23. "shell": "/bin/tcsh",
  24. "state": "present",
  25. "system": false,
  26. "uid": 5000
  27. }

注意:要添加的附加组也是需要在node节点的主机上事先存在的,否则会报错:比如  

    

3)copy模块

  1. copy模块:复制本地文件至远程主机上    
  2.  
  3.     相关选项:
  4.  
  5.       backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
  6.  
  7.       content:用于替代“src”,可以直接设定指定文件的值
  8.  
  9.       dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
  10.  
  11.       directory_mode:递归设定目录的权限,默认为系统默认权限
  12.  
  13.       force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
  14.  
  15.       others:所有的file模块里的选项都可以在这里使用
  16.  
  17.       src:被复制到远程主机的本地文件(也就是中控机上的文件),可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync
  18.  
  19.       owner,group,mode...
          mode:设定复制的文件的权限属性,数字表示法来设定。

案例:

  3.1)将中控机上/etc/fstab文件复制到远程节点上:

  1. [root@ELK-chaofeng01 ~]#ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.ansible mode=600"
  2. 172.16.0.52 | CHANGED => {
  3. "changed": true,
  4. "checksum": "150ff5f6b99363314d375b73a5708e2a9911e52a",
  5. "dest": "/tmp/fstab.ansible",
  6. "gid": 0,
  7. "group": "root",
  8. "md5sum": "5fe64bfebc65805a98e7e9d47e9f379f",
  9. "mode": "0600",
  10. "owner": "root",
  11. "size": 501,
  12. "src": "/root/.ansible/tmp/ansible-tmp-1553574326.56-222928675924643/source",
  13. "state": "file",
  14. "uid": 0
  15. }
  16. 172.16.0.53 | CHANGED => {
  17. "changed": true,
  18. "checksum": "150ff5f6b99363314d375b73a5708e2a9911e52a",
  19. "dest": "/tmp/fstab.ansible",
  20. "gid": 0,
  21. "group": "root",
  22. "md5sum": "5fe64bfebc65805a98e7e9d47e9f379f",
  23. "mode": "0600",
  24. "owner": "root",
  25. "size": 501,
  26. "src": "/root/.ansible/tmp/ansible-tmp-1553574326.57-180187752562484/source",
  27. "state": "file",
  28. "uid": 0
  29. }

我们可以在node节点上看看权限信息

  1. [root@ELK-chaofeng02 ~]#ls /tmp/fstab.ansible -l
  2. -rw------- 1 root root 501 Mar 26 12:25 /tmp/fstab.ansible

  3.2)复制一个目录

  1. [root@ELK-chaofeng01 ~]#ansible 172.16.0.52 -m copy -a "src=/etc/yum.repos.d/ dest=/tmp/yum.repos_ansible owner=root"
  2. 172.16.0.52 | CHANGED => {
  3. "changed": true,
  4. "dest": "/tmp/yum.repos_ansible/",
  5. "src": "/etc/yum.repos.d/"
  6. }

    注意:上面的src路径中,是我们定义的要复制的源目录,源目录后必须带上根路径”/“标识符。否则不带的话,复制的是目录本身,并非目录下的所有文件。

  在node节点上查看一下:

    

补充:fetch的作用:将远程主机上的文件复制到本地来。用法格式:ansible-doc -s fetch

4)shell模块:让远程主机在shell进程下执行命令,从而支持shell的特性,如管道等。

如果说我们的目标主机需要执行一些命令类操作,因此我们就需要使用shell模块

  1. [root@ELK-chaofeng01 ~]#ansible all -m shell -a "ip addr"
  2. 172.16.0.53 | CHANGED | rc=0 >>
  3. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
  4. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  5. inet 127.0.0.1/8 scope host lo
  6. valid_lft forever preferred_lft forever
  7. inet6 ::1/128 scope host
  8. valid_lft forever preferred_lft forever
  9. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  10. link/ether 52:54:00:e5:63:80 brd ff:ff:ff:ff:ff:ff
  11. inet 172.16.0.53/16 brd 172.16.255.255 scope global eth0
  12. valid_lft forever preferred_lft forever
  13. inet6 fe80::1924:db50:da5d:2e13/64 scope link
  14. valid_lft forever preferred_lft forever
  15.  
  16. 172.16.0.52 | CHANGED | rc=0 >>
  17. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
  18. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  19. inet 127.0.0.1/8 scope host lo
  20. valid_lft forever preferred_lft forever
  21. inet6 ::1/128 scope host
  22. valid_lft forever preferred_lft forever
  23. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  24. link/ether 52:54:00:5b:be:3f brd ff:ff:ff:ff:ff:ff
  25. inet 172.16.0.52/16 brd 172.16.255.255 scope global eth0
  26. valid_lft forever preferred_lft forever
  27. inet6 fe80::f427:6471:2b8a:40f8/64 scope link
  28. valid_lft forever preferred_lft forever

5)file模块:多设置文件属性

  1. 相关选项:
  2.  
  3.       force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
  4.  
  5.       group:定义文件/目录的属组
  6.  
  7.       mode:定义文件/目录的权限
  8.  
  9.       owner:定义文件/目录的属主
  10.  
  11.       path:必选项,定义文件/目录的路径
  12.  
  13.       recurse:递归设置文件的属性,只对目录有效
  14.  
  15.       src:被链接的源文件路径,只应用于state=link的情况
  16.  
  17.       dest:被链接到的路径,只应用于state=link的情况
  18.  
  19.       state
  20.  
  21.        directory:如果目录不存在,就创建目录
  22.  
  23.        file:即使文件不存在,也不会被创建此文件
  24.  
  25.        link:创建软链接
  26.  
  27.       hard:创建硬链接
  28.  
  29.       touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
  30.  
  31.        absent:删除目录、文件或者取消链接文件

案例:

  5.1)创建一个目录

    

  5.2)创建一个符号链接

    

6)cron模块

  1. minute=/hour=/day=/month=/weekday= 某个值不写,默认就是*
  2.  
  3.       name:必选项,任务描述信息
  4.  
  5.       job:执行的任务,要加引号
  6.  
  7.       state:present(创建)/absent(删除)

案例:

  6.1)定时在目标主机上执行任务

  1. [root@ELK-chaofeng01 ~]#ansible all -m cron -a "minute=*/3 job='/usr/sbin/echo haha &>/dev/null' name=None state=present"
  2. 172.16.0.52 | CHANGED => {
  3. "changed": true,
  4. "envs": [],
  5. "jobs": [
  6. "None"
  7. ]
  8. }
  9. 172.16.0.53 | CHANGED => {
  10. "changed": true,
  11. "envs": [],
  12. "jobs": [
  13. "None"
  14. ]
  15. }

  然后我们去目标主机看一下:

  

  在cron计划任务里面确实有这个任务。

  取消计划任务:

  1. [root@ELK-chaofeng01 ~]#ansible all -m cron -a "minute=*/3 job='/usr/sbin/echo haha &>/dev/null' name=None state=absent"

7)yum模块:管理安装rpm程序包

  1. 相关选项:
  2.       name:程序包名称,可带版本号
  3.  
  4.       state:presentinstalledlatest(安装)/absentremoved(删除)

案例:

  1、安装一个包apr-devel

  

8)service模块:管理服务

  1.       name:服务名称
  2.  
  3.       state:started/stopped/restarted/reloaded
  4.  
  5.       enabled:true/false 是否要开机自启。
  6.  
  7.       runlevel:运行级别

案例:

  8.1)将所有节点启动nginx服务。

  

  8.2)将所有节点的nginx服务关闭了

  

9)自定义script脚本:自动上传到所有的节点并执行此脚本。

  命令语法:

案例演示:

  9.1)上传一个脚本到节点并执行

    先在中控机编写一个脚本:

    

    然后在中控机上传到各个节点并执行

  1. [root@ELK-chaofeng01 ~]#ansible all -m script -a "/tmp/echo.sh"
  2. 172.16.0.52 | CHANGED => {
  3. "changed": true,
  4. "rc": 0,
  5. "stderr": "Shared connection to 172.16.0.52 closed.\r\n",
  6. "stderr_lines": [
  7. "Shared connection to 172.16.0.52 closed."
  8. ],
  9. "stdout": "",
  10. "stdout_lines": []
  11. }
  12. 172.16.0.53 | CHANGED => {
  13. "changed": true,
  14. "rc": 0,
  15. "stderr": "Shared connection to 172.16.0.53 closed.\r\n",
  16. "stderr_lines": [
  17. "Shared connection to 172.16.0.53 closed."
  18. ],
  19. "stdout": "",
  20. "stdout_lines": []
  21. }

    然后到其中一个节点查看一下:

    

    执行成功了。

ansible学习基础知识和模块(一)的更多相关文章

  1. Matrix学习——基础知识

    以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明. 首先大家看看下面这个3 x 3的矩阵,这个矩阵被分割成4部 ...

  2. JAVA学习基础知识总结(原创)

    (未经博主允许,禁止转载!) 一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...

  3. Python学习-基础知识-2

    目录 Python基础知识2 一.二进制 二.文字编码-基础 为什么要有文字编码? 有哪些编码格式? 如何解决不同国家不兼容的编码格式? unicode编码格式的缺点 如何既能全球通用还可以规避uni ...

  4. python基础知识9——模块2——常见内置模块

    内置模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 1.sys 用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素 ...

  5. MySQL学习基础知识1

    什么是数据库? 数据库就是存储数据的仓库. 存储方式: 变量 无法永久存储 文件处理,可以永久存储,弊端:文件只能在自己的计算机读写,无法被分享(局域网除外) 数据库分类: 1.关系型数据库 提供某种 ...

  6. IOS科研IOS开发笔记学习基础知识

    这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollVi ...

  7. python基础知识8——模块1——自定义模块和第三方开源模块

    模块的认识 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需 ...

  8. MySQL学习基础知识2

    1.基础语句 查 select(* | 字段名 | 四则运算 | 聚合函数) from 表名称; 加上as取别名 as可省略 如:select name, (math+english)/2 total ...

  9. ansible学习系列2-ansible常用模块使用

    1. 查看支持的模块 [root@localhost ~]# ansible-doc -l 这里我们看下ansible的支持的模块个数 [root@localhost ~]# ansible-doc ...

随机推荐

  1. Android-线程池下载多个图片并保存,如果本地有该图,则不下载,直接展示到view

    做了个工具方法,用来下载图片,如果本地有这个图,则不下载,直接展示到view setHP()方法可以多次使用,因为使用了线程池,所以是个异步操作,如果使用的多,建议根据需要增加线程池的线程数量 看代码 ...

  2. child_process 子进程

    创建子进程,使其可以在进程中执行操作,应用系统命令等.nodejs创建子进程有四种方法,分别是spawn,fork,exec,execFile. 区别 : 格式 : spawn和execFile的格式 ...

  3. 最近要租房子,用Python看一下房源吧..

    前言:最近我的朋友想要租房子,为了装个b,决定运用技术去帮助他. 这个网站是什么我也不知道 反正是一个房子交易网站  http://www.ljia.net/ 设置请求头 headers = {'Ac ...

  4. MVC从Controller到View的呈现

    图说MVC底层运行机制: 当路由机制已经激活Controller并InvokeAction后,如果返回的是View, 则ViewResult基于View呈现的请求响应机制内部借助MVC提供的View引 ...

  5. .NET Core 2.x中使用Named Options处理多个强类型配置实例

    来源: Using multiple instances of strongly-typed settings with named options in .NET Core 2.x 作者: Andr ...

  6. JDK源码分析(1)之 String 相关

    ​在此之前有无数次下定决心要把JDK的源码大致看一遍,但是每次还没点开就已被一个超链接或者其他事情吸引直接跳开了.直到最近突然意识到,因为对源码的了解不深导致踩了许多莫名其妙的坑,所以再次下定决心要把 ...

  7. VS2015安装水晶报表

    最近在做一个打印功能,本来是不想用水晶报表的.想直接用微软原生的报表rdlc完成,但是整了一个上午老是打印乱码,且网上找资料找也找不出. 无奈放弃,然后就想到用水晶报表了,以前用过水晶报表,不过一直都 ...

  8. Python3+Selenium2完整的自动化测试实现之旅(七):完整的轻量级自动化框架实现

    一.前言 前面系列Python3+Selenium2自动化系列博文,陆陆续续总结了自动化环境最基础环境的搭建.IE和Chrome浏览器驱动配置.selenium下的webdriver模块提供的元素定位 ...

  9. 第13章 切换到混合流并添加API访问 - Identity Server 4 中文文档(v1.0.0)

    在之前的快速入门中,我们探讨了API访问和用户身份验证.现在我们想把这两个部分放在一起. OpenID Connect和OAuth 2.0组合的优点在于,您可以使用单个协议和使用令牌服务进行单次交换来 ...

  10. WPF DesiredSize & RenderSize

    DesiredSize DesiredSize介绍 关于DesiredSize的介绍,可以查看最新微软文档对DesiredSize的介绍 DesiredSize,指的是元素在布局过程中计算所需要的大小 ...