zoukankan      html  css  js  c++  java
  • ansible1:介绍及安装


    写在前面

      本系列文章参考文档:

    基础介绍

      ansible是一个用python语言编写的自动化运维工具,它集合了旧有运维工具(puppet、chef、func等)的优点,实现批量运行命令、批量部署等功能。ansible只是提供一种框架,其本身并没有批量操作的能力,批量操作需要依赖其众多的模块实现,上手容易,是运维工程师不可或缺的利器之一。

    工具对比

      与ansible类似的还有puppet和saltsatck,saltstack与ansible属于萝卜白菜,puppet则需要在被管理的主机上安装agent,显得略臃肿;而ansible不需要安装客户端,它只需要依赖SSH就可以正常工作,也就是说你能通过SSH连接到对应主机,就能通过ansible去管控它,当然还需要将被管控的主机加入到ansible的配置清单中(Inventory,这个清单文件就是/etc/ansible/hosts)。

    ansible部署说明

    1. 本机环境。

        0 18:45:07 root@ansible,172.16.2.9:~ # cat /etc/redhat-release 
      CentOS Linux release 7.9.2009 (Core)
        0 18:45:14 root@ansible,172.16.2.9:~ # uname -r
      3.10.0-1160.15.2.el7.x86_64
      
    2. yum安装ansible。

      [root@ansible ~]# yum -y install ansible
      [root@ansible ~]# ansible --version
      ansible 2.9.18
      
    3. 文件说明说明。

      配置文件目录:/etc/ansible/
      ansible配置清单(ansible inventory):/etc/ansible/hosts					# 需要将被管控的主机信息都添加至清单中。
      执行文件目录:/usr/bin/
      lib库依赖目录:/usr/lib/python2.7/site-packages/ansible/		# 根据实际依赖的python版本。
      
    4. ansible配置文件查找顺序。

      1. 检查环境变量 ANSIBLE_CONFIG 指向的路径。
      2. 检查当前用户家目录~/.ansible.cfg。
      3. 检查/etc/下的配置文件/etc/ansible.cfg。
      
    5. 常用ansible命令集。

      /usr/bin/ansible			# 常用于临时命令的执行,该命令常用格式:ansible <host-pattern> [-f forks] [-m module_name] [-a args]。
      /usr/bin/ansible-doc		# 查看ansible的模块。
      /usr/bin/ansible-playbook	# ansible自动化任务集编排工具。
      

    ansible简单使用

    主机名 IP地址 操作系统
    ck-ansible 172.16.2.9 CentOS Linux release 7.9.2009 (Core)
    ck-node1 172.16.15.21 CentOS Linux release 7.9.2009 (Core)
    ck-node2 172.16.15.22 CentOS Linux release 7.9.2009 (Core)
    ck-node3 172.16.15.23 CentOS Linux release 7.9.2009 (Core)

    1. 查看ansible所有模块说明。

        0 20:25:13 root@ck-ansible,172.16.2.9:~ # ansible-doc -l
        0 20:25:22 root@ck-ansible,172.16.2.9:~ # ansible-doc -l | grep nginx
      
    2. 查看某一个模块说明。

        0 20:26:14 root@ck-ansible,172.16.2.9:~ # ansible-doc -s ping
      
    3. 使用 ping 模板测试主机的连通性。

      # 首先将要被管控的主机信息添加至 inventory 中(此处配置别名对应信息,方便后续直接调用)。
      ## 第一种方式是只配置/etc/ansible/hosts,显然把密码写在配置文件中是不安全的。
        0 13:15:45 root@ck-ansible,172.16.2.9:~ # vim /etc/ansible/hosts
      ck-node1	ansible_host=172.16.15.21	ansible_port=22 	ansible_user=root	ansible_ssh_pass=123456
      ck-node2	ansible_host=172.16.15.22	ansible_port=22 	ansible_user=root	ansible_ssh_pass=123456
      ck-node3	ansible_host=172.16.15.23	ansible_port=22 	ansible_user=root	ansible_ssh_pass=123456
      ## 第二种方式是将别名与IP对应信息配置在/etc/hosts中,然后配置免密登录,在/etc/ansible/hosts中只配置别名即可(工作中一般都会将ansible直接装在jumpserver主机上,可以省去配置/etc/hosts和免密登录)。
        0 13:49:50 root@ck-ansible,172.16.2.9:~ # vim /etc/hosts
      172.16.15.21    ck-node1
      172.16.15.22    ck-node2
      172.16.15.23    ck-node3
        0 13:50:24 root@ck-ansible,172.16.2.9:~ # mkdir-p /server/ops_tools/ops_scripts/
        0 13:51:14 root@ck-ansible,172.16.2.9:~ # cd /server/ops_tools/ops_scripts/
        0 13:51:21 root@ck-ansible,172.16.2.9:/server/ops_tools/ops_scripts # cat batch_key.sh 		# 编写一个批量分发公钥的脚本。
      #!/bin/bash
      
      PWD=123456
      
      
      for ip in $*
      do
        sshpass -p $PWD ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no $ip &>/dev/null
        if [ $? != 0 ];then
          echo -e "\n----- $ip distribution of failure -----\n" 
          continue
        fi
      done
        0 13:53:22 root@ck-ansible,172.16.2.9:/server/ops_tools/ops_scripts # sh batch_key.sh ck-node1 ck-node2 ck-node3
        0 13:53:33 root@ck-ansible,172.16.2.9:/server/ops_tools/ops_scripts # cd
        0 13:57:36 root@ck-ansible,172.16.2.9:~ # cat /etc/ansible/hosts
      ck-node1
      ck-node2
      ck-node3
      # 使用ping模块测试连通性。
        0 13:57:38 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m ping
      ck-node1 | SUCCESS => {
          "ansible_facts": {
              "discovered_interpreter_python": "/usr/bin/python"
          }, 
          "changed": false, 
          "ping": "pong"
      }
        0 13:58:08 root@ck-ansible,172.16.2.9:~ # ansible ck-node2 -m ping
      ck-node2 | SUCCESS => {
          "ansible_facts": {
              "discovered_interpreter_python": "/usr/bin/python"
          }, 
          "changed": false, 
          "ping": "pong"
      }
        0 13:58:12 root@ck-ansible,172.16.2.9:~ # ansible ck-node3 -m ping
      ck-node3 | SUCCESS => {
          "ansible_facts": {
              "discovered_interpreter_python": "/usr/bin/python"
          }, 
          "changed": false, 
          "ping": "pong"
      }
      # 还可以直接使用ansible的“all”关键字,直接对配置清单中所有主机运行ping模块。
        0 13:58:15 root@ck-ansible,172.16.2.9:~ # ansible all -m ping
      ck-node1 | SUCCESS => {
          "ansible_facts": {
              "discovered_interpreter_python": "/usr/bin/python"
          }, 
          "changed": false, 
          "ping": "pong"
      }
      ck-node3 | SUCCESS => {
          "ansible_facts": {
              "discovered_interpreter_python": "/usr/bin/python"
          }, 
          "changed": false, 
          "ping": "pong"
      }
      ck-node2 | SUCCESS => {
          "ansible_facts": {
              "discovered_interpreter_python": "/usr/bin/python"
          }, 
          "changed": false, 
          "ping": "pong"
      }
      # 如果不想输入上面的"yes/no"信息,可以修改ansible配置文件。
        0 13:24:19 root@ck-ansible,172.16.2.9:~ # vim /etc/ansible/ansible.cfg
      host_key_checking = False		# 取消此行的注释
      

    颜色说明

      ansible具有幂等性。ansible是"以结果为导向的",我们指定了一个"目标状态",ansible会自动判断,"当前状态"是否与"目标状态"一致,如果一致,则不进行任何操作,如果不一致,那么就将"当前状态"变成"目标状态",这就是"幂等性","幂等性"可以保证我们重复的执行同一项操作时,得到的结果是一样的。

    1. 绿色:表示查询,或者没有发生任何改变。
    2. 红色:表示执行命令时出现异常。
    3. 黄色:表示执行命令后,对受控端主机产生了影响,发生了配置改变。
    4. 粉色:表示忠告、建议信息。
    5. 蓝色:表示命令执行过程信息。


    写作不易,转载请注明出处,谢谢~~

  • 相关阅读:
    快速傅里叶变换(FFT)
    【BZOJ】1005: [HNOI2008]明明的烦恼(prufer编码+特殊的技巧)
    【BZOJ】1030: [JSOI2007]文本生成器(递推+ac自动机)
    cf490 C. Hacking Cypher(无语)
    高精度模板2(带符号压位加减乘除开方封包)
    【BZOJ】1004: [HNOI2008]Cards(置换群+polya+burnside)
    【BZOJ】1500: [NOI2005]维修数列(splay+变态题)
    【BZOJ】1064: [Noi2008]假面舞会(判环+gcd+特殊的技巧)
    【BZOJ】1052: [HAOI2007]覆盖问题(贪心)
    【BZOJ】1028: [JSOI2007]麻将(贪心+暴力)
  • 原文地址:https://www.cnblogs.com/ccbloom/p/15508511.html
Copyright © 2011-2022 走看看