Ansible 自动化运维实战

目录

 

1.abstract-简介

2.install-部署

1.dns resolve

2.install ansible

3.ssh-key(可选)

4.ansible基础

5.Inventory -主机清单

6.Ad-Hoc-点对点模式

7.YAML-YAML Ain’t Markup Language-非标记语言

语法

示例1

ansible服务器

8.Role-角色扮演

1.目录结构

9.Homework(了解)


1.abstract-简介

Logo

介绍

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。
无客户端。

我们要学一些Ansible的安装和一些基本概念,然后我们会开始研究一些真正有意思的东西 – playbook,配置管理,部署以及语法编排.我们将会学习如何使用/usr/bin/ansible执行ad-hoc并行命令,我们还会学习ansible的核心有什么样的模块可供使用.当然以后你也可以写你自己的模块,我们会在后期讲到.

工作原理

2.install-部署

1.dns resolve

环境

ansible服务器 :10.8.162.64

ansible客户机:10.8.162.114  

  也可以使用更多台客户机操作都一样所以我这里就使用了一台

域名解析

在ansible服务器上做域名解析就可以了

 

ansible客户机

无需配置

2.install ansible

ansible服务器

yum install -y epel-release

安装epel源,如果您在非学校环境,请使用下方阿里YUM

rm  -rf /etc/yum.repos.d/*

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 

yum install -y ansible

     检测部署是否完成                 

rpm -ql ansible   列出所有文件

rpm -qc ansible    查看配置文件

ansible --help     查看ansible帮助

ansible-doc -l       看所有模块(A10,华为,docker,EC2,aws等等广大厂商设备)

ansible-doc -s yum     看yum模块,了解其功能

3.ssh-key(可选)

ssh-keygen       //产出公钥

ssh-copy-id IP地址   //推送公钥

   这一步也可以不做就是ansible 的时候需要输入密码

4.ansible基础

1.定义主机清单

vim /etc/ansible/hosts

2.测试连通性

3.简洁输出

ansible host1 -m ping  -o 

4.know_hosts

ansible host1 -m ping -u root -k -o 

去掉(yes/no)的询问

vim /etc/ssh/ssh_config

StrictHostKeyChecking no    //写入的内容

systemctl restart sshd       //重启sshd

5.错误示范

ansible host4 -m ping -u root -k -o      //失败,主机清单未标注主机。

6.请注意ping和ssh

ping  ICMP:网际消息管理协议

关闭host1主机的sshd进程,进行ping连通性测试。

再使用ansible对host1进行联通测试时,却是失败的。

结论ansible的ping,是探测ssh程序是否连接。不是icmp协议

ansible host1 -m ping -u root -k

5.Inventory -主机清单

含义

清查;存货清单;财产目录;主机清单

1 增加主机组

官方链接:http://docs.ansible.com/ansible/intro_inventory.html#

vim /etc/ansible/hosts

 ansible webserver -m ping -u root -k -o

2 增加用户名 密码

vim /etc/ansible/hosts                         //注意您的密码与我这里不同。

3 增加端口

请将host1的sshd程序端口修改为2222

# vim /etc/ssh/sshd_config

ansible webserver -m ping -o    //失败,因为默认端口已更改

vim /etc/ansible/hosts

请将用户名密码和端口回复原状

4 组:变量

ansible内部变量可以帮助我们简化主机清单的设置

vim /etc/ansible/hosts

常用变量

5 子分组

将不同的分组进行组合

vim /etc/ansible/hosts

[apache]
host[1:2]
[nginx]
host[3:4]
[webserver:children]
apache
nginx
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'

6 自定义主机列表

vim hostlist

[dockers]
host1
host2
[dockers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'

6.Ad-Hoc-点对点模式

简介

临时的,在ansible中是指需要快速执行的单条命令,并且不需要保存的命令。对于复杂的命令则为 playbook。

1.shell模块

帮助 :ansible-doc shell

ansible webserver -m shell -a 'hostname' -o    获取主机名

ansible host2 -m shell -a 'yum -y install httpd' -o     部署apache

 2.复制模块

帮助:ansible-doc copy

ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777'

3.用户模块

帮助:ansible-doc user

创建用户

ansible host1 -m user -a 'name=qianfeng state=present'

删除用户

ansible host1 -m user -a 'name=qianfeng state=absent'

修改密码

1.生成加密密码

echo '777777' | openssl passwd -1 -stdin   

2.修改密码

ansible host1 -m user -a 'name=qianfeng password="$1$wIyCU2Tk$qVR0VG2WTh4AwWphNVqqx."'

这个时候在host1就创建了一个用户qianfeng 密码是:777777

4.软件包管理

帮助:ansible-doc yum

ansible host1 -m yum -a 'name="*" state=latest'    //升级所有包

ansible host1 -m yum -a 'name="httpd" state=latest'         //给host1安装apache

5.服务模块

ansible host1 -m service -a 'name=httpd state=started'    //启动

ansible host1 -m service -a 'name=httpd state=started enabled=yes' //开机自启

ansible host2 -m service -a 'name=httpd state=stopped'                //停止

ansible host2 -m service -a 'name=httpd state=restarted'         //重启

ansible host2 -m service -a 'name=httpd state=started enabled=no'     //开机禁止启动

6.文件模块

帮助:ansible-doc file

ansible host1 -m file -a 'path=/tmp/88.txt mode=777 state=touch'  //创建文件

ansible host1 -m file -a 'path=/tmp/99 mode=777 state=directory'

7.收集模块

ansible host1 -m setup    //查询所有信息

ansible host -m setup -a 'filter=ansible_all_ipv4_addresses'     //查看ip

7.YAML-YAML Ain’t Markup Language-非标记语言

语法

列表

fruits:

    - Apple

    - Orange

    - Strawberry

    - Mango

字典

martin:

    name: Martin D'vloper

    job: Developer

    skill: Elite

示例1

需求

通过YAML编写一个简单的剧本,完成web的部署,配置,启动的全过程。

ansible服务器

准备工作

ansible all -m yum -a 'name=httpd state=removed' -o   //清理一下环境

yum install -y httpd                                                        //准备配置文件

mkdir apache

cd apache

cp -rf /etc/httpd/conf/httpd.conf .

grep '^Listen' httpd.conf           //修改配置,用作推送

编写剧本

vim apache.yaml

- hosts: webserver
  tasks:
  - name: install apache packages
    yum: name=httpd state=present
  - name: copy apache conf
    copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
  - name: ensure apache is running
    service: name=httpd state=started enabled=yes
  

ansible-playbook apache.yaml  --syntax-check   // 检验语法

ansible-playbook apache.yaml --list-tasks    //列出任务

ansible-playbook apache.yaml --list-hosts        //列出主机

 

ansible-playbook apache.yaml      //执行

http://192.168.2.142:8080/         //注意端口

handlers

如果配置文件发生变化。

Listen  9000

ansible-playbook apache.yaml   //再次执行,命令成功,但配置未生效,所以要增加处理程序。设置触发器

vim apache.yaml

如果配置文件再发生变化。

Listen  9080

ansible-playbook apache.yaml   //再次执行,配置生效,触发成功

8.Role-角色扮演

简介 

roles则是在ansible中,playbooks的目录组织结构。
将代码或文件进行模块化,成为roles的文件目录组织结构,
易读,代码可重用,层次清晰。

目标

通过role远程部署nginx并配置

1.目录结构

 

nginx 角色名
files  普通文件
handlers  触发器程序
tasks  主任务
templates 金甲模板(有变量的文件)
vars 自定义变量

准备目录结构

mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p

touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml

echo   123 > roles/nginx/files/index.html

yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2

2.编写任务

vim roles/nginx/tasks/main.yaml

3.准备配置文件

vim roles/nginx/templates/nginx.conf.j2

4.编写变量

vim roles/nginx/vars/main.yaml

5.编写处理程序

vim roles/nginx/handlers/main.yaml

6.编写剧本

vim roles/site.yaml

7.实施

cd roles

ansible-playbook site.yaml --syntax-check      //测试

ansible-playbook site.yaml                          //实施剧本

9.Homework(了解)

了解行业背景知识

==采购服务器并托管==
1. 了解DELL常见服务器的价格、型号、配置(CPU,内存、硬盘、支持的RAID功能)(3款)
2. 了解HP常见服务器的价格、型号、配置(CPU,内存、硬盘、支持的RAID功能)(3款)
3. 了解常见的硬盘接口类型、速率、价格如:ATA, SATA, SCSI, SAS, FC(3款)
4. 了解国内主要是北京托管商的信息如:厂商名称、托管的价格、地理位置(光环新网/世纪互联)(3家)

==云主机==
1. 了解青云qingcloud.com如价格、基本部署
2. 了解阿里云价格、基本部署
3. 了解阿亚马逊云价格、基本部署
4. 了解腾讯云价格、基本部署

==DNS 解析==
1. 了解国内主要的DNS ISP如万网、新网、DNSPOD、阿里DNS
2. 申请自己的域名,学习在DNS管理界面上添加各种记录

==CDN 技术==
1.了解国内主要的3家CDN ISP,对比其价格、性能、市场的占有率等
2.了解主要CDN购买及使用方式
3.了解反向代理技术Varnish原理及部署
4.查看126.com,sina.com, baidu.com使用的代理机制
 

如何在ansible中,使用不同的用户登录不同的主机?

在主机清单里设置
[webservers`]
asdf.example.com  ansible_port=5000   ansible_user=alice  ansible_pass=123456
jkl.example.com   ansible_port=5001   ansible_user=bob   ansible_pass=654321

如何加密hosts主机清单文件

[root@node1 ansible]# cat db_hosts
localhost ansible_connection=local
[root@node1 ansible]# ansible-vault encrypt db_hosts 
New Vault password: 
Confirm New Vault password: 
Encryption successful
[root@node1 ansible]# ansible -i db_hosts localhost -m ping
ERROR! Decryption failed
Decryption failed
[root@node1 ansible]# ansible -i db_hosts --ask-vault-pass localhost -m ping
Vault password: 
localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
[root@node1 ansible]# cat db_hosts 
$ANSIBLE_VAULT;1.1;AES256
61663966666265363465653064386666326234353433346163633838366532366236313032303636
6437313333333936396164663031633566613233343161650a333163333732616130343762636135
30303864663138643661393234336433313465623830333832663165393964353961323261373130
3135626236626435640a396338616563646532623966333337366365636665663563666432333539
61663632633130623733316232353836663366623136636432616332376266383263356264303765
6133616235363066356164653232326139643862653464623037

判断主机地址为10.18.46.37的主机。关闭该主机

- hosts: webserver
  tasks:
  - name: "shut down 10.18.46.37 systems"
    command: /usr/sbin/init 0
    when: ansible_all_ipv4_addresses == "10.18.46.37"

循环创建多个用户

- hosts: host1
  tasks:
  - name: add several users
    user: name={{ item }} state=present groups=wheel
    with_items:
       - testuser1
       - testuser2

 

 

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值