• ansible


    DevOps:

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

    自动化运维工具对比

    C/S 架构:客户端/服务端

    Puppet:基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱

    SaltStack:基于 Python 开发,采用 C/S 架构,YAML使得配置脚本更简单.需要配置客户端及服务器端;每台被控制节点需要安装agent

    Ansible:基于 Python开发,分布式,无需客户端,轻量级,配置语法使用YAML语言,更强的远程命令执行操作 (优点)

    Ansible简介(是什么、做什么、特点)

    ansible是新出现的自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架

    一、安装

    245(ansible)

    vim /etc/hosts   (做解析)

    IP+名字

    配置ssh公钥认证:控制节点需要发送ssh公钥给所有非被控制节点(做免密)

    ssh-keygen

    yum list | grep ansible  //有ansible 仓库

    yum install -y ansible   //下载ansible

    ansible --version   //查看版本、配置文件、python版本

    ansible --help   //帮助手册

    二、主机清单inventory

    vim /etc/ansible/hosts (要管理谁就写入谁)

    web-1 //为主机

    [db] 为主机组

    查看组内主机列表

    语法:ansible  组名  --list-hosts

    ansible web --list-hosts   //查看组里的主机

    [root@ansible-server ~]# ansible -i /opt/hostlist all -m ping -o
    -i:指定清单文件

    -m:调用模块

    all:所有组

    -o:改变输出格式

    三:点对点Ad-Hoc

    ansible-doc -l   //列出所有模块

    ansible-doc -s yum   //yum的使用方法

    用户管理模块:user

    添加用户并设置密码:

    [root@ansible-server ~]# ansible webservers1 -m user -a "name=liudehua password=`echo 1234 | openssl passwd -1 -stdin`" -o
    "name=   "  #如:指定的用户名,要安装的软件
    -1 MD5加密算法

    删除用户:

    [root@ansible-server ~]# ansible webservers1 -m user -a "name=liudehua state=absent" -o
    adsent #删除用户,但是不会删除家目录

    组管理模块:group 

    gid:为组设置的可选GID
    name:要管理的组的名称
    state:该组是否应该存在于远程主机上;absent不在/默认是present在
    system:如果是,表示创建的组是系统组;默认时no

    [root@ansible-server ~]# ansible all -m group -a 'name=somegroup state=present'

    [root@ansible-server ~]# ansible all -m group -a 'name=somegroup state=absent' //删除组

    软件包管理模块:yum

    config_file:yum的配置文件 
    disable_gpg_check:关闭gpg_check 
    disablerepo:不启用某个源 
    enablerepo:启用某个源
    name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径 
    state:状态(present,absent,latest)

    [root@ansible-server ~]# ansible webservers1 -m yum -a "name=httpd state=latest" -o
    state=     #状态是什么,干什么
    state=absent        用于remove安装包
    state=latest       表示最新的
    state=removed      表示卸载

    卸载软件:

    [root@ansible-server ~]# ansible webservers1 -m yum -a "name=httpd state=removed" -o

    服务管理模块:service

    [root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started" #启动
    [root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=stopped" #停止
    [root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=restarted" #重启
    [root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=yes" #开机启动
    [root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=no"  #开机关闭

    文件模块:file

    [root@ansible-server ~]# ansible webservers1 -m file -a 'path=/tmp/88.txt mode=777 state=touch' #创建一个文件
    [root@ansible-server ~]# ansible webservers1 -m file -a 'path=/tmp/99 mode=777 state=directory' #创建一个目录

    收集信息模块:setup

    [root@ansible-server ~]# ansible web1 -m setup -a 'filter=ansible_all_ipv4_addresses'

    #只查询ipv4的地址
    filter:过滤

    [root@ansible-server ~]# ansible web1 -m setup -a 'filter=ansible_*_mb'       #内存的信息
    [root@ansible-server ~]# ansible -i /home/ansible/hostlist web -m setup -a 'filter=ansible_processor_cores'       #磁盘的信息
    [root@ansible-server ~]# ansible all -m setup --tree /tmp/facts 

    文件复制模块:copy

    [root@ansible-server ~]# ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
    [root@ansible-server ~]# ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"

    计划任务模块:cron

    获取每台主机的IP地址

    [root@xingdian ~]# ansible -i /home/ansible/hostlist web -m shell -a "ip a | grep eth0| awk 'NR==2{print $2}'" -o > a.txt && cat a.txt |awk '{print $9,$NF}'

    shell、command后跟在终端敲的命令

    一个典型的例子就是 shell 和 command 模块. 这两个模块在很多情况下都能完成同样的工作, 以下是两个模块之前的区别:
    command 模块命令将不会使用 shell 执行. 因此, 像 $HOME 这样的变量是不可用的。还有像 |,& 都将不可用
    shell 模块通过shell程序执行, 默认是/bin/sh, <, >, |, ;, & 可用

    获取每台主机的内存

    [root@xingdian ~]# ansible -i /home/ansible/hostlist web -m shell -a "free -m | awk 'NR==2'" > b.txt -o && cat b.txt | awk '{print $10}'

    四:剧本Playbook


    案列一:          

              touch file.yaml

              vim file.yaml

             

             检查语法错误

             

             执行

             ansible-playbook file.yaml

    案列二:

             handlers:由特定条件触发的Tasks

             安装ftp

             vim ftp.yaml

             

              ansible-playbook --syntax-check ftp.yaml

              ansible-playbook ftp.yaml

              删除ftp

             

             

    案列三

             [root@ansible-server ansible]# vim /home/ansible/yum.yml
    ---
     - hosts: web
       user: root
       tasks:
       - name: install nginx
         yum: name=nginx state=latest
         notify: diandian
       handlers:
       - name: diandian
         service: name=nginx state=started

    ansible-playbook --syntax-check /home/ansible/yum.yml

    ansible-playbook /home/ansible/yum.yml

    案例四:

    循环:迭代,需要重复执行的任务

    对迭代项的引用,固定变量名为”item”,使用with_items属性给定要迭代的元素

    元素:1.列表 2.字符串 3.字典

    基于字符串列表元素实战

    vim php.yaml

    - hosts: db
      user: root
      tasks:
      - name: install packages
        yum: name={{ item }} state=latest         #相当于for循环里面的i 
        with_items:                               #取值 。但是不支持通配符
         - httpd
         - php
         - php-mysql
         - php-mbstring
         - php-gd 

    验证

    vim user.yaml

    案列四

    vim tags.yaml

    上传植物僵尸  

    解压 unzip 

    vim apache.yaml

    ansible-playbook --syntax-check apache.yaml 

    ansible-playbook apache.yaml 

    apache 虚拟主机配置文件

     vi jspvz.conf 

       

       

  • 相关阅读:
    cube开源一站式云原生机器学习平台--volcano 多机分布式计算
    Ansible的filter
    HAL库STM32串口开启DMA接收数据
    MediaPlayer_Analyze-2-JNI
    Transformer中的Self-Attention以及Multi-Head Self-Attention(MSA)
    高忆管理:尾盘拉升是好事还是坏事?
    ZMQ之异步管家模式
    阿里云服务器+Frp+Proxifier工具进行内网穿透
    COPU陆首群教授应邀在ApacheCon Asia会议上致辞
    mac安装jdk
  • 原文地址:https://blog.csdn.net/2301_79092588/article/details/133123315