首页 > 其他分享 >第三十六天:Ansible安装和常见问题

第三十六天:Ansible安装和常见问题

时间:2024-03-13 21:04:01浏览次数:17  
标签:选项 文件 常见问题 Ansible 主机 ansible 模块 第三十六

一、自动化运维应用场景

1、运维职业发展路线

2、企业实际应用场景分析

DEV开始环境-》测试环境-》预发布环境-》发布环境-》生产环境-》灰度环境

3、常见自动化运维工具

Ansible:python,Agentless,中小型应用环境 Saltstack:python,一般需部署agent,执行效率更高 Puppet:ruby, 功能强大,配置复杂,重型,适合大型环境 Fabric:python,agentless Chef:ruby,国内应用少 Cfengine func 二、Ansible 介绍和架构 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备。公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以供开发和测试 人员使用,运维老大为了在年底有所表现,要求运维部门同学尽快实现,当你接到这个任务时,有没有更快的解决方案? 1、Ansible 发展史  作者:Michael DeHaan( Cobbler 与 Func 作者) Ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗 2012-03-09,发布0.0.1版,2015-10-17,Red Hat宣布1.5亿美元收购 官网:https://www.ansible.com/ 官方文档:https://docs.ansible.com/

2、Ansible 功能

批量执行远程命令,可以对远程的多台主机同时进行命令的执行 批量安装和配置软件服务,可以对远程的多台主机进行自动化的方式配置和管理各种服务 编排高级的企业级复杂的IT架构任务, Ansible的Playbook和role可以轻松实现大型的IT复杂架构 提供自动化运维工具的开发API, 有很多运维工具,如jumpserver就是基于 ansible 实现自动化管理功能

3、Ansible 特点

(1)优点

  功能丰富的模块:提供了多达数千个的各种功能的模块,完成特定任务只需调用特定模块即可,还支持自定义模块,可使用任何编程语言写模块   使用和部署简单: 无需安装专用代理软件,基于python和SSH(默认已安装)实现   安全: 基于OpenSSH实现安全通讯无需专用协议   幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性和模块有关   支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构   较强大的多层解决方案 Role   Python语言实现, 基于Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块   属于红帽(IBM)公司产品,背景强大,未来发展前景光明 (2)缺点    如果管理的主机较多时,执行效率不如saltstack高   当前还不支持像MySQL数据库一样的事务回滚

4、Ansible 架构

(1)Ansible 组成

组合INVENTORY、API、MODULES、PLUGINS的绿框,为ansible命令工具,其为核心执行工具 

 

  INVENTORY:Ansible管理主机的清单文件,默认为 /etc/ansible/hosts   MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义   PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用   API:供第三方程序调用的应用程序编程接口 (2)Ansible 命令执行来源   USER 普通用户,即SYSTEM ADMINISTRATOR   PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件   CMDB(配置管理数据库) API 调用   PUBLIC/PRIVATE CLOUD API调用   USER-> Ansible Playbook -> Ansibile  (3)注意事项   执行ansible的主机一般称为管理端, 主控端,中控,master或堡垒机   主控端Python版本需要2.6或以上   被控端Python版本小于2.4,需要安装python-simplejson   被控端如开启SELinux需要安装libselinux-python   windows 不能做为主控端,只能做为被控制端 二、Ansible 安装和常见模块

1、Ansible 安装

ansible的安装方法有多种 官方文档 
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
https://docs.ansible.com/ansible/latest/installation_guide/index.html
下载 
https://releases.ansible.com/ansible/
pip 下载 
https://pypi.org/project/ansible/

(1)包安装方式

#CentOS 的EPEL源的rpm包安装
[root@centos ~]#yum install ansible
#ubuntu 安装
[root@ubuntu ~]#apt -y install ansible

(2)pip 安装 

pip 是安装Python包的管理器,类似 yum 范例: 在rocky8上通过pip3安装ansible
[root@rocky8 ~]#yum -y install python39 rust
[root@rocky8 ~]#pip3 install ansible
[root@rocky8 ~]#ansible --version

[root@rocky8 ~]#yum -y install python38 python38-pip
[root@rocky8 ~]#pip3 install --upgrade pip -i https://pypi.douban.com/simple
[root@rocky8 ~]#pip3 install ansible -i https://pypi.douban.com/simple/
[root@rocky8 ~]#ansible --version

2、Ansible 相关文件

(1)Ansible 配置文件列表

/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件 /etc/ansible/hosts 主机清单 /etc/ansible/roles/ 存放角色的目录 

(2)Ansible 主配置文件

Ansible 的配置文件可以放在多个不同地方,优先级从高到低顺序如下 
ANSIBLE_CONFIG #环境变量,注意:指定目录下的ansible.cfg文件必须存在才能生效
./ansible.cfg   #当前目录下的ansible.cfg,一般一个项目对应一个专用配置文件,推荐使
用
~/.ansible.cfg #当前用户家目录下的.ansible.cfg
/etc/ansible/ansible.cfg  #系统默认配置文件
Ansible 的默认配置文件 /etc/ansible/ansible.cfg ,其中大部分的配置内容无需进行修改
[defaults]
#inventory     = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp     = $HOME/.ansible/tmp #本机的临时命令执行目录
#forks         = 5   #默认并发数
#sudo_user     = root #默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass     = True   
#remote_port   = 22
#host_key_checking = False     #检查对应服务器的host_key,建议取消此行注释,实现第一次连
接自动信任目标主机
#log_path=/var/log/ansible.log #日志文件,建议启用
#module_name = command   #默认模块,可以修改为shell模块
[privilege_escalation] #普通用户提权配置
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False

(3) Inventory 主机清单文件

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory 主机清单文件中将其分组组织 默认的inventory file为 /etc/ansible/hosts inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成 注意:   生产建议在每个项目目录下创建项目独立的hosts文件   通过项目目录下的ansible.cfg文件中的 inventory = ./hosts实现 官方文档:
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
主机清单文件格式 inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中 此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明 如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机 Inventory 参数说明

 3、Ansible相关工具

 /usr/bin/ansible 主程序,临时命令执行工具

/usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本 /usr/bin/ansible-pull 远程执行命令的工具 /usr/bin/ansible-vault 文件加密工具 /usr/bin/ansible-console 基于Console界面与用户交互的执行工具 /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台 利用ansible实现管理的主要方式:   Ansible Ad-Hoc 即利用ansible命令,主要用于临时命令使用场景   Ansible playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程 ansible 使用前准备 ansible 相关工具大多数是通过ssh协议,实现对远程主机的配置管理、应用部署、任务执行等功能 建议:使用此工具前,先配置ansible主控端能基于密钥认证的方式联系各个被管理节点

 (1)ansible-doc

 此工具用来显示模块帮助,相当于man

格式
ansible-doc [options] [module...]
-l, --list       #列出可用模块
-s, --snippet #显示指定模块的playbook片段

(2)ansible

Ansible Ad-Hoc 介绍 Ansible Ad-Hoc 的执行方式的主要工具就是 ansible 特点: 一次性的执行,不会保存执行命令信息,只适合临时性或测试性的任务 3.3.2.2 ansible 命令用法 格式:
ansible <host-pattern> [-m module_name] [-a args]
选项说明:

 (3)ansible-console

 此工具可交互执行命令,支持tab,ansible 2.0+新增

提示符格式:
执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$

常用子命令:

设置并发数: forks n 例如: forks 10 切换组: cd 主机组 例如: cd web 列出当前组主机列表: list 列出所有的内置命令: ?或help

 

 

 

 

4、Ansible常用模块

虽然模块众多,但最常用的模块也就2,30个而已,针对特定业务只需要熟悉10几个模块即可 常用模块帮助文档参考:
https://docs.ansible.com/ansible/2.9/modules/modules_by_category.html
https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html
https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

(1)Command 模块

功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项 注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现 注意:此模块不具有幂等性 常见选项
chdir=dir    #执行命令前,先切换至目录dir
creates=file #当file不存在时才会执行
removes=file #当file存在时才会执行

(2)Shell 模块

功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, > , 相当于增强版的command模块 注意:此模块不具有幂等性,建议能不能就用此模块,最好使用专用模块 常见选项
chdir=dir    #执行命令前,先切换至目录dir
creates=file #当file不存在时才会执行
removes=file #当file存在时才会执行
注意:调用bash执行命令 类似 cat /tmp/test.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt 这些复杂命令,即使使用shell也可能会失败,解决办法:写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器

(3)Script 模块

功能:在远程主机上运行ansible服务器上的脚本(无需执行权限) 注意:此模块不具有幂等性 常见选项
chdir=dir    #执行命令前,先切换至目录dir
cmd          #指定ansible主机的命令
creates=file #当file不存在时才会执行
removes=file #当file存在时才会执行

(4)Copy 模块

功能:复制ansible服务器主控端或远程的本机的文件到远程主机 注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件 常见选项
src      #控制端的源文件路径
dest     #被控端的文件路径
owner    #属主
group    #属组
mode     #权限
backup   #是否备份
validate #验证成功才会执行copy
remote_src  #no是默认值,表示src文件在ansible主机,yes表示src文件在远程主机
(5)Get_url 模块 功能: 用于将文件从http、https或ftp下载到被管理机节点上 常用参数如下:

 (6)Fetch 模块

功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录 常见选项 
src      #被控制端的源文件路径,只支持文件
dest     #ansible控制端的目录路径

(7)File 模块

功能:设置文件属性,创建文件,目录和软链接等 常见选项

 (8)stat 模块

功能:检查文件或文件系统的状态 注意:对于Windows目标,请改用win_stat模块 常见选项
path #文件/对象的完整路径(必须)
常用的返回值判断:
exists: 判断是否存在
isuid: 调用用户的ID与所有者ID是否匹配

(9)unarchive 模块

功能:解包解压缩 实现有两种用法: 将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置remote_src=no,此为默认值,可 省略 将远程本主机上或非ansible的其它主机的某个压缩包解压缩到远程主机本机的指定路径下,需要 设置remote_src=yes 常见参数: 

 (10)Archive 模块

功能:打包压缩保存在被管理节点  常见选项 
path   #压缩的文件或目录
dest   #压缩后的文件
format #压缩格式,支持gz,bz2,xz,tar,zip

(11)Hostname 模块 

功能:管理主机名 常见选项
name  #修改后的主机名称

(12)Cron 模块

功能:计划任务 支持时间:minute,hour,day,month,weekday 常见选项
name #描述脚本的作用
minute    #分钟
hour #小时
weekday    #周
user #任务由哪个用户运行;默认root
job #任务

(13)Yum 和 Apt 模块 

功能:管理软件包 yum 管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本 apt 模块管理 Debian 相关版本的软件包 yum常见选项
name #软件包名称
state #状态
  =present #安装,此为默认值
  =absent #删除
  =latest #最新版
list            #列出指定包
enablerepo #启用哪个仓库安装
disablerepo #不使用哪些仓库的包
exclude #排除指定的包
validate        #是否检验,默认为yes

(14)yum_repository 模块

功能: 此模块实现yum的仓库配置管理 常见选项 
name #仓库id
description #仓库描述名称,对应配置文件中的name=
baseurl #仓库的地址
gpgcheck #验证开启
gpgkey              #仓库公钥路径

(15)Service 模块

此模块和sytemd功能相似,选项很多相同 功能:管理服务 常见选项
name #服务名称
state #服务状态
=started #启动
=stopped #停止
=restarted    #重启
=reloaded    #重载
enabled #开启自启动
daemon_reload   #加载新的配置文件,适用于systemd模块

(16)User 模块

功能:管理用户 常见选项 
name #创建的名称
uid #指定uid
group #指定基本组
shell #登录shell类型默认/bin/bash
create_home #是否创建家目录
password #设定对应的密码,必须是加密后的字符串才行,否则不生效
system #yes表示系统用户
groups          #附加组
append #追加附加组使用,yes表示增加新的附加组
state    #absen删除
remove #yes表示删除用户时将家目录一起删除
generate_ssh_key #创建私钥
ssh_keyu_bits    #私钥位数
ssh_key_file     #私钥文件路径

(17)Group 模块

功能:管理组 常见选项 
name        #指定组名称
gid         #指定gid
state 
  =present  #创建,默认
  =absent   #删除

(18)Lineinfile 模块 

ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时, 会存在问题,无法正常进行替换 。  ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换 一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块 功能:相当于sed,主要用于修改一行的文件内容 常见选项
path #被控端文件的路径
regexp #正则匹配语法格式,表示被替换的内容
line #替换为的内容
state #absent表示删除
insertafter     #插入到替换内容前面,如和regexp同时存在,只在没找到与regexp匹配时才使用
insertafter
insertbefore    #插入到替换内容后面,如和regexp同时存在,只在没找到与regexp匹配时才使用
insertafter
backrefs        #支持后面引用,yes和no
backup          #修改前先备份
create          #如果文件不存在,则创建,默认不存在会出错
mode            #指定权限
owner           #指定用户
group           #指定组
#注意
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被
匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。

(19)Replace 模块

该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用 功能: 多行修改替换 常见选项
path #被控端文件的路径
regexp #正则匹配语法格式,表示被替换的内容
replace #替换为的内容
after           #插入到替换内容前面,
before          #插入到替换内容后面
backup          #修改前先备份
mode            #指定权限
owner           #指定用户
group           #指定组

(20)SELinux 模块

功能: 该模块管理 SELInux 策略 常见选项
policy     #指定SELINUXTYPE=targeted
state      #指定SELINUX=disabled

(21)reboot 模块

功能: 重启 常见选项 
msg               #重启提示
pre_reboot_delay  #重启前延迟时间的秒数
post_reboot_delay #重启后延迟时间的秒数后,再验证系统正常启动
reboot_timeout    #重启后延迟时间再执行测试成功与否的命令
test_command      #执行测试成功与否的命令

(22)mount 模块

功能: 挂载和卸载文件系统 常见选项
src    #源设备路径,或网络地址
path   #挂载至本地哪个路径下
fstype #设备类型; nfs
opts   #挂载的选项
state  #挂载还是卸载
  =present #永久挂载,但没有立即生效
  =absent #卸载临时挂载,并删除永久挂载
  =mounted #临时挂载
  =unmounted #临时卸载

(23)Setup 模块

功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机 较多,会影响执行速度 可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息 常见选项 
filter #指定过滤条件

(24)debug 模块

功能: 此模块可以用于输出信息,并且通过 msg 定制输出的信息内容,功能类似于echo命令 注意: msg后面的变量有时需要加 " " 引起来 常见选项
msg       #指定命令输出的信息
var       #指定变量名,和msg互斥
verbosity #详细度

(25)sysctl 模块

功能: 修改内核参数 常见选项 
name  #内核参数
value #指定值
state #是否保存在sysctl.conf文件中,默认present
sysctl_set #使用sysctl -w 验证值生效

(26)pam_limits 

功能: 管理资源限制 范例: 
- name: Change Limit /etc/security/limit.conf
 pam_limits:
   domain: "*"
   limit_type: "{{ item.limit_type }}"
   limit_item: "{{ item.limit_item }}"
   value: "{{ item.value }}"
 loop:
   - { limit_type: 'soft', limit_item: 'nofile',value: '100000' }
   - { limit_type: 'hard', limit_item: 'nofile',value: '10000' }

(27)apt_repository 模块

功能: 此模块实现apt的仓库配置管理 常见选项 
repo #仓库信息
state               #添加或删除
update_cache        #是否apt update,默认yes
filename            #仓库文件,默认放在/etc/apt/sources.list.d/file.list

(28) apt_key 模块 

功能: 添加和删除apt key 常见选项 
url #key路径
state           #添加或删除

(29)其它模块 

ansible 还提供了很多针对各种应用的模块,比如
nginx_status_info
nginx_status_facts
mysql_db   #需要安装MySQL-python包
mysql_user #需要安装MySQL-python包
redis
mongodb*
postgresql*
haproxy
git

 

 

标签:选项,文件,常见问题,Ansible,主机,ansible,模块,第三十六
From: https://www.cnblogs.com/dujy/p/18052765

相关文章

  • Ansible
    1.Ansible发展作者:MichaelDeHaan(Cobblerpxekikstar与Func作者)ansible的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗2012-03-09,发布0.0.1版,2015-10-17,RedHat宣布1.5亿美元收购。官网:https://ww......
  • 运维自动化-Ansible
    关于运维自动化相关工具:代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion构建工具:maven、Ant、Gradle自动部署:Capistrano、CodeDeploy持续集成(CI):Jenkins、Travis配置管理:Ansible、SaltStack、Chef、Puppet容器:Docker、Podman、LXC、第三方厂商如AWS编排:Kube......
  • 【ansible】ansible的介绍和安装
    前言运维自动化云计算核心职能搭建平台架构日常运营保障性能效率优化相关工具代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion构建工具:maven、Ant、Gradle自动部署:Capistrano、CodeDeploy持续集成(CI):Jenkins、Travis配置管理:Ansible、SaltStack、Chef、P......
  • Ansible报错:Failed to parse /etc/ansible/hosts with yaml plugin
    早上接到同事反馈说Grafana某个监控图表点击后反应很慢,其他的图表都正常,只有这一张图表很慢。经过和大数据部门同事的沟通,发现应该是从大数据系统推送出来的数据有点问题,需要联合Grafana机器进行调试,询问我Grafana部署在哪台机器上。由于公司不同区域都有一套Prometheus+Grafana......
  • 在Linux中,ansible可以解决哪些问题?
    Ansible是一款强大的IT自动化工具,主要用于解决运维过程中面临的诸多挑战,特别适合批量管理和配置大量服务器。以下是Ansible可以帮助解决的一些典型问题:配置管理和标准化:Ansible能够通过Playbook(剧本)的形式编写和组织配置任务,确保在多个服务器上实现一致的系统配置,包括但不限......
  • ansible-playbook剧本 进阶
    剧本的高级特性剧本高级特性是完全遵循python的循环结构来的编程语言特有的逻辑控制语句变量循环等等你的剧本,可以考虑用高级特性,也可以不用高级特性是为了简化剧本比如,创建10个系统的用户ansiblebakcup-muser-a"name=cc01"ansiblebakcup-muser-a"name=cc......
  • ansible-playbook剧本 yaml json jq 学习
    ansible临时命令ad-hocansible中有两种模式,分别是ad-hoc模式和playbook模式ad-hoc简而言之,就是"临时命令"https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html临时命令非常适合您很少重复的任务。例如,如果您想在圣诞节假期关闭实验室中的所有机器。Ansib......
  • Ansible 常用模块
    3.4)Ansible常用模块Ansible默认提供了很多模块来供我们使用。我们可以通过ansible-doc-l命令查看到当前ansible都支持哪些模块通过ansible-doc-s模块名可以查看该模块有哪些参数可以使用。目前2023为止:模块总量基本保存在3387个。虽然模块众多,但最常用的......
  • 机器学习面试中常见问题整理
    机器学习(ML)作为目前一个比较火领域,提供了许多有趣且高薪的工作和机会。无论你是刚刚踏入机器学习领域的新手,还是已经积累了一定经验的从业者,面试都是检验你技能和知识的重要环节。本文将梳理一些常见的面试问题,让你在面试中更加自信从容。1.基础知识想要从事机器学习工作,至少......
  • 常见问题解决 --- 海康OpenAPI安全认证库的demo运行报错
    我要开发一个对接海康isc平台的oss的api,发现需要有海康登录库和ak、sk的配合才能完成。在海康官方下载OpenAPI安全认证库(JAVA)V1.1.11,解压后用idea打开demo发现一对报错。解决办法:1.修复基本的错误。比如包名报错,应该是  packagega; 2.修复maven依赖导入报错。首先是artem......