未登录

信蚁社区 通行证

搜索
热搜: 统信UOS 麒麟
查看: 112|回复: 0

[关于麒麟] Kylin麒麟操作系统服务部署 | Ansible基础

[复制链接]

103

主题

4

回帖

339

积分

实习版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
339

最佳新人灌水之王优秀版主

发表于 2025-4-19 13:30:25 | 显示全部楼层 |阅读模式
以下所使用的环境为:
虚拟化软件:VMware Workstation 17 Pro
麒麟系统版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64
一、自动化运维工具

Ansible:基于Python开发,分布式无需客户端、轻量级,配置语言采用YAML
SaltStack:基于Python开发,采用C/S架构,现对于puppet更加轻量化,配置语法采用YMAL,配置脚本更为简单
Puppet:基于Ruby开发,采用C/S架构,扩展性强,基于SSL认证
1. Ansible概述

Ansible 是一个开源的自动化平台,用于配置管理、应用部署和IT任务自动化。它使用YAML(一种易于阅读和编写的数据序列化格式)来编写自动化脚本,这些脚本被称为“playbooks”。Ansible 旨在通过SSH(Secure Shell)协议与远程节点(无论是物理机还是虚拟机)进行通信,从而无需在远程节点上安装任何客户端软件(即Ansible是agentless的)。这种设计使得Ansible的部署和管理变得非常简单和灵活。
Ansible这个名称最初并非直接来源于某个具体的科幻小说,但它与科幻作品中的超光速通讯装置有着紧密的联系。据多个来源提及,Ansible的命名受到了科幻作家们笔下超光速通讯工具的影响,这些工具在小说中常被描述为能够跨越时空进行即时通讯的装置。
Ansible的命名与奥森·斯科特·卡德(Orson Scott Card)的科幻小说《安德的游戏》(Ender’s Game)中的安塞波(Ansible)密切相关。在这部小说中,安塞波是一种虚构的超光速通讯装置,主角安德和他的伙伴们通过它跨越时空指挥无数的战舰。这种跨越时空的即时通信能力,与Ansible作为自动化运维工具在IT基础设施中实现的远程管理和控制功能相呼应。
Ansible的作用
    批量远程执行命令 批量配置软件 二次开发:如JumpServer底层借助Ansible实现自动化管理 通过Playbook实现更复杂IT任务的部署(如一套架构)
Ansible的基本架构
    Ansible:核心程序 Host Inventory:主机清单,Ansible管理的主机信息(包括IP地址、SSH端口号、账号、密码等) Playbooks:剧本,YAML格式,模块化定义一系列任务,供外部统一调用 Core Modules:核心模块,所有任务均由模块完成 Custom Modules:自定义模块 ,完成核心模块无法完成的任务,支持任意语言编写 Connection Plugins:连接插件,建立Ansible与其它主机间的通信
2. Ansible工作原理

Ansible工作原理
    用户登录控制主机:通过配置文件受管节点部署Ansible或单行命令 控制主机和受管节点之间支持 local、SSH、ZeroMQ 三种连接方式,默认使用SSH的。在规模较大的情况下使用ZeroMQ连接方式会明显改善执行速度。 控制主机读取用户的部署任务:根据自己hosts文件中定义的受管节点查找对应机器地址(IP地址或域名) 控制主机下发任务:管理机通过SSH免密连接受管节点,下发任务模块给受管节点临时目录 受管节点执行任务,任务完毕后删除模块 受管节点将执行结果返回给控制主机
Kylin麒麟操作系统服务部署 | Ansible基础-1.png


返回结果字体颜色
    绿色:未发生变化 黄色:更改生效 红色:执行错误
二、Ansible安装

1. Ansible的安装方式

使用YUM安装,需要提前配置eple源或使用Kylin自带的网络源
  1. yum install-y ansible
复制代码
使用pip安装
  1. pip install ansible
复制代码
如果没有安装pip,需要先安装pip
  1. yum install python-setuptools easy_install pip
复制代码
2. 安装Ansible

以下使用麒麟自带的网络源进行安装
  1. yum install-y ansible
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-2.png


YUM安装后的配置文件默认目录为/etc/ansible
    **ansible.cfg:**定义Ansible主机的默认配置文件,如:是否需要输入密码、是否开启sudo、hosts主机清单位置 **hosts:**主机清单,保存管理的主机信息,默认文件为hosts **roles:**公共角色,Ansible从1.2版本引入的新特性,用于层次性、结构化的组织playbook,roles能够根据层次性结构自动安装变量文件、tasks以及handlers等
Kylin麒麟操作系统服务部署 | Ansible基础-3.png


3. Ansible的常见命令

常见命令
命令说明
ansible定义并运行简单任务(ad-hoc临时命令)
ansible-config查看、编辑、管理Ansible配置
ansible-doc文档查看工具
ansible-galaxy共享和下载角色的工具
ansible-inventory查看主机清单信息
ansible-playbook执行playbook
ansible-pull从仓库中拉取 playbooks
ansible-vault加解密文件
ansible-consoleREPL控制台执行Ansible任务
4. SSH免密登陆

因为Ansible是基于SSH协议与受管节点进行通信。在管理多台主机时,无法保证主机的密码都一致,可以通过构建密钥验证的SSH体系解决SSH连接问题。
Kylin麒麟操作系统服务部署 | Ansible基础-4.png


[Step1]: 在控制主机上创建密钥对
  1. ssh-keygen -t rsa                # 指定加密方式为rsa
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-5.png


Kylin麒麟操作系统服务部署 | Ansible基础-6.png


[Step2]: 上传公钥文件到受管节点,受管节点会自动将公钥保存在/root/.ssh目录下
  1. ssh-copy-id -i /root/.ssh/id_rsa_pub 192.168.110.2
复制代码
    ssh-copy-id:复制SSH公钥到远程主机 -i /root/.ssh/id_rsa_pub:指定公钥文件路径 192.168.110.2:受管节点
Kylin麒麟操作系统服务部署 | Ansible基础-7.png


[Step3]: 验证:使用控制主机访问受管节点
  1. ssh root@192.168.110.2
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-8.png


三、 管理Ansible配置文件

Ansible的配置文件作用是指导ansible工具的功能设置。安装Ansible软件后,会自动生成配置文件
    /etc/ansible/ansible.cfg 用于配置多个Ansible工具行为
管理Ansible设置
可以通过在多个目录中创建 ansible.cfg 文件,以应用多个Ansible工具的设置。Ansible配置文件由几个部分组成,每一部分含有以键值对形式定义的设置,
    [default]:用于设置Ansible操作的默认值 [privilege_escalation]:用于配置Ansible如何在受管主机上执行特权升级
常用参数
指令描述
inventory指定清单文件的路径
remote_user指定Ansible用于连接客户机的用户名,如果未指定则使用当前用户的名称
ask_pass指示是否提示输入SSH密码
become指定连接后是否在客户机上自动切换用户
become_method指定切换用户的方式(默认为sudo)
become_user指定在客户端上切换到哪个用户(默认为root)
become_ask_pass是否提示输入become_method的密码
Ansible配置解析
在较新的系统中,建议使用become_user代替sudo_user。
  1. [defaults]# 默认配置inventory=/etc/ansible/hosts                                        # 主机清单位置
  2. library        = /usr/share/my_modules/                        # 自定义模块存放目录
  3. module_utils   = /usr/share/my_module_utils/        # Ansible模块工具目录
  4. remote_tmp     = ~/.ansible/tmp                                        # py命令存放的临时目录
  5. local_tmp      = ~/.ansible/tmp                                        # 本机临时命令执行目录
  6. plugin_filters_cfg = /etc/ansible/plugin_filters.yml                # 插件过滤器位置
  7. forks          =5# 默认并发数,存在多台主机时,会5台5台主机的执行
  8. poll_interval  =15# 检查远程任务执行状态时等待的时间间隔(秒)
  9. sudo_user      = root                                                        # sudo切换的用户,默认sudo的用户为root
  10. ask_sudo_pass = True                                                        # sudo是否提示输入密码
  11. ask_pass      = True                                                        # 是否询问ssh密码
  12. transport      = smart                                                        # 指定与受管主机的通信的传输方式
  13. remote_port    =22# 连接远程主机使用的SSH端口号
  14. module_lang    = C                                                                # 指定了模块使用的语言
  15. module_set_locale = False                                                # 控制是否根据远程主机的环境设置来设置模块的本地化[privilege_escalation]# 控制特权升级(即提权)相关的设置become=True                                # 是否在客户机上自动切换用户become_method=sudo                # 用于特权升级的方法(可选值:sudo、su、pbrun、doas)become_user=root                # sudo切换的用户                become_ask_pass=False        # 提权是否要提示输入密码
复制代码
Ansible通常不需要修改太多默认配置,其中有一项需要更改
  1. vim /etc/ansible/ansible.cfg
  2. # 修改下列选项
  3. host_key_checking = False                # SSH连接时不检查远程主机的SSH密钥的指纹信息
复制代码
默认在第一次进行SSH连接时,会提示是否记录SSH密钥的指纹信息
Kylin麒麟操作系统服务部署 | Ansible基础-9.png


四、Ansible配置文件生效范围

自定义配置文件
ansible配置文件可以存在于不同位置
    /etc/ansible/ansible.cfg:默认路径 ~/.ansible.cfg:家目录 ~/ansible/ansible.cfg:工作目录(相当于在家目下新建一个ansible,ansible称为工作目录) /etc/profile:环境变量
优先级:变量 > 当前目录 > 用户家目录 > /etc
总结就是一句话:在没有环境变量的前提下,距离哪一个配置文件最近,则哪一个配置文件生效
[Step1]: 新建用户server
  1. useradd server
  2. echo Kylin2024 |passwd--stdin server
复制代码
[Step2]: 切换到server用户,新建工作目录,进入工作目录,在工作目录中新建ansible配置文件
  1. su - server
  2. mkdir ~/ansible
  3. cd ~/ansible
  4. touch ansible.cfg
复制代码
[Step3]: 验证:查看Ansible版本信息,可以看到配置文件的路径为当前的工作目录
Kylin麒麟操作系统服务部署 | Ansible基础-10.png


[Step4]: 验证:切换默认配置文件路径下,查看Ansible版本信息,可以看到配置文件的路径为默认配置文件路径
  1. cd /etc/ansible
  2. ansible --version
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-11.png


五、 主机清单

清单定义Ansible管理的主机集合,这些主机可以分配到组中,以进行集中管理。组可以包含子组,主机可以是多个组的成员。清单还可以设置应用到它所定义的主机和组的变量。
定义主机清单可以采用以下两种方式
    使用文本文件定义静态主机清单 通过外部信息提供程序,使用Ansible插件按需生成动态主机清单
使用简单的 ini 样式的静态清单文件
    嵌套组通过创建后缀为:children的主机组名称来定义 可以通过范围简化主机规格:【start:end】
  1. web.meaauf.com                                                        # 不受任何组管理的主机写最上面10.1.1.1
  2. [group1]# 组名192.168.10.1                                                        # 纳管主机
  3. server.meaauf.com                                                # 域名方式指定纳管主机172.16.30.[1:10]# 代表纳管172.16.30.1-172.16.30.10[group2:children]# 嵌套组,组名需要带children
  4. group1                                                                        # 嵌套组只能包含组名不包含主机
复制代码
覆盖清单位置
    安装Ansible软件后,在/etc/ansible/hosts位置提供一个默认主机清单,属于全局管理范围。 特权用户管理时可以为其在工作目录中创建清单,在工作目录中使用Ansible时,优先度最高。
  1. /home/sserver/ansible/xxxx                # 针对某个用户设置清单
  2. /etc/ansible/hosts                                # 针对全局设置
复制代码
1. 主机清单练习

案例需求
    192.168.110.1是server主机组的成员 192.168.110.2 ~ 192.168.110.4 是network主机组的成员 server组是web主机组的成员
[Step1]: 编辑默认清单文件
  1. vim /etc/ansible/hosts
  2. # 写入下列内容[server]192.168.110.1
  3. [network]192.168.110.[2:4][web:children]
  4. server
复制代码
[Step2]: 验证:以标准输出方式展示清单内容
  1. ansible-inventory --list
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-12.png


六、Ansible查找文档

Ansible查找所有模块
  1. ansible-doc -l
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-13.png


Ansible查找指定模块
  1. ansible-doc file
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-14.png


Ansible查找指定模块,以幻灯片形式
  1. ansible-doc -sfile
复制代码
常用的模块
模块名说明
file用于设置文件属性
yum安装软件包
cron设置计划任务
copy复制文件到远程主机
command在远程主机上执行命令
raw类似于command模块,支持管道
user用户配置
group用户组配置
service管理服务
ping测试远程主机
setup查看远程主机信息
mount配置挂载点
七、Ansible Playbook

1. Playbook概述

    play是针对清单中选定的主机运行的一组有序任务 Playbook是一个文本文件,其中包含由一个或多个按特定顺序运行的play组成的列表 临时命令可以作为一次性命令对一组主机运行一项简单的任务 Playbook可以通过轻松重复的方式对一组目标主机执行多项复杂的任务 Playbook命令工具自上向下的顺序依次执行
2. YAML语法

    playbook是使用YAML语法编写的文本文件,后缀名为[.yml] 严格缩进和空格 YAML文件以---开头,以...结束(结束可以省略不写) 使用-(减号加一个或多个空格)作为列表项 注释符为:#
调整Tab键缩进
    永久调整缩进:vim ~/.vimrc–>set tabstop=2 当前调整缩进:set tabstop=2
整体缩进(视图模式)
    按 Ctrl+v 进入视图模式 通过 j 选择行,或者 G 直接选中剩余所有行 按 I 进入编辑模式 在调整完后,按 Esc 键应用
yaml示例
  1. ---# yaml语法:开头 -name: install httpd                # paly任务的描述:描述部分可选hosts: node1                                # 指定目标主机tasks:# 任务列表,下面为任务模块-name: Install Apache        # 任务模块,与tasks有两个字符缩进
  2.     ansible.builtin.yumL        # 模块名name: httpd                        # 模块参数、模块选项state: latest                        # 模块参数、模块选项...# yaml语法:结尾(可省略)
复制代码
八、 Ansible简单案例配置

案例需求
    编辑清单文件,192.168.110.2是hosts主机组的成员 在hosts主机组中安装Apache服务
节点设置
主机网络信息说明
Kylin-1192.168.110.1/24控制主机
Kylin-2192.168.110.2/24受管节点
[Step1]: Kylin-1配置:安装Ansible
  1. yum install-y ansible
复制代码
[Step2]: Kylin-1配置:编辑清单文件
  1. vim /etc/ansible/hosts
  2. # 写入下列内容[hosts]192.168.110.2
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-15.png


[Step3]: Kylin-1配置:编辑主配置文件
  1. cd /etc/ansible
  2. vim /etc/ansible/ansible.cfg
  3. # 修改下列选项
  4. host_key_checking = False
复制代码
[Step4]: Kylin-1配置:编辑playbook
  1. vim http.yml
复制代码
  1. # 文件内容如下----name: Install Httpd
  2.   hosts: hosts
  3.   tasks:-name: install the latest version of Apache
  4.     yum:name: httpd
  5.       state: latest
复制代码
[Step5]: Kylin-1验证:试运行Playbook
  1. ansible-playbook http.yml -C
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-16.png


[Step6]: Kylin-1验证:运行Playbook
  1. ansible-playbook http.yml
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-17.png


[Step7]: Kylin-1验证:通过Ad-hoc查看受管主机是否安装Apache
  1. ansible -m shell -a"rpm -qa httpd" all
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-18.png


九、错误汇总

1. Python版本错误

错误信息
  1. "`python2-dnf` is not installed, but it is requiredfor the Ansible dnf module."
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-19.png


错误原因
    python2-dnf 包不存在:系统尝试安装 python2-dnf,但是找不到这个包。这通常是因为你的系统已经不再支持 Python 2,并且 dnf 本身也通常是与 Python 3 一起打包的。 使用了 Python 2.7:尽管错误信息中提到了 Python 2.7,但现代 Linux 发行版(如 CentOS 8 及更高版本)默认使用 Python 3,并且不再提供对 Python 2 的广泛支持
解决办法
  1. vim /etc/ansible/ansible.cfg
  2. # 在[defaults]中添加下列命令[defaults]
  3. interpreter_python = /usr/bin/python3                # 指定 Python 解释器为 Python 3
复制代码
十、其它补充

1. 标准输入输出符号

在Linux的环境中,通常需要执行一些脚本,存在几个特殊的符号,不同的符号含义不同。
    **>:**将符号前结果重定向到符号后文件中,会直接覆盖内容 **>>:**将符号前结果重定向到符号后文件中,在文件末尾追加内容,不会覆盖 **0:**标准输入stdin **1:**标准输出stdout **2:**标准错误stderr **&>:**这是Bash中的特有的重定向语法,是>和2>&1的简写形式,用于将产生的标准输出和标准错误都重定向到文件中 **2>&1:**将标准错误重定向到标准输出中
案例1:重定向覆盖内容
  1. echo"aaa"> demo.txt
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-20.png


案例2:追加内容
  1. echo"bbb">> demo.txt
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-21.png


探究:在上述命令中,我们使用了一条 “echo “aaa” > demo.txt” ,这其实是省略写法
echo "aaa"是一个标准输出,执行 echo “aaa” 产生的标准输出然后重定向到demo.txt
  1. echo"aaa"1> demo.txt       
复制代码
案例3:将错误信息过滤掉
2是标准错误,意思将错误信息重定向到err.txt文件中
  1. cat aaa.txt 2> err.txt
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-22.png


案例4:将标准输出和标准错误输出重定向到文件中
等同于将 > + 2>&1,将标准错误和标准输入重定向到demo.log中
  1. bash demo.sh &>demo.log
复制代码
2>&1将错误信息重定向到标准输出,也就是相当于重定向到demo.log中
  1. bash demo.sh >demo.log 2>&1
复制代码
2. inode索引节点

inode编号用于在文件系统中唯一地标识一个文件或目录,这种唯一性确保了文件或目录的元数据可以被准确地访问和修改。文件或目录的数据存储在磁盘的数据块中。inode中包含了指向这些数据块的指针,因此,通过inode编号可以快速地定位到文件或目录的实际数据。
文件系统的许多操作,如文件的创建、删除、读取、修改等,都需要通过inode编号来访问和操作文件的元数据。
案例说明
假如现在存在一个名为“myfile”的文件,其inode编号为137393488。当我们需要读取 “myfile”文件内容时,文件系统会使用inode编号137393488来查找对应的inode节点,从而获取指向文件数据块的指针,最终读取到文件的内容。
查看指定文件的inode节点
  1. ls-i myfile
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-23.png


显示文件的状态信息
  1. stat myfile
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-24.png


3. 硬链接和软链接

硬链接的特点:
    同一个文件,多个名称 以文件副本的形式存在,但不占用实际空间(inode编号相同) 不支持跨分区(不能跨文件系统),不支持对目录创建 删除硬链接后,链接数会发生改变 硬链接的文件类型跟随着之前的文件类型
软链接的特点:
    不同的文件(inode编号不同),支持跨分区 支持对目录创建,原始文件和软链接存在依赖,原始文件删除了,软链接会失效 删除一个软链接,链接数不会发生改变,删除的相当于是一个快捷方式 文件类型为:l
[Step1]: 先本地生成1个500M的文件
  1. ddif=/dev/zero of=FILE count=1bs=500M
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-25.png


[Step2]: 为FILE文件创建1个软链接,链接名为:file01。链接大小比源文件小,源文件的链接数没有发生改变
  1. ln-s FILE file01
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-26.png


[Step3]: 查看源文件FILE和链接文件file01的inode,可以看到inode不一致
  1. ls-i FILE
  2. ls-i file01
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-27.png


[Step4]: 为FILE文件创建1个硬链接,链接名为:file02。可以看到硬链接的大小和源文件大小一致,源文件的链接数+1
  1. ln FILE file02
复制代码
Kylin麒麟操作系统服务部署 | Ansible基础-28.png


[Step4]: 查看源文件FILE和链接文件file02的inode,可以看到inode一致
Kylin麒麟操作系统服务部署 | Ansible基础-29.png


[Step5]: 删除原始文件FILE,可以看到软链接失效了,而硬链接正常
Kylin麒麟操作系统服务部署 | Ansible基础-30.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表