Ansible 学习笔记(一)学习实验环境准备

Ansible 介绍

Ansible 是一个运维自动化工具,可以通过 SSH 协议对远程主机进行管理,对远程主机执行批量操作,包括:文件复制、软件包安装、服务的启动重启等。

Ansible 解决了如何大批量、自动化的实现系统配置、应用部署、命令和服务操作的问题。其脚本具有灵活、可重入的特性,可以极大地减少运维人员的重复劳动,提高了运维效率。

架构

Ansible 与远程主机通过 SSH 协议相连,被管理主机需要配置并启动 SSH 服务,除此之外不需要其他任何软件。

Ansible 可以同时管理 Linux 操作系统的不同发行版本以及 Windows 系统等。

涉及的一些专业术语

Control node:控制节点,安装了 Ansible 服务的主机,主要用来发布任务、调用功能模块,对其他节点进行批量操作。

Managed nodes:受控节点,被 Ansible 服务所管理的主机,是模块命令的被执行对象。

Inventory:主机清单,受控节点列表,可以是 IP 地址、主机名或域名。

Modules:模块,特定功能代码,默认有上千款功能模块。

Task:任务,Ansible 受控节点上将要被执行的操作。

Playbook:剧本,使用 YAML 语言编写的可重复执行的任务列表,也可称之为脚本,通常把常用操作写道剧本文件中,下次可以重复执行一遍。

Roles:角色,用于结构化的组织 Playbook,通过调用角色实现一连串的功能。

准备实验环境

两台或多台主机:一台作为控制节点,剩下的作为受控节点。

控制节点,安装 Ansible 服务;受控节点安装和配置好 ssh 服务。

控制节点与受控节点在同一局域网内,二层或三层可达。

image-20220825114519733

受控节点配置

安装操作系统

openEuler 21.09(任意 Linux 系统均可)

玩转 openEuler (一)-- 系统安装
OpenEuler 是一款开源的、免费的 Linux 发行版操作系统。该系列文章是我学习 OpenEuler 操作系统的笔记,这是第一篇——操作系统的安装

修改主机名

每个受控节点都需要配置,这里以受控节点 node1 为例

[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# bash

配置网络

每个受控节点都需要配置,这里以受控节点 node1 为例

[root@node1 ~]# nmcli connection modify ens32 ipv4.addresses 172.16.8.10/24 ipv4.gateway 172.16.8.2 ipv4.method manual
[root@node1 ~]# nmcli connection modify ens32 ipv4.dns 114.114.114.114
[root@node1 ~]# nmcli connection down ens32
[root@node1 ~]# nmcli connection up ens32

关闭 SELinux

每个受控节点都需要配置,这里以受控节点 node1 为例

  1. 临时关闭
[root@node1 ~]# setenforce 0
  1. 修改配置文件,永久关闭
[root@node1 ~]# vi /etc/selinux/config

设置 SELINUXdisabled

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

关闭防火墙

关闭防火墙并设置防火墙为开机不启动,每个受控节点都需要配置,这里以受控节点 node1 为例

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld

开启 SSH 服务端

openEuler 操作系统的 ssh 服务默认开启

控制节点配置

安装操作系统

openEuler 21.09(任意 Linux 系统均可)

玩转 openEuler (一)-- 系统安装
OpenEuler 是一款开源的、免费的 Linux 发行版操作系统。该系列文章是我学习 OpenEuler 操作系统的笔记,这是第一篇——操作系统的安装

修改主机名

[root@localhost ~]# hostnamectl set-hostname control
[root@localhost ~]# bash

配置网络

[root@control ~]# nmcli connection modify ens32 ipv4.addresses 172.16.8.10/24 ipv4.gateway 172.16.8.2 ipv4.method manual
[root@control ~]# nmcli connection modify ens32 ipv4.dns 114.114.114.114
[root@control ~]# nmcli connection down ens32
[root@control ~]# nmcli connection up ens32

配置软件源

openEuler 操作系统安装好后自动软件源,如果觉得自带的源下载速度较慢可以替换为阿里的的源,其他操作系统的软件源配置参考各系统 man 手册

[root@control ~]# sed -i "s@http://repo.openeuler.org/openEuler-21.09/@https://mirrors.aliyun.com/openeuler/openEuler-21.09/@g" /etc/yum.repos.d/openEuler.repo
[root@control ~]# yum clean all
[root@control ~]# yum makecache

安装 Ansible 服务

[root@control ~]# dnf install -y ansible

安装完成

安装完毕后,Ansible 服务默认已经启动,可以执行 ansible --version 查看 Ansible 服务的版本及配置信息

[root@control ~]# ansible --version
ansible 2.9.24
  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.8/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.5 (default, Sep 29 2021, 20:02:21) [GCC 10.3.1]

配置主机 hosts 文件

[root@control ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.8.11     node1
172.16.8.12     node2
172.16.8.13     node3

配置控制节点和受控节点连接

  1. 生成 ssh 密钥对
[root@control ~]# ssh-keygen
  1. 使用 for 循环将公钥拷贝到各个受控节点,需要分别输入受控节点的密码
[root@control ~]# for i in {1..3};do ssh-copy-id -i ~/.ssh/id_rsa.pub root@node$i;done

配置主机清单

将受控节点的 IP 地址写入到主机清单文件中,控制节点就可以基于清单对主机进行管理,还可以在清单中对主机进行分类

[root@control ~]# vim /etc/ansible/hosts

我这里将 node1 和 node2 归类到 [web] 类中,node3 归类到 [db] 类中,可以更加实际的业务情况进行分类,分类名称可以自定义

[web]
node1
node2
[db]
node3

使用 ansible-inventory --graph 可以查看受控节点的信息

[root@control ~]# ansible-inventory --graph
@all:
  |--@db:
  |  |--node3
  |--@ungrouped:
  |--@web:
  |  |--node1
  |  |--node2

最后

至此,一个满足学习 Ansible 的实验环境就准备好了。


THE END