IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Ansible -> 正文阅读

[系统运维]Ansible

Ansible架构

用户通过ansible去管理各个主机,那么ansible就是我们所说的主控端,后面的Host为被控端。

在控制主机时,ansible是如何知道哪些主机是被自己控制的呢?

这就需要一个Host Inventory(主机清单),用于记录ansible可以控制网络中的哪些主机。另外,要配置和管理这些主机,可以采用两种方式,一种是单一的命令实现,另外一种也可以使用palybook实现。单一的命令模式是采用不同的模块进行管理,一个模块类似于一些管理的命令,如top,ls,ping等等,适用于临时性的操作任务。如果需要执行一些例行性或经常性的操作,则需要采用playbook的方式,playbook类似于一个脚本,将多个模块按一定的逻辑关系进行组合,然后执行。ansible还支持一些插件,如邮件、日志等,在和远程主机通信时,也会采用类似的连接插件,这里使用则是SSH协议的插件进行通信。
在这里插入图片描述

ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台

  • 核心:ansible
  • Core Modules: ansible自带的模块
  • Custom Modules: 核心模块功能不足时,用户可以添加扩展模块
  • Plugins: 通过插件来实现记录日志,发送邮件或其他功能
  • Playbooks: 剧本,YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能
  • Connectior Plugins: ansible基于连接插件连接到各个主机上,默认是使用ssh
  • Host Inventory: 记录由Ansible管理的主机信息,包括端口、密码、ip等

Ansible工作原理

1、管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块;

2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为ad-hoc;

3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。

注意事项

  • 执行ansible的主机一般称为主控端,中控,master或堡垒机

  • 主控端Python版本需要2.6或以上

  • 被控端Python版本小于2.4需要安装python-simplejson

  • 被控端如开启SELinux需要安装libselinux-python

  • windows不能做为主控端

Ansible安装

[root@localhost ~] dnf -y install epel-release
[root@localhost ~]# dnf -y install ansible
            #安装过程略
[root@localhost ~]# ansible -m setup localhost|grep python
            "_": "/usr/bin/python3.6"
        "ansible_python": {
            "executable": "/usr/bin/python3.6",
            "type": "cpython",
        "ansible_python_version": "3.6.8",
        "ansible_selinux_python_present": true,
[root@localhost ~]# 

构建Ansible清单

定义清单

清单定义Ansible将要管理的一批主机。这些主机也可以分配到组中,以进行集中管理。组可以包含子组,主机也可以是多个组的成员。清单还可以设置应用到它所定义的主机和组的变量。

可以通过两种方式定义主机清单。静态主机清单可以通过文本文件定义。动态主机清单可以根据需要使用外部信息提供程序通过脚本或其他程序来生成

使用静态清单指定受管主机

[root@localhost ansible]# vim inventory 
[webservers]
192.168.100.42
192.168.100.43
192.168.100.44
192.168.100.45
192.168.100.46

验证清单

若有疑问,可使用 ansible 命令验证计算机是否存在于清单中

[root@localhost ansible]# ansible webservers --list-hosts
  hosts (1):
    192.168.100.42
[root@localhost ansible]# vim inventory 
[root@localhost ansible]# ansible webservers --list-hosts
  hosts (5):
    192.168.100.42
    192.168.100.43
    192.168.100.44
    192.168.100.45
    192.168.100.46
[root@localhost ansible]# ansible 192.168.100.44 --list-hosts
  hosts (1):
    192.168.100.44
[root@localhost ansible]# ansible 192.168.100.47 --list-hosts
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.100.47
[WARNING]: No hosts matched, nothing to do
  hosts (0):
[root@localhost ansible]# 

如果清单中含有名称相同的主机和主机组,ansible 命令将显示警告并以主机作为其目标。主机组则被忽略

应对这种情况的方法有多种,其中最简单的是确保主机组不使用与清单中主机相同的名称。

构建Ansible清单

[root@localhost ansible]# ansible all --list-hosts   #列出默认清单文件中的所有受管主机
  hosts (5):
    192.168.100.42
    192.168.100.43
    192.168.100.44
    192.168.100.45
    192.168.100.46
[root@localhost ansible]# ansible ungrouped --list-hosts   #列出不属于任何组的受管主机
[WARNING]: No hosts matched, nothing to do
  hosts (0):
[root@localhost ansible]# ansible webservers --list-hosts    #列出属于某组的受管主机
  hosts (5):
    192.168.100.42
    192.168.100.43
    192.168.100.44
    192.168.100.45
    192.168.100.46
[root@localhost ansible]# 

自定义清单文件

将主机加入受管主机序列

[root@localhost ansible]# vim /etc/ansible/inventory
[webservers]
192.168.100.42 ansible_user=root ansible_password=1
~                                                      

查看是否ping通

[root@localhost ansible]# ansible all -m ping
192.168.100.42 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
[root@localhost ansible]# 

免密登录

将主机名和密码删除

[root@localhost ansible]# vim /etc/ansible/inventory
[webservers]
192.168.100.42 

进行免密登录

[root@localhost ~]# ssh-keygen -t rsa   #生成密钥过程省略
[root@localhost ~]# ssh-copy-id root@192.168.100.42
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.100.42's password: 

Number of key(s) added: 1  #输入密码

Now try logging into the machine, with:   "ssh 'root@192.168.100.42'"
and check to make sure that only the key(s) you wanted were added.

[root@localhost ~]# ansible all -m ping
192.168.100.42 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
[root@localhost ~]# 
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 23:19:00  更:2021-07-14 23:20:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 16:37:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码