• 15.RedHat认证-Ansible自动化运维(上)


    15.RedHat认证-Ansible自动化运维(上)

    RHCE8-RH294

    Ansible自动化(Ansible版本是2.8.2)

    Ansible介绍

    1.Ansible是什么?
    Ansible是一个简单的强大的无代理的自动化运维工具(Ansible是自动化运维工具)
    

    Ansible特点

    简单的Ansible-Simple
    Ansible Playbooks是容易理解,容易看懂的。playbooks是非常容易理解和修改的自动化工具。不需要特
    别复杂的编程能力就能写playbook。playbook顺序执行task。playbook简单涉及让每个团队都能很容易上手使用
    
    
    强大的Ansible-Powerful
    你可以使用ansible来部署应用,进行配置管理,工作流自动化运维,网路自动化运维。Ansible可用于协调
    整个应用程序生命周期
    
    
    无代理的Ansible-Agentless
    Ansible被建立为无代理的架构。通常,Ansible通过使用OpenSSH或WinRM来连接到被管理的主机并且
    经常(但不全是)通过向被管理主机推送叫Ansible模块的小程序来运行tasks。这些程序用于将系统置于
    特定的期望状态。任何被推送的模块当ansible任务执行完之后将会被移除。你可以很快的上手ansible,因
    为ansible在被管理主机上不需要任何特殊的代理。因为客户端没有代理,所以Ansible是更高效的并且相
    比其他的自动化运维工具更安全。
    

    Ansible优势

    跨平台支持
    Ansible的无代理特性支持Linux,Windows,Unix和网络设备,无论物理机,虚拟机,云主机和容器环境都能支持
    
    易懂易上手
    被写成YAML的text文件的Ansible Playbooks是易懂的并且能帮助任何人快速理解并上手
    
    完美应用描述
    Ansible Playbooks可以进行任何更改,并且可以描述和记录应用程序环境的各个方面
    
    简单的版本管理
    Ansible Playbooks和project是明文的text。它们可以像源代码一样对待并放置在现有的版本控制系统中
    
    支持动态的Inventories
    Ansible管理的计算机列表可以从外部源动态更新,以便始终捕获所有托管服务器的正确,最新列表,无论基础架构或位置如何
    
    与其他系统轻松集成的编排
    HP SA,Puppet,Jenkins,Red Hat Satellite和其它的在你环境中的系统都可以被集成到你的Ansible中
    
    
    Ansible是第一种可以跨IT读写的自动化语言。它也是唯一能够从开始到结束自动化应用程序生命周期和连续
    交付管道的自动化引擎。
    

    Ansible概念和架构

    控制节点
    在Ansible的架构中有两种类型的机器,一类是控制节点,一类是被管理主机。Ansible被安装并且运行在
    控制节点上,并且这类机器上有你的项目文件的副本。控制节点可以是管理员的笔记本,也可以是一个被
    很多管理共同使用的系统,也可以是一个运行Ansible Tower的服务器。
    
    
    被管理主机-Inventory
    被管理主机被列在Inventory中,inventory将这些被管理主机组织进不同的group中进行管理。inventroy
    可以被定义在静态的text文件中,或者被定义在动态的脚本中。
    
    
    Playbook
    不用写复杂的脚本,Ansible用户创建高等级的plays来保证主机处在特定的状态。一个剧本在主机上执行
    一系列的任务。这些剧本在text文件中被表达为YAML的格式。一个包含一个或更多的play文件叫做
    playbook。
    
    
    Task
    每个task运行一个带着特定参数的module,每个module都是一段很少的代码,该代码可以用Python,
    PowerShell或其他的语言写。每个模块本质上都是工具包中的工具。Ansible附带了数百个可用于执行各种
    自动化任务的有用模块。这些模块可以操作系统中的文件,安装软件或者做系统调用。
    
    
    安全的多次运行
    当在task中使用模块时,模块通常确保关于机器的某些特定事物处于特定状态。例如,task结余使用模块来
    确定一个文件是否存在,是否有特定的权限和内容,而使用不同模块的任务可以确保挂载了特定的文件系
    统。如果系统不在那个状态,task将会将系统置成那个状态。如果系统已经处在了那个状态,它将什么都
    不会做。如果一个task失败了,Ansible的缺省行为是为失败的主机终止剩余的剧本。Tasks,Plays和
    playbook是idempotent(幂等的)。你可以在同样的主机上安全的运行多次同样的playbook,并且当你的
    系统处在正确的状态时,playbook当运行时将不会做任何改变。
    
    
    Ansible插件
    Ansible也使用插件。插件是您可以添加到Ansible来扩展它,并且能适应新用途和平台的代码。
    
    
    Ansible架构
    Ansible架构是无代理的。通常,当一个管理员运行一个Ansible Playbook或者ad hoc命令时,控制节点
    通过使用SSH或WinRM来连接到被管理主机。这意味着在被管理主机客户端不必安装特定的代理软件,并
    且不必允许特殊的网络流量传输到非标准端口
    

    rh294虚拟机(实验环境)

    实验环境分享链接

    链接:https://pan.baidu.com/s/1883uarHug1aJVWRmIt-XaQ
    提取码:6666
    下载到本地后,右键通过VMworkStation 打开这个文件(RH294-SCSI.vmx)即可
    在这里插入图片描述

    rh294虚拟机的账号和密码
    username:kiosk
    password:redhat
    username:root
    password:Asimov
    登陆环境时,选择kiosk用户登陆,不要用root登陆
    

    classroom environment

    在这里插入图片描述

    在rh294的机器里面有7个基于KVM的虚拟机,分别如下:
    workstation虚拟机(作为ansible control host)
    servera,serverb,serverc,serverd(作为ansible managed host)
    bastion(提供了一个外部网络)
    classroom虚拟机(提供了练习环境脚本,软件仓库,课程材料)
    你如果想管理这些教学环境的虚拟机,不需要掌握虚拟化知识。红帽提供了非常方便的管理工具rht tools。
    red hat training tools。
    
    
    这些虚拟机的启动顺序,先启动classroom,在启动剩下所有的虚拟机。
    刚开始的环境,虚拟机并没有在环境中存在,需要使用命令拉取虚拟机。
    
    
    [kiosk@foundation0 ~]$ rht-vmctl fullreset classroom
    Are you sure you want to full reset classroom? (y/n) y
    Powering off classroom..
    Full resetting classroom.
    Creating virtual machine disk overlay for rh294-classroom-vda.qcow2
    Starting classroom.
    rht-vmctl命令就是rht tools。
    rht-vmctl fullreset的意思就是完全重置某个虚拟机(虚拟机的删除重建)
    

    在这里插入图片描述

    classroom启动之后,我们第一次加载环境,需要将其他的虚拟机文件全部加载到环境里面
    [kiosk@foundation0 ~]$ rht-vmctl fullreset all   #将除了classroom之外的所有虚拟机全部删除重建
    即使你有kvm虚拟化的管理经验,也不建议你用kvm的相关操作来管理
    
    [kiosk@foundation0 ~]$ su -
    Password:
    [root@foundation0 ~]# virsh destroy servera   # 立即停止某个虚拟机
    Domain servera destroyed
    [root@foundation0 ~]# virsh list --all
    Id Name State
    ----------------------------------------------------
    8 classroom running
    9 bastion running
    10 workstation running
    12 serverb running
    13 serverc running
    14 serverd running
    - servera shut off
    [root@foundation0 ~]# virsh start servera
    Domain servera started
    [root@foundation0 ~]# virsh list --all
    Id Name State
    ----------------------------------------------------
    8 classroom running
    9 bastion running
    10 workstation running
    12 serverb running
    13 serverc running
    14 serverd running
    15 servera running
    
    墙裂建议用rht tools来管理这些虚拟机
    rht-vmctl status all 查看所有虚拟机的状态
    [kiosk@foundation0 ~]$ rht-vmctl status all
    bastion RUNNING
    workstation RUNNING
    servera RUNNING
    serverb RUNNING
    serverc RUNNING
    serverd RUNNING
    [kiosk@foundation0 ~]$ rht-vmctl status classroom
    classroom RUNNING
    

    在这里插入图片描述

    virt-manager命令可以打开图形化的KVM工具

    在这里插入图片描述

    [kiosk@foundation0 ~]$ rht-vmctl reset all
    #相当于将所有的虚拟机都恢复快照
    
    [kiosk@foundation0 ~]$ rht-vmctl poweroff all
    #关闭所有的虚拟机
    all不包含classroom
    
    [kiosk@foundation0 ~]$ rht-vmctl status all
    bastion DEFINED
    workstation DEFINED
    servera DEFINED
    serverb DEFINED
    serverc DEFINED
    serverd DEFINED
    [kiosk@foundation0 ~]$ rht-vmctl start all  # 启动所有的虚拟机
    [kiosk@foundation0 ~]$ rht-vmctl status all
    bastion RUNNING
    workstation RUNNING
    servera RUNNING
    serverb RUNNING
    serverc RUNNING
    serverd RUNNING
    
    [kiosk@foundation0 ~]$ rht-vmctl poweroff servera
    Are you sure you want to poweroff servera? (y/n) y
    Powering off servera..
    
    [kiosk@foundation0 ~]$ rht-vmctl status all
    bastion RUNNING
    workstation RUNNING
    servera DEFINED
    serverb RUNNING
    serverc RUNNING
    serverd RUNNING
    
    
    #-----------------------------------------------------------------------------------------------------
    教学环境的主机解析文件
    [kiosk@foundation0 ~]$ cat /etc/hosts
    127.0.0.1 localhost localhost.localdomain localhost4
    localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6
    localhost6.localdomain6
    ### rht-vm-hosts file listing the entries to be appended to /etc/hosts
    #
    172.25.250.9 workstation.lab.example.com workstation
    172.25.250.10 servera.lab.example.com servera
    172.25.250.11 serverb.lab.example.com serverb
    172.25.250.12 serverc.lab.example.com serverc
    172.25.250.13 serverd.lab.example.com serverd
    172.25.250.254 bastion.lab.example.com bastion
    
    
    在rh294的环境里面classroom给我们提供了两个web网站,分别是content.example.com和materials.example.com
    # 可以在虚拟机里的浏览器里直接访问
    

    如何操作我们的RH294环境

    我们后面的练习都是通过rh294的物理操作系统连接到workstation来操作
    workstation是我们的ansible control节点
    servera~d是我们的ansible managed节点
    几乎所有的虚拟机的root密码都是redhat
    除了root用户之外还有一个叫做student的特权用户,该用户的密码是student
    classroom的root密码是Asimov
    
    
    
    在rhel8系统,ansible会自动的根据你的平台的python版本去选择。
    [student@workstation ~]$ yum list platform-python
    
    
    如果你是rhel系统,需要使用订阅命令通过RHN连到红帽的软件仓库进行下载安装。
    在教学环境里面,已经给我们集成了相关的软件仓库。
    
    #Workstation是ansible的控制节点,我们只在控制节点安装ansible即可,被管理节点不需要安装Ansible!!!
    
    [student@workstation ~]$ sudo yum -y install ansible
    [sudo] password for student:
    Last metadata expiration check: 0:49:06 ago on Wed 03 Jun 2020 09:34:52 PM
    CST.
    Package ansible-2.8.0-1.el8ae.noarch is already installed.
    Dependencies resolved.
    Nothing to do.
    Complete!
    
    # 查看控制节点的python版本,
    # 切记:被管理主机必须要有python环境
    [student@workstation ~]$ ansible --version
    ansible 2.8.0
      config file = /etc/ansible/ansible.cfg
      configured module search path = ['/home/student/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python3.6/site-packages/ansible
      executable location = /usr/bin/ansible
      python version = 3.6.8 (default, Apr  3 2019, 17:26:03) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
    

    Ansible安装练习(Lab环境的安装)

    [kiosk@foundation0 ~]$ ssh workstation
    [student@workstation ~]$ lab intro-install start # 其实这个脚本里删除了ansible,就是想让我们自己练习安装ansible
    
    [student@workstation ~]$ sudo yum -y install ansible # 安装ansible
    
    [student@workstation ~]$ ansible --version
    ansible 2.8.0
    config file = /etc/ansible/ansible.cfg
    configured module search path = ['/home/student/.ansible/plugins/modules',
    '/usr/share/ansible/plugins/modules']
    ansible python module location = /usr/lib/python3.6/site-packages/ansible 	# ansible模块的位置
    executable location = /usr/bin/ansible
    python version = 3.6.8 (default, Apr 3 2019, 17:26:03) [GCC 8.2.1
    20180905 (Red Hat 8.2.1-3)]
    
    [student@workstation ~]$ lab intro-install finish
    Cleaning up environment:
    . Cleaning up................................................. SUCCESS
    

    CentOS8安装ansible

    [root@control-host ~]# cat /etc/redhat-release
    CentOS Linux release 8.0.1905 (Core)
    #确保internet的可达性
    
    [root@control-host ~]# yum repolist
    如果想在centos上安装ansible有两种方法,一种是源码包安时,还有一种是通过epel软件仓库安装
    
    [root@control-host ~]# yum -y install epel-release
    # 上面软件安装完成之后会自动帮你生成epel的软件仓库
    [root@control-host ~]# yum repolist
    
    # 安装ansible
    [root@control-host ~]# yum list | grep ansible
    -----------------------------------------------------
    ansible.noarch 2.9.9-1.el8	epel
    ansible-doc.noarch 2.9.9-1.el8	epel
    ansible-freeipa.noarch 0.1.6-4.el8	AppStream
    centos-release-ansible-29.noarch 1-2.el8	extras
    -----------------------------------------------------
    [root@control-host ~]# yum -y install ansible
    [root@control-host ~]# ansible --version
    ---------------------------------------------------
    ansible 2.9.9
    config file = /etc/ansible/ansible.cfg
    configured module search path = ['/root/.ansible/plugins/modules',
    '/usr/share/ansible/plugins/modules']
    ansible python module location = /usr/lib/python3.6/site-packages/ansible
    executable location = /usr/bin/ansible
    python version = 3.6.8 (default, May 21 2019, 23:51:36) [GCC 8.2.1
    20180905 (Red Hat 8.2.1-3)]
    ----------------------------------------------------------------
    
  • 相关阅读:
    初识Java语言中的lambda表达式和函数式接口
    Java 如何实现 List<String> 的深拷贝?
    侦听器&&模板引用&&组件注册&&组件之间的数据传递
    新零售SaaS架构:商品系统架构设计
    杰理之BLE优化原理【篇】
    Word第一课
    SQLite简单介绍
    服务器硬件基础知识分享:构建稳定高效计算环境的基石
    金仓数据库KingbaseES接口协议解析工具使用指南(2. 概述)
    Redis的发布与订阅
  • 原文地址:https://blog.csdn.net/CNNUMBER/article/details/139610955