Ansible自动化运维实战

本文详细介绍了Ansible的基础安装、DNS配置、主机清单管理、SSH密钥、ping测试、inventory主机清单、Ad-Hoc模式、YAML语法、Role角色扮演等内容,旨在帮助读者理解和实践Ansible的运维自动化功能。
摘要由CSDN通过智能技术生成

一、abstract简介

        ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric) 的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.无客户端。我们要学一些Ansible的安装和一些基本概念,然后我们会开始研究一些真正有意思的东西 - plavbook,配置管理,部署以及语法编排.我们将会学习如何使用/usr/bin/ansible执行ad-hoc并行命令,我们还会学习ansible的核心有什么样的模块可供使用.当然以后你也可以写你自己的模块。

二、install部署

1. dns resolve

环境:

        ansible服务器:

                192.168.64.2

        ansible客户机:

                192.168.64.3

                192.168.64.4

                192.168.64.5

ansible服务器

        域名解析

                vim  /etc/hosts

                192.168.64.2   ansible

                192.168.64.3   host1

                192.168.64.4   host2

                192.168.64.5   host3

ansible客户机

        无需配置 

                IP

                YUM源

2.install  ansible

yum  install  -y  epel-release   可配置阿里的

yum  install  -y  ansible

检测是否安装成功

rpm  -ql  ansible                列出ansible所有文件

rpm  -qc  ansible               查看配置文件

ansible  --help                   查看ansible帮助

ansible-doc   -l                  看所有模块

ansible-doc  -s  yum          看yum模块

三、ssh-key可选

1.免密码ssh-key的方式

2.ssh-keygen的方式

3.ssh-copy-id  IP地址     推送密钥

四、ansible基础

1.定义主机清单

vim  /etc/ansible/hosts

host1

host2

host3

没有host4注意

2.测试连通性

ansible  localhost  -m  ping    -m指定模块,ping只是其中的一个模块,还有shell,yum等

3.简洁输出

ansible  localhost  -m  ping  -o

4.know_hosts

 ansible  host1 -m  ping  成功,因为有免密

ansible  host2 -m  ping   失败,没有免密

ansible  host2 -m  ping  -u  root  -k   -o     增加用户名选项,和密码选项

去掉(yes/no选项)的询问

vim  /etc/ssh/ssh_config

StrictHostKeyChecking  no

systemctl  restart  sshd

5.错误示范

ansible  host4 -m  ping  -u  root  -k   -o    失败,主机清单未配置主机

6.请注意ping和ssh

ping    ICMP:网络消息管理协议

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

再使用ansible对host2进行连通性测试,却是失败的

结论:ansible的ping,是餐车ssh程序是否连接,不是icmp协议

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

五、inventory主机清单

含义:清查,存货清单,财产目录,主机清单

1.增加主机组

官方链接:

vim  /etc/ansible/hosts

[webserver]

host1

host2

host3

host4

ansible  webserver  -m  ping  -o                验证组被调用

2.增加用户名,密码

vim  /etc/ansible/hosts

#为了方便管理都是添加免密

[webserver]

host1   ansible_ssh_user='root'   ansible_ssh_pass='666666'

host2    ansible_ssh_user='root'   ansible_ssh_pass='666666'

host3    ansible_ssh_user='root'   ansible_ssh_pass='666666'

host4     ansible_ssh_user='root'   ansible_ssh_pass='666666'

host[1:4]   ansible_ssh_user='root'   ansible_ssh_pass='666666'

ansible  webserver  -m  ping  -o                验证

思考主机和用户名和密码不同怎么设置?  分别设置

3.增加端口

将host4的sshd端口修改为2222

vim   /etc/ssh/sshd_config

Port   2222   (1024-65535)最好

systemctl restart  sshd

登录的话需要加上端口 ssh  root@192.168.64.3  -p  2222

ansible  webserver  -m  ping  -o                验证,失败因为端口已改

vim  /etc/ansible/hosts 

[webserver]

host[1:3]   ansible_ssh_user='root'   ansible_ssh_pass='666666'

host4     ansible_ssh_user='root'   ansible_ssh_pass='666666'  ansible_ssh_port='2222'

liunx进行安全加固?(面试题)

修改ssh默认端口号,禁用超管,修改yum源等等

4.组:变量

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

vim   /etc/ansible/hosts

[webserver]

host[1:3]  

host4       ansible_ssh_port='2222'

[webserver:vars]                vars代表的是变量

ansible_ssh_user='root'   

ansible_ssh_pass='666666'

常用变量

5.子:分组

将不同的组进行组合

vim   /etc/ansible/hosts

[apache]

host[1:2]

[nginx]

host[3:4]

[webserver:children]                children 子分组  

apache

nginx

[webserver:vars]                vars代表的是变量

ansible_ssh_user='root'   

ansible_ssh_pass='666666'

6.自定义主机列表

vim  hostlist   

[dockers]

host[1:2]

[dockers:vars]

ansible_ssh_user='root'   

ansible_ssh_pass='666666'

ansible  -i  hostlist  dockers  -m  ping  -o    -i连接外部主机清单

六、Ad-Hoc点对点模式

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

1.shell模块

ansible-doc    shell

ansible   webserver   -m   shell   -a  'hostname'   -o   调用hostname  -o间接执行

ansible   webserver   -m   shell   -a  ‘hostname’   -o   -f  2   指定线程数

ansible   webserver   -m   shell   -a  'yum  -y  install  httpd'  -o     安装程序

ansible   webserver   -m   shell   -a  'uptime'        查询系统负载

2.复制模块

帮助  ansible-doc  copy

案例   快速拷贝东西到别的机器上(机器多,人少)

ansible  webserver  -m  copy  -a  'src=/etc/hosts dest=/tmp/2.txt  owner=root  group=bin  mode=777'   src=source 资源   dest=destination目标地  owner属主  group属组  mode权限

ansible  webserver  -m  copy  -a  'src=/etc/hosts dest=/tmp/2.txt  owner=root  group=bin  mode=777  backup=yes'    backup如果内容不同不覆盖,重新建一个文件 

3.用户模块

帮助   ansible-doc  user

3.1创建用户

ansible   webserver   -m  user  -a  'name=qianfeng  state=present'    创建present

3.2修改密码

1.生成加密密码  

echo  '512050951'   |  openssl   passwd        -1                 -stdin      生成加密密码值

                                   加密          密码       密码类型           标准输入输出,不等用户回话

2.修改密码

ansible   webserver   -m   user   -a    'name=qianfeng  password="把上个命令生成密码放这"

3.3修改shell

ansible   webserver   -m   user   -a    'name=qianfeng  shell=/sbin/nologin  append=yes'  

                                                                                                                        追加修改的意思

3.4删除用户

ansible   webserver   -m  user  -a  'name=qianfeng  state=absent'     删除absent

4.软件包管理

帮助   ansible-doc   yum

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

ansible    host2   -m   yum   -a   'name="http"  state=latest'   安装apache

5.服务模块

ansible-doc   service  帮助

ansible   host2  -m   service   -a   'name=httpd  state=started'    开启http服务

ansible   host2  -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-doc   setup

ansible    host3    -m   setup

ansible    host3    -m   setup   -a    'filter=ansible_all_ipv4_addresses'    filter过滤

七、YMAL-YMAL Aint't Markup Language 非标记语言

语法

列表

fruits:

        - Apple

        - Orange

        - pear

字典

martin:

        name:Martin  Devoper

        job:Developer

        skill:Elite

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

ansible服务器:

1.准备工作

        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                     Listen  8080

2.编写剧本-----对齐很重要

        vim  apache.ymal

                - hosts: host2                减号后面一定要有空格,冒号后边有空格

                  tasks:                        tasks任务,只有一个的话在tasks后边写

                  - name: install  apache   packages                name描述信息

                    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

3.测试

        ansible-playbook   apache.yaml   --syntax-check        剧本apache.yml  语法测试校验

        ansible-playbook   apache.yaml   --list  -tasks             列出来都有什么任务

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

        ansible-playbook   apache.yaml                                   执行剧本

        检查一下

        192.168.64.3:8080

4.handlers

        如果配置发生变化(httpd.connf),系统需要重启

八、Role 角色扮演

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

目标:通过role远程部署ngnix并配置

1.目录结构

tree  roles/

准备目录结构

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

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

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

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

2.编写任务

vim  roles/nginx/tasks/main.yaml

        

        ---                

        - name: install epel-release package               

          yum:  name=epel-release state=latest                

        - name: install nginx package

          yum:  name=nginx state=latest 

        - name: copy index.html

          copy: src=index.html dest=/usr/share/nginx/html/index.html

        - name:copy nginx.conf template

          template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf        看做copy

          notify: restart nginx

        - name: make sure nginx service running

          service: name=nginx stat=started enabled=yes

template和copy的区别          模板文件,金甲模板文件

notify触发器   里边是handlers的名字

3.准备配置文件

金甲模板中允许写变量,其他文件不许写

这些文件再拷贝的时候会经过一次转换,先执行变量,写入变量,拥有在内部填写并替换变量的的功能

已有变量,也可以自定义变量

vim  roles/nginx/templates/nginx.conf.fj2        有变量

worker_processes  {{  ansible_processor_cores  }};   ngnix的  放数字不能写死,服务器的cpu数量来写,ngnix的优化中进程数和cpu的数量对应上,这里是ansible的内置变量,能够调用cpu的数量,拷贝完文件之后,将cpu的具体数量写在这里

worker_connections  {{  worker_connections }};  自创的

查找host1的进程数

4.编写变量

vim roles/nginx/vars/main.yaml 

worker_connections: 10240

5.编写处理程序

vim roles/nginx/handlers/main.yaml

---                

 - name: restart nginx              

   service:  name=nginx state=restarted     

6.编写剧本

vim  roles/site.yaml

- hosts: webserver

  roles:

  - nginx    跟roles下的nginx这个写的一样

7.实施

cd  roles

ansible-playbook site.yaml --syntax-check   测试正确性

        

ansible-playbook  site.yaml   实施剧本

验证host4

九、Homework

中关村在线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值