ansible 自动化运维

ansible 部署应用程序 (在操作系统层面之上)

系统初始化过程

主机名,yun源,网络,服务,时间同步,内核参数 (可以在pxe这里完成)

ansible可以方便100多台服务器来变更,不至于pxe重新安装

PXE  预启动的执行环境
PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。 当硬盘没有OS时可以选择
光盘
u盘
网络
启动

网络 (网卡) ip 当前的环境也得有dhcp服务器来分配ip 引导程序 启动 安装系统 脚本 anacoda

anacoda.cfg 为预写配置

主控端安装ansible软件就行

pupput
ruby saltstack
python
安装包
服务 master与agent对接 (属于saltstack) 客户端服务需要汇报心跳
模块化 ansible
python
安装包
基于ssh服务 (被管的客户端,在主机清单写)
模块化 ssh 加密
telent 被抓包都是明文

配一个aliyun的epel源

下载ansible并写主机清单。来测试

[root@workstation ansible]# cat hosts
192.168.230.165
192.168.230.166
[root@workstation ansible]#



红色为报错



黄色有改动,且成功

使用相应的模块完成会更好 虽然shell是万金油

shell不能保证ansible的幂等性 重复执行效果一样



从上图可以看出差别。user模块发现符合要求,则不在重新创建,而shell重新创建且引发了报错

ansible 基于ssh 所以并发连接会受限,ssh并发1000台,那么ssh就会顶不住

ansible可以多级控制 ansible嵌套ansible下发命令

ansible拥有playbook,按顺序执行指令

配置域名,写主机清单

[root@workstation ansible]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.230.164 workstation.example.com workstation
192.168.230.165 servera.example.com servera
192.168.230.166 servera.example.com serverb
[root@workstation ansible]# vi hosts
[root@workstation ansible]# cat hosts
servera
serverb
[root@workstation ansible]# [root@workstation ansible]# ansible all --list-hosts
hosts (2):
servera
serverb
[root@workstation ansible]#



遇到此问题,手动接收密钥

查看联通性

成功-k后,短时间内就不需要-k了

我使用ssh的哪个用户登录?

[root@workstation ansible]# ansible all -m shell -a 'whoami' -k
SSH password:
serverb | CHANGED | rc=0 >>
root
servera | CHANGED | rc=0 >>
root

登录后的工作目录为家目录

[root@workstation ansible]# ansible servera -m shell -a 'pwd' -u xiaomao -k
SSH password:
servera | CHANGED | rc=0 >>
/home/xiaomao
[root@workstation ansible]#

使用xiaomao来连接,并且发现家目录为xiaomao

通过家目录来判断当前用户更加靠谱

pwd未切换用户,读不到root的环境变量

补充ce内容

提权之后,角色会从普通用户变为root

[xiaomao@servera ~]$ sudo id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[xiaomao@servera ~]$ id
uid=1000(xiaomao) gid=1000(xiaomao) groups=1000(xiaomao) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[xiaomao@servera ~]$ [xiaomao@servera ~]$ sudo cat /etc/sudoers.d/xiaomao
xiaomao ALL=(ALL) NOPASSWD:ALL
[xiaomao@servera ~]$

ini格式定义变量

YAML格式的静态清单文件

webservers:
hosts:
server[a:b].lab.example.com
vars:
user_name: kevin dbservers:
hosts:
serverc.lab.example.com:
user_name1: user1 all_servers:
children:
webservers:
dbservers:
vars:
course_name: DO447 ungrouped:
hosts:
servere.lab.example.com
vars:
course_day: 4
[student@workstat
ansible-inventory --yaml -i inventory-bak --list --output inventory
ini格式转换为yaml

动态清单(知道可以用python写这个东西就行)

定义变量

1> 在命令行中输入变量
[student@workstation ansible]$ ansible-playbook -e user_name=kevin playbook.yml -e 参数指定 2> 定义主机和主机组的变量
1~ 在资产清单定义: 第一个例子 2~ 通过特定的目录来定义
[student@workstation ansible]$ mkdir group_vars
[student@workstation ansible]$ mkdir host_vars
[student@workstation ansible]$ tree group_vars/
group_vars/
├── dbservers
└── webservers 这两个文件书写格式
web_pack: abc
在group_vars内的文件名就是你的组名
[student@workstation ansible]$ ansible -m debug -a "var=web_pack" webservers
[student@workstation ansible]$ ansible -m debug -a "var=db_version" dbservers [student@workstation ansible]$ tree host_vars/
host_vars/
├── servera.lab.example.com
└── serverb.lab.example.com [student@workstation ansible]$ ansible -m debug -a "var=server_name" servera.lab.example.com
servera.lab.example.com | SUCCESS => {
"server_name": "servera"
}
host_vars内的文件名就是你在资产清单中定义的inventory_name 3> Role定义的变量
[student@workstation ansible]$ cat roles/httpd/vars/main.yml
---
# vars file for httpd
server_port: 8080
pack_name: httpd 4> 在Play中定义:
1~ 通过关键字来定义
---
- name: debug var
hosts: webservers
vars:
username: user1
vars_files:
- vars
tasks:
- name: debug vars
debug:
msg: "{{ username }} {{ age }}" 2~ 在tasks中定义var
---
- name: debug var
hosts: webservers
tasks:
- name: debug vars
vars:
username: user1
age: 50
debug:
msg: "{{ username }} {{ age }}"
~
在一个任务中定义的变量,不可以在其他任务去调用
---
- name: debug var
hosts: webservers
tasks:
- name: debug vars
set_fact:
username: user1
age: 50
- name: copy content
copy:
content: "{{ username }} {{ age }}\n"
dest: /root/kevin 3~ 在Play中也可以通过register来注册变量

提权与连接

1~ 在ansible的配置文件中,提升权限
[defaults]
remote_user = devops
inventory = inventory
ask_pass = false
roles_path = roles [privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False 2~ 在Play中提升权限
---
- name: install httpd
become: true
hosts: webservers
tasks:
- name: install httpd
yum:
name: httpd
state: present ---
如果是在task中替身权限,那么后续中的任务,就没有提升了
- name: install httpd
hosts: webservers
tasks:
- name: install httpd
become: true
yum:
name: httpd
state: present 在block中提升权限
---
- name: install httpd
hosts: dbservers
tasks:
- block:
- name: install httpd
yum:
name: httpd
state: present - name: prepare webcontent
copy:
content: "Hello,World\n"
dest: /var/www/html/index.html
become: true 在Role中提升权限
- name: Example play with one role
hosts: localhost
roles:
- role: role-name
become: true 通过变量来提升
ansible_become = true
ansible_become_method = sudo
ansible_become_user = root
ansible_become_pass = false [privilege_escalation]
become=False
become_method=sudo
become_user=root
become_ask_pass=False [student@workstation ansible]$ cat inventory
[webservers]
servera.lab.example.com ansible_become=true [student@workstation ansible]$ cat inventory
[webservers]
servera.lab.example.com ansible_become=true ansible_become_method=sudo ansible_become_user=root [dbservers]
serverb.lab.example.com #########
ansible_user
[webservers]
servera.lab.example.com ansible_become=true ansible_become_method=sudo ansible_become_user=root ansible_user=devops [dbservers]
serverb.lab.example.com 类似于你在在配置文件中的remote_user
ansible_ssh_host #用于指定被管理的主机的真实IP
ansible_ssh_port #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_ssh_user #ssh连接时默认使用的用户名 # 特定ssh连接
ansible_connection #SSH连接的类型:local, ssh, paramiko,在ansible 1.2 之前默认是paramiko,后来智能选择,优先使用基于ControlPersist的ssh(如果支持的话) ansible_ssh_pass #ssh连接时的密码
ansible_ssh_private_key_file #秘钥文件路径,如果不想使用ssh-agent管理秘钥文件时可以使用此选项 ansible_ssh_executable #如果ssh指令不在默认路径当中,可以使用该变量来定义其路径 # 特权升级
ansible_become #相当于ansible_sudo或者ansible_su,允许强制特权升级
ansible_become_user #通过特权升级到的用户,相当于ansible_sudo_user或者ansible_su_user
ansible_become_pass # 提升特权时,如果需要密码的话,可以通过该变量指定,相当于ansible_sudo_pass或者ansible_su_pass ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径 # 远程主机环境参数
ansible_shell_executable # 设置目标机上使用的shell,默认为/bin/sh ansible_python_interpreter #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl 的路径
ansible_*_interpreter #其他解释器路径,用法与ansible_python_interpreter类似,这里"*"可以是ruby或才perl等其他语言

ansible 001 ansible介绍 原理 主机清单 定义变量 提权与连接的更多相关文章

  1. Ansible主机清单Inventory文件hosts

    Ansible主机清单Inventory文件hosts 发表于 2017-05-14 | 分类于 运维相关 , Ansible | | 阅读次数 4638 | 字数统计 1,442 | 阅读时长预计 ...

  2. 1、Ansible初识简要介绍及安装

    1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

  3. Ansible2:主机清单【转】

    Ansible 通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务, 默认路径可以通过修改 ansible.cfg 的 hostfile 参数指定路径 ...

  4. Ansible-免密登录与主机清单Inventory

    Ansible的指定用户与密码登录.免密登录.指定ssh端口以及主机清单Inventory配置 在实际使用中并不需要对ansible配置进行修改,或者说只有需要的时候才修改ansible配置. 添加用 ...

  5. Windows原理深入学习系列-Windows内核提权

    这是[信安成长计划]的第 22 篇文章 0x00 目录 0x01 介绍 0x02 替换 Token 0x03 编辑 ACL 0x04 修改 Privileges 0x05 参考文章 继续纠正网上文章中 ...

  6. Ansible安装部署和常用命令,及其主机清单inventory(二)

    1.ansible的安装方式 1.1使用yum源安装 yum install ansible -y 1.2使用rpm包安装 https://dl.fedoraproject.org/pub/epel/ ...

  7. 【Ansible 文档】【译文】主机清单文件

    Inventory 主机清单文件 Ansible 可以对你的基础设施中多个主机系统同时进行操作.通过选择在Ansible的inventory列出的一部分主机来实现.inventory默认保存在/etc ...

  8. Ansible 小手册系列 五(inventory 主机清单)

    Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts 主机清单示例 mail.example. ...

  9. (2)ansible主机清单文件inventory

    1)inventory作用 作用:通常用于定义要管理主机的认证信息,例如ssh登录用户名,密码等相关信息 缺省文件:/etc/ansible/hosts 2)定义主机组方式 #vim /etc/ans ...

  10. 细说Ansible主机清单inventory

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 关于Ansible是 ...

随机推荐

  1. 企业级nginx内核优化篇

    1. cpu核心配置 方法1: worker_processes auto; 自动调用[推荐] 方法2: worker_processes 4; 手工配置 检查CPU核心:yum install nu ...

  2. centos6 chkconfig的原理 和添加开机自启动的办法

    当我们使用 chkconfig --list的时候 都会又 123456 这样的级别. 当某个级别是 on 他就会开机启动,当他是off 的时候他就不会开机自启动. 那么这是什么原因呢?他的 原理是什 ...

  3. itest(爱测试) 紧急 BUG 修复版(4.5.6)发布,,开源BUG 跟踪管理 & 敏捷测试管理&极简项目管理软件

    itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理4合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代(含任务, ...

  4. pandas基础--缺失数据处理

    pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的. 本章节的代码引入pandas约定为:import pandas as pd,另外import numpy ...

  5. 看我地win 11截图,啪啪的~

    挂载20G内存直接虚拟内存关闭到默认125兆了 这个得设置,不设置会非常卡,字多图多得都要设置

  6. form表单提交后,页面弹出成功或者失败的信息

    Ssm 中用RedirectAttributes做提示消息` @RequiresPermissions("hic:zybl:hicZybl:edit") @RequestMappi ...

  7. 贝壳找房: 为 AI 平台打造混合多云的存储加速底座

    贝壳机器学习平台的计算资源,尤其是 GPU,主要依赖公有云服务,并分布在不同的地理区域.为了让存储可以灵活地跟随计算资源,存储系统需具备高度的灵活性,支持跨区域的数据访问和迁移,同时确保计算任务的连续 ...

  8. OOM异常的4种可能分析及常见的OOM异常演示

    OOM异常的4种可能分析及常见的OOM异常演示 OOM异常: OutOfMemoryError 1.JAVA堆溢出JAVA堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到这些对象之间 ...

  9. Docker中部署单机Redis详细教程

    1.拉取Redis镜像 # 拉取redis镜像,不指定版本则默认是最新版本 docker pull redis 2.查看镜像 # 列出本地镜像 docker images 3.准备配置文件路径 # 创 ...

  10. C# DateTime日期字段转中文文字

    public static String ToChineseYearAndMonth(this DateTime dt) { string[] chineseNumbers = { "零&q ...