Administrator
Administrator
Published on 2024-07-14 / 112 Visits
0
0

Ansible部署及应用

1. Ansible是什么

Ansible是一款IT自动化工具。主要应用场景有配置系统、软件部署、持续发布及不停服平滑滚动更新的高级任务编排。

Ansible本身非常简单易用,同时注重安全和可靠性,以最小化变动为特色,使用OpenSSH实现数据传输 ( 如果有需要的话也可以使用其它传输模式或者pull模式 ),其语言设计非常利于人类阅读,即使是针对不刚接触Ansible的新手来讲亦是如此。

Ansible不使用C/S架构管理节点,即没有Agent。这样的架构使得Ansible不会存在如何升级远程Agent管理进程或者因为没有安装Agent而无法管理系统。 因为OpenSSH是非常流行的开源组件,安全问题也非常少 。 Ansible的去中心化管理方式深受业内认可, 即它只依赖OS的Key认证访问远程主机。 如需, Ansible可以便捷接入Kerberos, LDAP或者其它认证系统。

Snipaste_2024-11-21_00-03-20.png

2. 环境准备

OS

IP

角色

CentOS 7.9.2009

192.168.101.104

Ansible

CentOS 7.9.2009

192.168.101.105

Node

3. SSH免密钥登陆

Ansible通过OpenSSH连接到节点,把模块动作推送到节点以完成任务。配置私钥实现免密码登录,可以提高服务器管理效率,并保障信息安全。

了解更多可阅 https://azlioi.site/archives/2bc79ab8-1d37-4e22-98a6-4f2857d6223e

--生成SSH密钥
[root@104 ~]# ssh-keygen -t rsa -b 4096

--将公钥复制到远程主机
[root@104 ~]# ssh-copy-id root@192.168.101.105

--测试登录
[root@104 ~]# ssh 192.168.101.105

4. Ansible安装及使用

4.1 Ansible安装

--Centos7官方YUM源已经不维护,使用阿里源
[root@104 ~]# rm -rf /etc/yum.repos.d/*
[root@104 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

[root@104 ~]# yum -y install epel-release.noarch
[root@104 ~]# yum -y install ansible

4.2 主机清单

主机清单用于列出Ansible要管理的主机。可以使用IP地址或主机名。

默认主机清单文件位于/etc/ansible/hosts

[root@104 ~]# cat /etc/ansible/hosts 
[GG]                        --创建主机组GG
192.168.101.105             --添加主机到主机组GG

[GGBoy]                     --创建主机组GGBoy
192.168.[0:1].[0:254]       --把范围内主机添加到主机组GGBoy
server[a:z]                 --把范围内主机添加到主机组GGBoy

4.3 playbook剧本

Ansible Playbook是用YAML编写的自动化剧本,用于定义和执行一系列任务,以便实现可重复的配置管理和应用程序部署。

[root@104 ~]# cat 105.yaml 
---
- hosts: GG                         --指定GG组的主机为执行任务主机,如果填写All即/etc/ansible/hosts文件内所有主机

  tasks:
    - name: 创建 test.txt 文件      --任务名称
      shell: touch /root/test.txt  --模块,这里使用shell模块执行创建文件动作

[root@104 ~]# ansible-playbook 105.yaml   --ansible-playbook命令执行Playbook剧本

Snipaste_2024-07-18_01-23-50.png

  • TASK [Gathering Facts]

Ansible在执行Playbook时,会自动运行一个名为setup的模块,收集关于目标主机的一系列系统信息,可以根据收集情况判断主机在线情况。

  • TASK [创建test.txt文件]

正在执行Playbook据本里定义的TASK任务,changed表示Ansible在目标主机上进行了更改,意味着创建文件动作执行成功。

  • PLAY RECAP

剧本执行过程总结

ok

表示任务已执行,但没有做出任何更改,目标状态已满足。

changed

表示任务执行后目标主机状态发生了变化,例如文件被创建、配置被更新等。

failed

表示任务执行失败,需要排查错误原因。

skipped

表示由于条件不满足,任务被跳过,没有执行。

unreachable

表示无法连接到目标主机,通常是因为网络问题或主机不可达。

5. become账号提权

生产环境中,为了安全因素,我们不会直接使用root来登录到Server ,确实有需要的情况下,我们再使用sudo切换到root权限。生产环境中的机器也不会开放权限允许root直接登录,所以通过become参数在执行Playbook剧本的过程中提权,使需要root权限才能执行的操作能够完成。

--106服务器yunwei账号为普通用户,已配置sudo
--将公钥复制到远程主机192.168.101.106 yunwei账号的authorized_keys文件中
[root@104 ~]# ssh-copy-id yunwei@192.168.101.106

因为Ansible默认是通root账号进行登录,通过root是登录不上的,所以需要通过在主机清单中配置以使用yunwei账号进行登录。

[root@104 ~]# cat /etc/ansible/hosts 
[GG]
192.168.101.105

[GGBoy]
192.168.[0:1].[0:254]
server[a:z]

[AA]
192.168.101.106 ansible_user=yunwei   --ansible_user是个变量,定义Ansible执行Playbook时所登录的用户名

Playbook剧本添加启用提权功能和提权用户配置。

[root@104 ~]# cat 106.yml 
---
 - hosts: AA
   become: yes                  --启用提权功能
   become_user: root            --提权为root账号运行
   tasks:
        - name: 创建文件
          shell: touch /root/1.txt
[root@104 ~]# ansible-playbook --ask-become 106.yml   --ask-become添加执行参数

Snipaste_2024-11-07_23-14-06.png


Comment