• ansible简述


    概述

    ansible基于python开发,实现了批量系统配置、批量程序部署、批量运行命令等功能。

    ansible通过hosts文件和免秘钥(配置文件用户名密码端口号)来实现批量管理主机。

    ansible基于ssh与远程主机通信,可用ssh测试验证ansible功能。

     

    ansible是基于模块开发的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

    安装

    ubuntu

    $ sudo apt update
    $ sudo apt install software-properties-common
    $ sudo apt-add-repository --yes --update ppa:ansible/ansible
    $ sudo apt install ansible

    yum

    yum install epel-release -y
    yum install ansible -y

    ansible的配置文件:

    /etc/ansible/ansible.cfg

    /etc/ansible/hosts

    ansible配置

    1. 免秘钥

    交换SSH Keys允许主机ansible无密码操作客户机(本地主机也可以无秘钥ssh)。

    Exchanging SSH keys will allow for password-less SSH from host running Ansible to hosts being set up.

    # ssh-keygen
    # ssh-copy-id root@host

    主机上运行ssh-keygen生成ssh key/root/.ssh/id_rsa),可保持空秘钥,然后通过ssh-copy-id复制key到客户机。之后可以直接通过ssh无秘钥登录客户机。

    模块

    ansible-doc -l   ;查看ansible模块

    ansible-doc -s module_name     ;查看具体模块的用法

    -m module_name  ;要使用的模块

    ansible支持的模块很多,具体可参考:

    https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

    常用模块示例如下,组名以web示例:

    ansible web -m ping

    ansible web -m command -a 'ss -ntl' ;直接在远程主机上执行命令,结果返回本主机

    ansible web -m shell -a 'cat /etc/passwd |grep "keer"' ;在远程主机上调用shell解释器运行命令

    ansible web -m copy -a 'src=~/hello dest=/data/hello' ;复制文件到远程主机,同时支持给定内容生成文件和修改权限等。

    ansible web -m file -a 'path=/data/app state=directory' ;设置文件的属性,比如创建文件、创建链接文件、删除文件等。

    ansible web -m fetch -a 'src=/data/hello dest=/data' ;从远程某主机获取(复制)文件到本地。

    ansible web -m cron -a 'name="ntp update every 5 min" minute=*/5 job="/sbin/ntpdate 172.17.0.1 &> /dev/null"'  ;管理cron计划任务的。

    ansible web -m yum -a 'name=htop state=present' ;主要用于软件的安装。

    ansible web -m service -a 'name=nginx state=started enabled=true';用于服务程序的管理。

    ansible web -m user -a 'name=keer uid=11111' ;主要是用来管理用户账号。

    ansible web -m group -a 'name=sanguo gid=12222' ;主要用于添加或删除组。

    ansible web -m script -a '/tmp/df.sh' ;将本机的脚本在被管理端的机器上运行。

    ansible web -m setup -a 'filter="*mem*"' #查看内存,该模块主要用于收集信息,是通过调用facts组件来实现的。

    命令

    协程:线程的处理单元;

    线程:最小的调度单位;

    进程:最小的管理单元。

    ansible-doc -l   ;查看ansible模块

    ansible-doc -s module_name     ;查看具体模块的用法

    -f forks  ;指定启动并发线程数以减少服务器压力,ansible -f 5 表示启动5个线程

    -m module_name  ;要使用的模块

    -a args1    ;特有的参数,即调用的模块里面的参数,使用-a调用

    ansible all -m ping   ;查看client端是否正常ping通。

    ansible  组名 -m model_name -a 执行命令

    ansible <host-pattern> [-f forks] [-m module_name] [-a args]

    playbook

    一个任务为play,多个任务为playbooks(剧本)。

    playbook采用yaml格式,注意:每个冒号“:”后面必须有空格。

    playbook包含5种模块:

    task:主程序

    variables:变量,以变量形式传参

    templates:模板

    handlers:触发器

    roles:角色

    ansible-playbook常用命令

    ansible-playbook --syntax-check /root/ansible/httpd.yaml  ;剧本语法检测

    ansible-playbook -C /root/ansible/httpd.yaml    ;模拟执行剧本

    ansible-playbook /root/ansible/httpd.yaml    ;执行剧本

    openNESSonprem_controller.yml示例:

    ---
    
    # Deploy EdgeController on given host(s)
    - hosts: controller_group
      serial: 1
      pre_tasks:
      - debug:
          msg: "Setting up {{ inventory_hostname | upper }} at {{ ansible_host }}"
      - fail:
          msg: "Only one controller is supported"
        when:
        - groups['controller_group'] is defined
        - (groups['controller_group']|length>1)
      - include_tasks: ./tasks/precheck_hostname.yml
    
      roles:
        - role: offline/restore/transfer
          when: offline_mode
        - role: offline/restore/yum/setup
          when: offline_mode
        - role: os_setup
        - role: docker
        - role: git_repo
        - role: golang
        - role: openness/onprem/master
        - role: cnca/onprem
        #- role: ngc_test/onprem/master
        - role: offline/restore/yum/clean
          when: offline_mode

    使用 include 语句引用 task 文件的方法,可允许你将一个配置策略分解到更小的文件中。

    roles

    role定义一个独立服务的集合,可单独完成某一部分任务,方便playbook复用。

    Roles 的概念来自于这样的想法:通过 include 包含文件并将它们组合在一起,组织成一个简洁、可重用的抽象对象。这种方式可使你将注意力更多地放在大局上,只有在需要时才去深入了解细节。

    roles的目录文件包含:

    files:定义src源文件

    handlers:定义触发器

    tasks:定义任务,必须包含文件main.yaml或main.yml,定义任务。

    templates:定义模板文件

    vars:定义变量

    inventory清单配置文件

    ansible可同时操作属于一个组的多台主机,组合主机间的关系通过inventory文件配置。默认的文件路径为/etc/ansible/hosts。

    [all]
    node01 ansible_ssh_user=root ansible_host=192.168.1.11
    #node02 ansible_ssh_user=root ansible_host=192.168.1.12
    controller01 ansible_ssh_user=root ansible_host=192.168.1.100
    
    [edgenode_group]
    node01
    
    [controller_group]
    controller01

    方括号[]中是组名,用于对系统进行分类,便于对不同系统进行个别的管理

    ansible_ssh_host
          将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
    
    ansible_ssh_port
          ssh端口号.如果不是默认的端口号,通过此变量设置.
    
    ansible_ssh_user
          默认的 ssh 用户名
    
    ansible_ssh_pass
          ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
    
    ansible_sudo_pass
          sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
    
    ansible_sudo_exe (new in version 1.8)
          sudo 命令路径(适用于1.8及以上版本)
    
    ansible_connection
          与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
    
    ansible_ssh_private_key_file
          ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
    
    ansible_shell_type
          目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh''fish'.
    
    ansible_python_interpreter
          目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  *BSD, 或者 /usr/bin/python
          不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).
    
          与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....

    示例

    openNESS采用ansible管理安装:

    https://github.com/open-ness/openness-experience-kits.git

    使用参考:

    https://github.com/open-ness/specs/blob/master/doc/getting-started/on-premises/controller-edge-node-setup.md

    https://github.com/open-ness/specs/blob/master/doc/getting-started/on-premises/offline-deployment.md

    可直接通过ansible-playbook执行剧本:

    ansible-playbook -vv ./onprem_cleanup.yml --inventory inventory.ini

    ansible-playbook -vv ./onprem_controller.yml --inventory inventory.ini

    ansible-playbook -vv ./onprem_node.yml --inventory inventory.ini

    ansible-playbook -vv ./offline_prepare.yml --inventory offline_preparation_inventory.ini

    参考:

    1. https://docs.ansible.com/  ansible官网

    2. Ansible  入门博客

    3. 自动化运维工具——【ansible详解 一】

    4. Ansible中文权威指南

  • 相关阅读:
    战国时期主张合众联横的两位游士
    解读蓝帆“取势,明道,优术”
    云起龙骧
    取势明道优术_百度百科
    曾鸣[长江商学院教授]_互动百科
    E=MC2
    罗斯福6号_百度百科
    时尚大帝_百度视频
    群星云集 BOSS上海时装秀—情沪魅影- 在线观看
    林志玲“情沪魅影”时装片展情缘-中新网
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/12252964.html
Copyright © 2020-2023  润新知