zoukankan      html  css  js  c++  java
  • Ansible入门

    自动化运维常识

    运维工作

      系统安装   物理机、虚拟机

      程序包  安装、配置、服务启动

      批量操作

      程序发布

      监控

    运维层次

      OS previsioning

        物理机 PXE、Cobbler(选择多版本操作系统)

        虚拟机 Image Templates

      Configuration

        puppet (ruby)

        saltstack (python)

        chef

        cfengine

      Command and Control

        fabric

    预发布验证

      新代码先发布到测试服务器上(配置和生产环境相同,未接入调度器)

    程序发布

      不能影响用户体验

      系统不能停机

      不能导致系统故障或造成系统不可用

    灰度发布

    /webapp/shopping-1.1
    /webapp/app/shopping 链接文件指向shopping*
    
    /webapp/shopping-1.2
    /webapp/app/shopping
    
    如果1.2版本有问题,修改链接指向1.1,版本回滚
    
    step1:
    
        在调度器上关闭一批服务器,更改主机模式为maintanance模式(用户Session不会第一时间被调度到其它Real Server上)
    
    step2:
    
        关闭服务
    
    step3:
    
        部署新版本的应用程序
    
    step4:
    
        启动服务
    
    step5:
    
        在调度器上启用着一批服务器
    
    工具使用
    
        自动化灰度发布的脚本、平台

    运维工具分类

      agent

        puppet

        func

      agentless

        ansible

        fabric

    Ansible初识

    集合众多开源工具功能

    Configuration 
    
        cfengine
    
        Chef
    
        Puppet
    
    Deployment
    
        Capistrano
    
        Fabirc    
    
    Ad-Hoc Tasks 
    
        Func
    
    Multi-Tier Orchestration
    
        Juju
    
        sort of

    开发语言python

      核心模块
        paramiko SSH客户端API

        PyYAML 模块编排

        Jinja2 模板语言

    核心组件

    SSH协议认证或密码认证

      基于密钥认证

      在inventor中明文指定用户名密码

    支持主从模式

      master

        ansible is a ssh client

      salve

        ssh server

    支持自定义模块

      Playbook

        细致化安装流

    Ansible简单使用

    安装

    yum源安装

    1 yum install -y ansible

    编译安装

    # 解决依赖

    yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto tar -xvzf ansible-2.4.2.tar.gz cd ansible-2.4.2 python setup.py build python setup.py install mkdir /etc/ansible cp -r examples/* /etc/ansible

    简介

    Name        : ansible
    Arch        : noarch
    Version     : 2.4.2.0
    Release     : 2.el7
    Size        : 38 M
    Repo        : installed
    From repo   : extras
    Summary     : SSH-based configuration management, deployment, and task execution system
    URL         : http://ansible.com
    License     : GPLv3+
    Description : 
                : Ansible is a radically simple model-driven configuration management,
                : multi-node deployment, and remote task execution system. Ansible works
                : over SSH and does not require any software or daemons to be installed
                : on remote nodes. Extension modules can be written in any language and
                : are transferred to managed machines automatically.

    文件解析

    主配置文件
    
        /etc/ansible/ansible.cfg
    
    主机清单
    
        /etc/ansible/hosts
    
    角色配置
    
        /etc/ansible/roles
    
    剧本文件
    
        /usr/bin/ansible-playbook
    
    卫星主机
    
        /usr/bin/ansible-galaxy
        /usr/bin/ansible-galaxy-2
        /usr/bin/ansible-galaxy-2.7
    
    使用文档
    
        /usr/bin/ansible-doc
        /usr/bin/ansible-doc-2
        /usr/bin/ansible-doc-2.7

    查看模块及功能参数

    ansible-doc -l (非常多,就不列出了)
    
    ansible-doc -s <MODULE_NAME>

    简单语法分析

    # 语法 ansible <host-pattern> [options]
    
    -f FORKS, --forks FORKS  # 并发执行的线程数,一个线程对应一个HOST
    
    -m MODULE_NAME, --module-name MODULE_NAME  # 指定以哪个模块运行
    
    -a MODULE_ARGS, --args MODULE_ARGS  # 指定模块特有的参数

    常用模块

    command 远程执行一条命令
    
    cron 添加一条计划任务
    
        name 每条任务最好指定以个名字
        
        day hour minute month weekday
    
        job 指定运行的命令
    
        state 指定命令是生效还是移除 present absent
    
        user 指定以哪个用户身份执行任务
    
        ...
    
        -a 'name=root ... '
    
    user 用户管理
    
    group 组管理
    
    copy 文件复制
    
        ansible-doc -s copy
    
        content 指定的内容将被输出到目标文件中,与src不能同时使用
    
        src 指定原文件or目录
    
        desc 远程主机的绝对路径
    
        ... 
    
    file 文件管理
    
        链接文件
    
            ansible all -m file -a 'path=/tmp/fatab.link src=/etc/fstab state=link'
    
    ping 测试连通性
    
        ansible all -m ping
    
    service 服务管理
    
        enabled 开机启动
    
        name 服务名
    
        state started stopped restarted
    
        ansible webserver -m service -a 'enabled=true name=httpd state=started'
    
    shell 执行命令
    
        # ansible all -m command -a 'echo redhat | passwd --stdin admin' 执行成功但未生效,-a 参数不识别管道符,变量
    
        ansible all -m shell -a 'echo redhat | passwd --stdin admin'
    
    script 执行脚本
    
        # 将本地的脚本发送到远程主机执行,脚本文件以相对路径指定
    
        ansible all -m script -a 'xxx.sh'
    
    yum 软件包安装
    
        安装 ansible all -m yum -a 'name=httpd'
    
        卸载 ansible all -m yum -a 'name=httpd state=absent'
    
    setup 收集facts信息
    
        # 每个被管理节点在接受命令前,会将当前主机的相关信息(操作系统、IP地址、MAC地址等)报告给ansible主机
    
        ansible all -m setup 

    Ansible简单实例

    1个控制端 + 3个被控制端

      Control 192.168.180.128

      Client1 192.168.180.130

      Client2 192.168.180.131

      Client3 192.168.180.132

    step1:
    
        # ansible 通过ssh实现配置管理、应用部署、任务执行等功能,因此,事先配置ansible端基于密钥认证于个被管理节点通信
    
        ssh-keygen -r rsa -P ''
    
        ssh-copy-id -i ~/.ssh/id_rsa.pub root@127.0.0.1
    
        ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.180.130
    
        ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.180.131
    
        ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.180.132
    
    step2:
    
        # 指定主机清单
    
        备份一下hosts文件
    
            cd /etc/ansible/
    
            cp hosts {,.backup}
    
        vim hosts
    
        # 把原文配置删除,自己指定host清单
    
            :.,$d
    
            [webserver]
    
            192.168.180.130
    
            192.168.180.131
    
            [dbserver]
    
            192.168.180.132
    
    step3:
    
        # 测试主机清单是否生效
    
        # 是否可以管理远程主机
    
        ansible all -m command -a 'ip addr'
    
        ansible webserver -a 'ip addr'
    
        ansible 192.168.180.130  -a 'ip addr'

     

  • 相关阅读:
    C艹老师布置的思考题
    计蒜客练习题:网页跳转(java / C++仔细)
    计蒜客练习题:水果店(嵌套map)
    计蒜客练习题:蒜头君面试(map + max_element)
    小希的迷宫 HDU 1272(并查集)
    OpenJ_Bailian 1061
    Aizu 2224(并查集)
    Aizu 0189 (最短路)
    POJ 2377(最大生成树)
    OpenJ_Bailian 4118(dp)
  • 原文地址:https://www.cnblogs.com/cq146637/p/8732575.html
Copyright © 2011-2022 走看看