网站开发的技术简介,代理网约车平台赚钱吗,做折页的网站,wordpress最新主题下载地址目录
一、Ansible核心组件 二、Ansible配置
1.配置案例
#xff08;1#xff09;管理安装ansible
#xff08;2#xff09;管理机分发公匙
#xff08;3#xff09;配置管理
#xff08;4#xff09;测试连接
2.命令说明
三、playbook剧本编写
1.playbook模板…目录
一、Ansible核心组件 二、Ansible配置
1.配置案例
1管理安装ansible
2管理机分发公匙
3配置管理
4测试连接
2.命令说明
三、playbook剧本编写
1.playbook模板
2.playbook剧本话管理
3.常用模块
4.文件管理 5.文件分发
6.处理程序Handlers
7.角色管理
8.事实
9.加密 一、Ansible核心组件
Host Inventory模块 定义ansible管理的主机可以进行分组管理。
Core Modules Ansible核心模块 ansible中模块就是用来指定对远程主机具体的操作比如执行命令模块command、创建文件模块file等ansible自带的模块。
Custom Modules自定义模块 如果黑犀牛模块不足以完成魔种功能呢就可以使用任何语言自定义模块。
Connection Plugins连接插件 Ansible用来连接被管理端的一种方式比如客户端运行了SSH服务Ansible利用SSH服务跟客户端进行通信Ansible是通过python编写的而python有一个模块paramiko支持并行连接SSHAnsible事实上就是使用paramiko进行连接被管理端。但是它还支持其他的连接方式需要插件如zeroMQ就是C/S模式工作。
Plugins第三方插件支持 如email、logging模块只要有Python编写能力就可以自行编写插件。 二、Ansible配置
1.配置案例
实验环境准备
192.168.10.10 管理机 192.168.10.11 被管理机目前只要机器上安装了python2.6或python2.7windows系统不可以做控制主机都可以运行Ansible。主机的系统可以是Red HatDebianCentOSOS XBSD的各种版本等等。
1管理安装ansible
yum -y install epel-release#ansible在epel扩展源中yum -y install ansible#安装ansible
2管理机分发公匙
ssh-keygen -t rsa -b 4096#生成密钥对ssh-copy-id root192.168.10.11#将公钥传给被管理机
#编写批量化传公钥的脚本
yum -y install expect#安装expect让脚本支持expect的命令可以出发远程登录。vim send_isa_pub.sh#编写批量化传公钥的脚本#!/bin/bash
ip1100
pwd123456
while [ $ip1 -le 200 ];
doip192.168.10.$ip1
expect EOF
spawn ssh-copy-id root$ip
expect {
yes/no {send yes\n;exp_continue}
password {send $pwd\n}
}
export eof
EOFlet ip1$ip11
done3配置管理
cd /aetc/ansible
vim hosts#编辑主机管理文件
[web] #定义模块
# 设置管理的主机被管理主机的IP地址
192.168.10.11
[local]
127.0.0.1
[remote]
192.168.10.114测试连接
ansible -i /etc/ansible/hosts --connectionlocal local -m ping# 测试本地连接-i 指定主机文件-m指定调用的命令模块# --connectionlocal告诉ansible本机通信不需要通过SSH运行命令ansible -i /etc/ansible/hosts remote -m ping# 测试远程连接-m后面跟调用的命令模块# 测试到 remote 模块的主机是否网络通畅
2.命令说明
命令ansible
参数-i /etc/ansible/hosts# --inventoryPATH# 指定库存文件命名为hostsremote,local,all# 使用这个标签的下定义的服务器hosts清单文件# “all”是针对文件中定义的每个服务器运行的特殊关键字的。--private-keyPRIVATE_KEY_FILE_PATH# #使用指定路径的密匙建立认证连接-m shell# --module-pathDIRECTORY# 使用shell模块它只是运行ping命令并返回结果。-a yum -y install httpd# 用于将任何参数传递给 -m 指定的模块-c local或--connecionlocal#在本地服务器上运行命令而不是SSH。-b --become-userroot# 以用户“root”身份运行命令-u USERNAME --userUSERNAME# 指定移动端的执行用户-U SUDO_USERNAME --sudo-userUSERNAME-s --sudo# -u指定用户的时候使用sudo获得root权限-k --ask-pass# 提示输入ssh的密码而不是使用基于ssh的密钥认证-K --ask-sudo-pass# 提示输入sudo密码与--sudo一起使用示例ansible -i /etc/ansible/hosts web -b --become-userroot -m shell -a yum -y install httpd# -i指定hosts文件内有管理主机的IP中的web组里的主机# -b指定以root用户执行后面的命令# -m指定shell模块运行命令# -a指定yum -y install httpd运行这个命令,并将这个参数传给shellansible -i ./hosts local --connectionlocal -b --become-userroot -m shell -a yum -y install nginx# --connectionlocal对本机执行ansible -i ./hosts local remote -b --become-userroot -m shell -a yum -y install httpd# 同时指定多个模块
三、playbook剧本编写 功能剧本文件中可以写入多个执行项并排列好执行顺序一次性给客户执行 特点剧本文件必须按照yml语言编写后缀必须是.yml 剧本中调用对应的模块即程序段实现对应的功能
1.playbook模板
mkdir /etc/ansible/playbook cd /etc/ansible/playbookvim default.yml
- hosts: web #指定hosts文件里的web模块的主机become: yes #允许使用指定的用户身份去执行become_user: roottasks: #针对web主机组执行的操作 - name: install httpd #定义一个任务名shell: #调用shell模块执行命令yum -y install httpd#command: yum -y install httpd #等于shell模块- name: create web page file #创建网页文件shell:echo www.daboluo.com /var/www/html/index.html - name: start httpd #定义一个任务名service: #服务name: httpd #服务名为httpdstate: restarted #指定服务状态重启ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/default.yml# 指定主机文件/etc/ansible/hosts剧本文件为/etc/ansible/playbook/default.yml
2.playbook剧本话管理
功能制定被管主机服务业务的部署方案实现复杂配置配置思路 首先定义.yml文件文件内容按ad-hoc格式编写 再用ansible-playbook -i ./hosts XXX.yml的方式调用运行剧本
模块化管理 .yml文件中使用不同模块完成不同的配置功能
3.常用模块
tasks # 定义各种任务.yml启动时执行常用任务类型如下command # 运行指定命令shell # 调用指定脚本file # 文件创建copy # 文件复制service # 服务管理yum # 软件安装handlers # 设定处理程序user # 用户模块group # 组模块
# command和shell的区别
# command只能调用一条指令不支持保留字shell可以使用管道。
# 不支持别名命令4.文件管理
# task任务中可设定file模块创建文件或目录
file:path: /mnt/d1mode: 0775state: directory
# 指定文件类型touch文件directory目录link软连接hard硬链接absent删除文件owner: www-datagroup: www-data#src/mnt/f1 # 若statelink/hard的时候src来指定原文件#forceyes # 若创建软链接时需要强制创建则增加forceyes#recurseyes # 若statedirectory时并且更改权限或所属的时候需递归继承增加此选项。
# 若文件/目录不存在则创建若文件/目录存在则更改权限所属。参数详解 state参数文件需要将state的值设置为touch。软链接需要将state设置为link硬链接需要将state设置为hard。删除文件时删除时不用区分目标是文件、目录还是链接需要将state的值设置为absent“absent”为缺席之意当我们想让操作的目标“缺席”时就表示我们想要删除目标。 src参数当state设置为link或hard时表示我们想要创建一个软连接或硬链接所以我们必须知知名软连接或硬链接的那个文件通过src参数即可指定链接源。 force参数当statelink的时候可以配合此参数强制创建链接文件当forceyes时表示强制创建链接文件。 recurse参数当要操作的文件为目录将recurse设置为yes可以递归的修改目录中文件的属性。
示例
vim test1.yml#编写剧本文件
- hosts: webbecome: yesbecome_user: roottasks:- name: chuang jian wen jianfile: #创建一个文件path: /mnt/f1 #文件的路径state: touch #状态为创建mode: 0644 #权限为644owner: root #所有者为rootgroup: root #所属组为rootansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/test1.yml
vim link-test.yml
- hosts: webbecome: yesbecome_user: roottasks:- name: an zhuang httpdfile: #创建一个文件src: /mnt/f1 #源文件的路径dest: /root/f1 #软连接文件为f1state: link #创建软链接force: yes #如果已经存在那就强制创建ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/link-test.yml 5.文件分发
功能从ansible服务器端分发文件给客户机
copy: src/mnt/f1 # 指定本机要分发出去的文件路径 dst/mnt/ # 指定客户机上分发后存放的路径 # 复制文件- hosts: webbecome: yesbecome_user: roottasks:- name: testcopy:src: /mnt/f1
# 本机要分发出去的文件src/mnt表示把整个目录分发下去src/mnt/表示分发目录下所有内容dest: /mnt/ # 客户机上存放的路径mode: 0644 # 权限为644owner: root # 所有者为rootgroup: root # 所属组为rootansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml # 复制多个文件
# 多个文件复制传到相同位置- hosts: testvars:filename: /mnt/f*become: yesbecome_user: roottasks:- name: copy filecopy:src: {{item}} #占位符dest: /mnt/mode: 0755owner: rootgroup: rootwith_fileglob: {{filename}} #调用变量的值将变量的值传给占位符ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml# 多个文件传到不同位置- hosts: testremote_user: rootgather_facts: falsebecome: yestasks:- name: copy from target cpucopy:src: {{item.src}} #占位符src调用src项dest: {{item.dest}} #占位符dest调用dest项mode: 0755owner: rootgroup: root loop:- {src: /mnt/f1, dest: /mnt } #被调用变量- {src: /mnt/f2, dest: /var } #被调用变量给占位符传值ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml# 使用变量支持保留字时只针对批量文件分发有效对批量目录的分发无效# 添加用户或组- hosts: webremote_user: rootbecome: yestasks:- name: testuser:name: wang #创建名为wang的用户state: presentansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml
6.处理程序Handlers 处理程序与任务完全相同它可以做task可以做的任何事相当于一个函数只是在剧本启动时不被执行只有当另一个任务调用它时才会运行您可以将其视为时间系统的一部分处理程序将通过其侦听的时间调用进行操作。 这对于运行任务后可能需要的“辅助”操作非常有用例如在配置更改后安装或重新加载服务后启动新服务。
功能使用handlers模块创建任务但并不会被直接执行实在任务中调用执行类似于软件开发中欧给的函数功能。
注使用notify关键字调用handlers程序而且notify不可以独立完成任务需要跟在其他任务后。 示例
- hosts: webbecome: yesbecome_user: roottasks:- name: an zhuangyum:name: httpdstate: installednotify:jian wang ye #调用下方的handlers的执行的操作- name: qi fu wuservice:name: httpdstate: restartedhandlers: #被上面notify调用- name: jian wang yeshell:echo www.daboluo.com /var/www/html/index.htmlansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml
7.角色管理 角色的功能 将剧本中需要定义的各个模块如handlers、files、变量等分别存放于不同的目录中然后在task中组织任务部署的流程方案。 角色的优点 模块化、离散化编写复杂任务 可支持的功能比单个task文件较为丰富如可创建文件模板便于某服务的配置文件的统一化配置 角色的创建 ansible-galaxy init NFS-test #创建角色角色名为NFS-test
cd /etc/ansible/rolesansible-galaxy init test #创建角色命名为testcd files mkdir d1echo aaaa d1/f1cd ../tasksvim main.yml
-name: copy d1copy:src: d1 #不用指定路径他会自动到角色的目录下的files目录下找d1文件dest: /mnt/mode644owner: rootgroup: rootvim test.yml
- hosts: webroles: #调用web_admin用户的所有任务- web_adminansible-playbook -i /etc/ansible/hosts tt.yml8.事实 在运行任何任务之前Ansible将手机有关其配置的系统的信息这些被成为事实并且包括广泛的系统信息如CPU核心数量可用的ipv4和ipv6网络挂载的磁盘Linux发行版等等。 事实在“任务”或“模板”配置中通常很有用例如在nginx的配置文件模块文件中设定与CPU核数一样的进程数。
user www-data:worker_processes {{ ansible _processor_cores }};# 定义进程数pid /var/run/nginx.pid;# 所有的ansible facts全局变量都是以“ansible_为前缀并且可以在其他任何地方使用。ansible -m setup --connectionlocal localhost# 查看本机事实ansible -i ./hosts remote -m setup# 查看远端事实获取客户端信息示例ansible -i /etc/ansible/hosts web -m setup# 查看客户端信息
9.加密 我们经常需要将敏感数据存储在我们的模板文件或变量文件中这样安全性由一定要求的情况时不可避免的。 Ansible有一个j奥做Ansible Valult的解决方案 Vault允许加密任何Yaml文件通常用于将其作用与遍历啊ing文件Vault不会加密文件和模板只能加密Yaml文件。 在创建加密文件时系统会询问您必须使用的密码以便稍后在调用角色或playbook时进行编辑。
参数 create #创建一个新文件并进行加密decrypt #从加密文件创建明文文件edit #编辑已经存在的加密文件encrypt #加密现有的纯文本文件rekey #在加密文件中设置新密码示例
ansible-vault create vars/main.yml# 创建一个新的变量文件并加密。# 输入加密密码后该文件将在默认编辑器通常是vim或nano中打开。