IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> ansible部署 -> 正文阅读

[系统运维]ansible部署

ansible部署

定义清单
清单定义Ansible将要管理的一批主机
这些主机也可以分配到组中,以进行集中管理;组可以包含子组,主机也可以是多个组的成员
清单还可以设置应用到它所定义的主机和组的变量
通过两种方式定义主机清单:
静态主机清单可以通过文本文件定义
动态主机清单可以根据需要使用外部信息提供程序通过脚本或其他程序来生成

使用静态清单指定
静态清单文件是指定Ansible目标受管主机的文本文件。可以使用多种不同的格式编写此文件,包括INI样式或YAML(ansible使用的是YAML语言)
INI样式的静态清单文件是受管主机的主机名或IP地址的列表

[root@lyy ~]# cd /etc/ansible/
[root@lyy ansible]# vim hosts
..........
green.example.com
blue.example.com
192.168.100.1
192.168.100.10
..........

可以将受管主机组织为主机组,通过主机组,可以更加有效的对一系列系统运行Ansible;每一部分的开头为以中括号括起来的主机组名称。其后为该组中每一受管主机的主机名或IP地址,每行一个

[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110
 
www[001:006].example.com      //(指的是www1.example.com到www6.example.com;共六个受管主机)
 
[dbservers]
                             //(空格也包含在dbservers组内)
db01.intranet.mydomain.net
db02.intranet.mydomain.net
10.25.1.56
10.25.1.57
 
db-[99:101]-node.example.com 

验证清单内容
可使用ansible命令验证受管主机是否存在于清单中

//指定受管主机的主机名或IP地址
[root@lyy ~]# ansible 192.168.1.100 --list-hosts
  hosts (1):
    192.168.1.100
[root@lyy ~]# ansible beta.example.org --list-hosts
  hosts (1):
    beta.example.org
 
 
 //指定主机组名称查看所有的受管主机
[root@lyy ~]# ansible webservers --list-hosts
  hosts (4):
    alpha.example.org
    beta.example.org
    192.168.1.100
    192.168.1.110
[root@lyy ~]# ansible dbservers --list-hosts
  hosts (4):
    db01.intranet.mydomain.net
    db02.intranet.mydomain.net
    10.25.1.56
    10.25.1.57

如果清单中含有名称相同的主机和主机组,ansible 命令将显示警告并以主机作为其目标,主机组则被忽略;所以要确保主机组不使用与清单中主机相同的名称

配置文件的位置

ansible配置文件查找顺序
ansible与我们其他的服务在这一点上有很大不同,这里的配置文件查找是从多个地方找的,顺序如下:
1.检查环境变量ANSIBLE_CONFIG指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);
2.~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件;
3./etc/ansible.cfg检查etc目录的配置文件

配置文件的优先级
ANSIBLE_CONFIG > ./ansible.cfg > ~/ansible.cfg > /etc/ansible/ansible.cfg
使用 ansible --version 查看当前Ansible版本正在使用的配置文件

[root@lyy ~]# ansible --version
ansible 2.9.11
  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.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Oct 11 2019, 15:04:54) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]
 
 //下载复制配置文件到该/root目录下
[root@lyy ~]# cp -a /etc/ansible/ansible.cfg /root
[root@lyy ~]# ls
anaconda-ks.cfg  ansible.cfg
[root@lyy ~]# ansible --version
ansible 2.9.11
  config file = /root/ansible.cfg           //配合文件的路径该为当前文件下的ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Oct 11 2019, 15:04:54) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]  

怎样查看帮助文档
man page
man是manual(操作手册)的简写,使用方式:
man [指令]
man date
在显示的内容中查找内容:
/ + 搜索你的关键字

上下左右键来查看更多说明,按q退出

man -f man(查找man完整名称的手册)
man -k man(模糊查询含有man名称的手册)

whatis [命令或数据] <==相当于 man -f [命令或数据]
apropos [命令或数据] <==相当于 man -k [命令或数据]
上面的这两个命令要使用用,需要root创建whatis数据库才行:
makewhatis

Ansible常用模块
ping 模块: 检查指定节点机器是否还能连通,用法很简单,不涉及参数,主机如果在线,则回复pong 。
raw 模块: 执行原始的命令,而不是通过模块子系统。
yum 模块: RedHat和CentOS的软件包安装和管理工具。
apt 模块: Ubuntu/Debian的软件包安装和管理工具。
pip 模块 : 用于管理Python库依赖项,为了使用pip模块,必须提供参数name或者requirements。
synchronize 模块: 使用rsync同步文件,将主控方目录推送到指定节点的目录下。
template 模块: 基于模板方式生成一个文件复制到远程主机(template使用Jinjia2格式作为文件模版,进行文档内变量的替换的模块。
copy 模块: 在远程主机执行复制操作文件。
user 模块 与 group 模块: user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令。
service 模块: 用于管理远程主机的服务。
get_url 模块: 该模块主要用于从http、ftp、https服务器上下载文件(类似于wget)。
fetch 模块: 它用于从远程机器获取文件,并将其本地存储在由主机名组织的文件树中。
file 模块: 主要用于远程主机上的文件操作。
lineinfile 模块: 远程主机上的文件编辑模块
unarchive模块: 用于解压文件。
command模块 和 shell模块: 用于在各被管理节点运行指定的命令. shell和command的区别:shell模块可以特殊字符,而command是不支持
hostname模块: 修改远程主机名的模块。
script模块: 在远程主机上执行主控端的脚本,相当于scp+shell组合。
stat模块: 获取远程文件的状态信息,包括atime,ctime,mtime,md5,uid,gid等信息。
cron模块: 远程主机crontab配置。
mount模块: 挂载文件系统。
find模块: 帮助在被管理主机中查找符合条件的文件,就像 find 命令一样。
selinux模块:远程管理受控节点的selinux的模块

模块的使用

ping模块
检查指定节点机器是否还能连通,用法很简单,不涉及参数. 主机如果在线,则回复pong. 测试连通性的模块

[root@ansible-server ansible]# ansible web-nodes -m ping
172.16.50.67 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
172.16.50.66 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
172.16.50.65 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
  
[root@ansible-server ansible]# ansible -i /etc/ansible/hosts all -m ping
172.16.50.67 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
172.16.50.66 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
172.16.50.65 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
  
可以获得该模块的说明
[root@ansible-server ~]# ansible-doc -v ping

yum模块
这个模块是RedHat 和 CentOS作为远端受控节点OS的时候,用的最多的模块, 是RedHat / CentOS包管理工具的模块, 使用`yum’软件包管理器管理软件包,其选项有:
config_file:yum的配置文件 (optional)
disable_gpg_check:关闭gpg_check (optional)
disablerepo:不启用某个源 (optional)
enablerepo:启用某个源(optional)
name:要进行操作的软件包的名字,默认最新的程序包,指明要安装的程序包,可以带上版本号,也可以传递一个url或者一个本地的rpm包的路径
state:表示是安装还是卸载的状态, 其中present、installed、latest 表示安装, absent 、removed表示卸载删除; present默认状态, laster表示安装最新版本

温馨提示:
要确保受控节点的python版本对应正确, 否则执行下面命令会报错 (下面报错说明受控节点需要python2版本, 而当前是python3):
“msg”: “The Python 2 bindings for rpm are needed for this module. If you require Python 3 support use the dnf Ansible module instead…
The Python 2 yum module is needed for this module. If you require Python 3 support use the dnf Ansible module instead.”

安装httpd

[root@ansible-server ~]# ansible web-nodes -m yum -a 'name=httpd state=latest'
[root@ansible-server ~]# ansible web-nodes -m yum -a 'name=httpd state=present'
[root@ansible-server ~]# ansible web-nodes -m yum -a 'name=httpd state=installed'
  
[root@ansible-server ~]# ansible web-nodes -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'
[root@ansible-server ~]# ansible web-nodes -m yum -a 'name="@Development tools" state=present'
  
卸载httpd
[root@ansible-server ~]# ansible web-nodes -m yum -a 'name=httpd state=absent'
[root@ansible-server ~]# ansible web-nodes -m yum -a 'name=httpd state=removed'

user 模块与group 模块
user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令。

user模块
home: 指定用户的家目录, 需要与createhome配合使用。
groups: 指定用户的属组。
uid: 指定用的uid。
password: 设定用户密码, password参数需要接受md5加密后的值. 特别注意: 指定password参数时, 不能使用明文密码, 因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中, 所以需要先将密码字符串进行加密处理, 然后将得到的字符串放到password中即可。
name: 指定用户名。
system: 是否为系统用户。 表示默认创建为普通用户, 而非系统用户, 指定是用yes. 也就是说yes是默认创建为普通用户, 而非系统用户;
update_password: 修改用户密码, 其中always: 新密码和旧密码不同时进行修改; on_create: 为新创建的用户指定密码.
createhome: 创建家目录, 其中yes表示默认项, 即创建用户默认是有家目录的; no表示创建用户时不创建家目录.
remove: 其中yes是删除用户家目录, 需要指定此参数; no是默认项, 删除用户时默认不删除用户的家目录. 当state=absent时, remove=yes则表示连同家目录一起删除, 等价于userdel -r。
state: 用户状态是创建还是删除. (present, absent) ;默认为present; 其中present表示添加用户; absent表示删除用户
shell: 指定用户的shell环境。
generate_ssh_key: 是否为相关用户生成SSH密钥。 这不会覆盖现有的SSH密钥。
ssh_key_bits: 可选择指定要创建的SSH密钥中的位数。
ssh_key_passphrase: 设置SSH密钥的密码。 如果没有提供密码, SSH密钥将默认没有密码。
ssh_key_file: 指定SSH密钥文件名(可选). 如果这是一个相对的文件名, 那么它将是相对于用户的主目录。
ssh_key_type: 指定要生成的SSH密钥的类型(可选). 可用的SSH密钥类型将取决于目标主机上的实现。

使用bash shell添加用户haha,将组"管理员"和"开发人员"附加到用户组
[root@ansible-server ~]# ansible web-nodes -m user -a "name=haha shell=/bin/bash groups=admins,developers append=yes"
   
增加用户anhui (先对密码做明文到密文的处理)
[root@ansible-server ~]# echo "anhui@123" | openssl passwd -1 -stdin
$1$rj74jCVy$NDW80bgY0DUTuHUlSunVv1
[root@ansible-server ~]# ansible web-nodes -m user -a 'name=anhui system=yes password=$1$rj74jCVy$NDW80bgY0DUTuHUlSunVv1 state=present'
   
删除用户anhui
[root@ansible-server ~]# ansible web-nodes -m user -a 'name=anhui remove=yes state=absent'
   
更新用户kevin的密码 (先对新密码kevin@bj123做明文到密文的处理)
[root@ansible-server ~]# echo "kevin@bj123"| openssl passwd -1 -stdin
$1$5X5bH5.J$RwE6o6g6bX953W7vAaizv/
[root@ansible-server ~]# ansible web-nodes -m user -a 'name=kevin update_password=always password=$1$5X5bH5.J$RwE6o6g6bX953W7vAaizv/'
   
在~/.ssh/id_rsa中为用户bobo创建一个2048位的SSH密钥
[root@ansible-server ~]# ansible web-nodes -m user -a 'name=bobo generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'
  
[root@ansible-server ~]# ansible web-nodes -m group -a "name=yang gid=888"
[root@ansible-server ~]# ansible web-nodes -m user -a "name=yang uid=888 group=888 shell=/sbin/nologin create_home=no"

group模块
gid: 指定用的gid。
name: 指定用户名。
state: 是创建还是删除, (present,absent);
system: 如果是,则表示创建的组是系统组;

[root@ansible-server ~]# ansible web-nodes -m group -a "name=huoqiu state=present"
[root@ansible-server ~]# ansible web-nodes -m group -a "name=chenzun gid=897 state=present"
[root@ansible-server ~]# ansible web-nodes -m group -a "name=huoqiu state=absent"
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 12:19:55  更:2021-07-17 12:21:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 0:56:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码