镜像下载、域名解析、时间同步请点击 阿里云开源镜像站

Ansible原理

Ansible 是一款开源自动化平台。它是一种简单的自动化语言,能够在Ansible Playbook 中完美地描述 IT 应用基础架构。它也是一个自动化引擎,可运行 Ansible Playbook。

Ansible 可以管理强大的自动化任务,而且能够适应许多不同的工作流和环境。同时,Ansible 新用户可以非常快速地利用它来提高工作效率。

说白了就是批量化部署(控制)其他主机,控制的主机叫做控制节点(master),被控制的主机受控节点(node)

控制节点主机可以是:Linux、Unix

受控节点主机可以是:Linux、Unix、Windows

Ansible Playbook 像是任务书,它采用 YAML 文本文件编辑,易于阅读

当你需要使用 Ansible 时,只需要在控制节点上下载 ansiblepython,受控节点上只需下载 python 即可(python 的版本要求:python27+ / python35+

控制节点上还需要编写 Ansible清单Ansible配置文件,清单为受控节点分组,配置文件指定了清单的路径、SSH连接的用户和连接细节等等

我们还需要为 SSH 连接做一些相关配置,比如发送公钥,便于我们免密登录
为了方便起见,我们为受控节点的用户配置 免密sudo

环境搭建

基础配置

基础配置主要是一些简单的配置,为了方便我们做实验也做了统一规定

为了方便我们做实验,我们选用三台不同版本的 操作系统 来做实验,分别是:

  1. [root@master:~]$ cat /etc/redhat-release
  2. Rocky Linux release 8.5 (Green Obsidian)
  3. [root@node12:~]$ cat /etc/redhat-release
  4. CentOS Linux release 7.8.2003 (Core)
  5. [root@node13:~]$ cat /etc/redhat-release
  6. CentOS Stream release 8

当然还可以是其他版本,下载官网有:网易开源镜像站、清华大学开源镜像站、阿里巴巴开源镜像站

选择了版本,再将其 主机名 命名如下,以区分控制节点与受控节点:

  1. [root@master:~]$ hostname
  2. master
  3. [root@node12:~]$ hostname
  4. node12
  5. [root@node13:~]$ hostname
  6. node13

为其配置 IP,主机位分别为:111213

  1. [root@master:~]$ ip address show ens33
  2. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  3. link/ether 00:0c:29:67:de:22 brd ff:ff:ff:ff:ff:ff
  4. inet 192.168.32.11/24 brd 192.168.32.255 scope global noprefixroute ens33
  5. valid_lft forever preferred_lft forever
  6. inet6 fe80::20c:29ff:fe67:de22/64 scope link noprefixroute
  7. valid_lft forever preferred_lft forever
  8. [root@node12:~]$ ip address show ens33
  9. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  10. link/ether 00:0c:29:b1:4a:7d brd ff:ff:ff:ff:ff:ff
  11. inet 192.168.32.12/24 brd 192.168.32.255 scope global noprefixroute ens33
  12. valid_lft forever preferred_lft forever
  13. inet6 fe80::10eb:4b68:b809:f62f/64 scope link noprefixroute
  14. valid_lft forever preferred_lft forever
  15. [root@node13:~]$ ip address show ens33
  16. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  17. link/ether 00:0c:29:b1:6e:60 brd ff:ff:ff:ff:ff:ff
  18. inet 192.168.32.13/24 brd 192.168.32.255 scope global noprefixroute ens33
  19. valid_lft forever preferred_lft forever
  20. inet6 fe80::20c:29ff:feb1:6e60/64 scope link noprefixroute
  21. valid_lft forever preferred_lft forever

DNS解析 分别写入各自的 /etc/hosts 文件(这里以 master 为例展示)

  1. [root@master:~]$ cat /etc/hosts
  2. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. 192.168.32.11 master
  5. 192.168.32.12 node12
  6. 192.168.32.13 node13

ping 命令测试

file

为各自 添加用户,每台主机添加student用户,控制节点额外添加 class 用户

  1. [root@master:~]$ id student
  2. uid=1000(student) gid=1000(student) groups=1000(student)
  3. [root@master:~]$ id class
  4. uid=1001(class) gid=1001(class) groups=1001(class)
  5. [root@node12:~]$ id student
  6. uid=1000(student) gid=1000(student) groups=1000(student)
  7. [root@node13:~]$ id student
  8. uid=1000(student) gid=1000(student) groups=1000(student)

为每个 student 用户配置免密sudovim /etc/sudoers

file

SSH:控制节点生成公私钥,将公钥传给受控节点的 student 用户

  1. ##用class用户生成
  2. # 生成密钥
  3. ssh-keygen
  4. # 传公钥
  5. ssh-copy-id student@master
  6. ssh-copy-id student@node12
  7. ssh-copy-id student@node13

file

查看各自家目录

  1. [class@master:~]$ ll /home/class/.ssh/
  2. total 12
  3. -rw------- 1 class class 2602 Feb 19 19:58 id_rsa
  4. -rw-r--r-- 1 class class 566 Feb 19 19:58 id_rsa.pub
  5. -rw-r--r-- 1 class class 364 Feb 19 19:58 known_hosts
  6. [root@master:~]$ ll /home/student/.ssh/
  7. total 4
  8. -rw------- 1 student student 566 Feb 19 19:58 authorized_keys
  9. [root@node12:~]$ ll /home/student/.ssh/
  10. total 4
  11. -rw------- 1 student student 566 Feb 19 19:59 authorized_keys
  12. [root@node13:~]$ ll /home/student/.ssh/
  13. total 4
  14. -rw------- 1 student student 566 Feb 19 19:59 authorized_keys

环境配置

环境配置主要是软件包的下载

三台主机我们统一下载 python36:yum install pyton36 /yum module install python36

file

接下来就是控制节点 安装 Ansible
在安装之前,我们需要写 yum 源:vim /etc/yum.repos.d/epel.repo

  1. [epel]
  2. name=epel
  3. baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/
  4. gpgcheck=0

接下来安装:yum install ansible -y

file

查看版本:ansible --version

  1. [root@master:~]$ ansible --version
  2. ansible 2.9.27
  3. config file = /etc/ansible/ansible.cfg
  4. configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  5. ansible python module location = /usr/lib/python3.6/site-packages/ansible
  6. executable location = /usr/bin/ansible
  7. python version = 3.6.8 (default, Nov 9 2021, 14:44:26) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]

编写文件

我们一共需要编写两个文件(不包括 Ansible Playbook):清单、配置文件

配置文件一共有三类:

  1. ./ansible.cfg # 优先级最高,在工作目录下
  2. ~/.ansible.cfg # 优先级第二,在家目录下,是个隐藏文件
  3. /etc/ansible/ansible.cfg # 优先级最低

那么我们就新建一个目录为工作目录,在其下编写配置文件并执行 Ansible 命令

在哪里使用 ansible命令,那里就是工作目录

  1. # 如下则为配置文件的内容
  2. [defaults]
  3. inventory = ./inventory ; 指定了清单的路径
  4. remote_user = student ; 指定远程控制哪个用户
  5. ask_pass = false ; 设置为不需要密码的登录
  6. # 上面的等号两边要有空格,且下面留出空行
  7. [privilege_escalation]
  8. become=true ; 登录到受控主机后是否变为其他用户
  9. become_method=sudo ; sudo 方式变为其他用户(sudosu
  10. become_user=root ; 变为 root 用户
  11. become_ask_pass=false ; sudo 时无需密码

file

在工作目录下编写清单:vim ./work/inventory
清单的默认路径在 /etc/ansible/hosts,但是我们一般不使用它

  1. node12
  2. node13
  3. # 以下为分组
  4. [webservers]
  5. master
  6. node12
  7. [dbservers]
  8. node12
  9. node13
  10. # 这个写法是将两个组和为一个组
  11. [servers:children]
  12. webservers
  13. dbservers

file

测试:ansible 组名或主机名 --list-hosts[ -vvv]

必须在工作目录下执行,否则就会按照优先级加载配置文件;我们可以在后面跟上选项-v,它会根据 v的个数给出逐渐详细的过程

file

实验

1、以 all 主机组为目标执行 id 命令

2、使用 copy模块 修改所有主机上的 /etc/motd 文件内容为 welcome to ansible

3、使用 command模块 查看 /etc/motd 文件的内容

4、 使用 user模块 创建用户 xiaoming,uid 为 2000

先创建一个工作目录,并在其下编辑清单和配置文件

file

1、以 all主机组为目标执行 id命令:ansible all -m command -a id

file

2、使用 copy模块 修改所有主机上的 /etc/motd文件内容为 welcome to ansibleansible sons -m copy -a 'content="welcome to ansible\n" dest=/etc/motd'

file

3、使用·command模块 查看/etc/motd文件的内容:ansible sons -m command -a 'cat /etc/motd'

file

4、使用 user模块 创建用户 xiaoming,uid 为 2000:ansible sons -m user -a 'name=xiaoming uid=2000 state=present'

file

补充

Ansible 的用法是:ansible host-pattern -m module [-a 'module arguments'] [-i inventory]

这是它的临时命令,通常我们将这些指令写在 Ansible Playbook 中

它的返回值有三种,一种是上面出现的 CHANGED,表示执行成功并且已做出改变;还有一种就是 SUCCESS,表示执行成功,检查到已经是该状态故没有做出改变;最后一种就是 FAILED,就是执行错误。相应的,他们的颜色也有所不同

file

本文转自:https://blog.csdn.net/SuichI314/article/details/123020414

更多相关文章

  1. androidTV 9.0 开发调用系统jar异常报错,jar引用已导入还是报错,分
  2. Web Components系列(四) —— 认识 Shadow DOM
  3. DOM 节点的克隆和导入
  4. Kubernetes 部署 MySQL 集群
  5. 【北亚数据恢复】zfs文件系统的服务器误删除的数据恢复
  6. Android(安卓)SAX解析xml文件
  7. SpringBoot使用前缀树过滤敏感词的方法实例
  8. SpringBoot使用前缀树过滤敏感词的方法实例
  9. Java数据结构之平衡二叉树的原理与实现

随机推荐

  1. Android -- Toolbar跟随ListView滑动隐藏
  2. android 笔记handler
  3. Android搜索视媒体库视频 列表显示选择
  4. android主线程中Looper.loop()为什么不会
  5. Android(安卓)Device Monitor 报 open fa
  6. Android ant 打包 ant -f build.xml rele
  7. android中SimpleCursorAdapter _id错误的
  8. android gif view
  9. Android中利用画图类和线程画出闪烁的心
  10. Android打造万能适配器--RecyclerView