初识ansible

1、Ansible的简介

       Ansible是一种市面上主流的自动化运维工具,它基于python开发,基于模块化工作。Ansible集成了IT系统配置管理、应用部署、执行特定任务的开源平台,它由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身并没有批量部署的能力。真正具有批量部署能力的是Ansible所运行的模块,Ansible只是提供一种框架,由于它是基于ssh来和远程主机通讯的,故它不需要在远程主机上安装client/agents。

 

2、Ansible的架构

说明:ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台

 

playbook----电影
play----电影中的一个场景

playbook中有许多play
play中具体执行tasks
tasks有很多任务,每一个任务由一个模块来实现,例如copy

inventory主机列表
plugins 插件,对ansible功能补充,例如jinja2插件


3、Ansible 思想

简单的,就是更好的。ansible设计:简单使用和自动化部署。

ansible自动化语言是围绕简单的、声明性的、基于文本的文件构建的,这些文件对于人类来说是很容易阅读的,可操作的剧本可以清楚地记录工作流程。

ansible是一种预期状态的引擎。他按照您期望系统所处的状态来描述IT部署,从而解决如何自动化IT部署的问题。ansible的目标是把你的系统放在预期状态,只做必要的改变。试图想脚本语言一样对待ansible是不正确的。

 

4、Ansible工作流程

 

 

5、Ansible的安装

redhat系列:

  在线安装:yum install -y ansible

  离线安装:yum install -y ansible --downloaddir=/root/ansible --downloadonly

                    cd /root/ansible

                    rpm -ivh *

ubuntu系列:

  在线安装:sudo apt-get install -y ansible

 

6、Ansible的配置文件

配置文件优先级
$ANSIBLE_CONFIG #配置环境变量export ANSIBLE_CONFIG=/tmp/ansible.cfg
./ansible.cfg #最常用的配置文件
~/ansible.cfg
/etc/ansible/ansible.cfg

ansible --version

ansible 2.4.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
View Code

egrep -v "^#|^$" /etc/ansible/ansible.cfg

[defaults]
roles_path    = /etc/ansible/roles:/usr/share/ansible/roles
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
View Code

列出ansible.cfg中常用的选项

[defaults]
inventory = /etc/ansible/hosts #指定主机列表位置
remote_tmp = ~/.ansible/tmp #远程主机的临时目录
local_tmp = ~/.ansible/tmp #管理主机的临时目录
forks = 5 #并发数为5
sudo_user = root #sudo提权为root 
ask_sudo_pass = True #执行sudo过程中要求密码
remote_port = 22 #远程主机端口为22
host_key_checking = False #ssh连接时,不询问yes/no

[privilege_escalation]
become=True #允许提权
become_method=sudo #提权方式为sudo
become_user=root #提权为用户root
become_ask_pass=False #提权时,不输入密码
View Code

 

7、Inventory定义主机清单,也可以是主机组

inventory分为静态inventory和动态inventory

egrep -v "^$|^#" /etc/ansible/hosts

定义静态inventory:(使用ini格式的文件)

清单:

node1

node2

node3

192.168.101.11

192.168.101.12

192.168.101.13

分组:

[groupname]

grouplist

[web]

web1.example.com

web2.example.com

[db]

db1.example.com

db2.example.com

默认存在的组:

all 代表所有主机

ungroup 代表未分组的主机

同一个主机可以同时在多个组

定义嵌套组:

[groupname:children]

groupname1

groupname2

简化的表达方式:

格式:[start:end]

192.168.101.[11..20] #表示11到20十个主机

 

8、建立主机通讯

秘钥连接:for host in 192.168.101.{11..13}; do ssh-keyscan $host >> ~/.ssh/known_hosts; sshpass -p'redhat' ssh-copy-id root@$host; done
在inventory中可以以明密码的方式:192.168.108.9 ansible_ssh_user=root ansible_ssh_pass=redhat
在inventory中也可以以变量的方式:

[node]
192.168.108.9
[node:vars]
ansible_ssh_user=root
ansible_ssh_pass=redhat

9、测试

ansible -i hosts all -m ping

192.168.108.21 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

10、ansible的返回结果有三种颜色

红:执行失败

绿:当前状态就是预期状态

黄:成功更改当前状态为预期状态

 

11、剧本playbook

playbook实现秘钥认证

connection:local 表示在ansible服务端本地执行任务

---
- name: configure ssh connection
  hosts: all
  gather_facts: false
  connection: local
  tasks:
    - name: configure ssh connection
      shell: >
        ssh-keyscan {{ inventory_hostname }} >>~/.ssh/known_hosts
        sshpass -p'redhat' ssh-copy-id root@{{ inventory_hostname }}
View Code

 playbook实现修改主机名

cat hosts
[oss-1]
135.175.17.11 hostname=NXYC-2F-0704-SEV-SGI620-02U08
135.175.17.12 hostname=NXYC-2F-0704-SEV-SGI620-02U11
135.175.17.13 hostname=NXYC-2F-0704-SEV-SGI620-02U14
135.175.17.14 hostname=NXYC-2F-0704-SEV-SGI620-02U17
135.175.17.15 hostname=NXYC-2F-0704-SEV-SGI620-02U20
135.175.17.16 hostname=NXYC-2F-0704-SEV-SGI620-02U23
[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=ctyun@123

cat set_hostname.yml
---
- hosts: oss-1
  tasks: 
    - name: change name
      raw: "echo {{ hostname | quote }} > /etc/hostname"
    - name: 
      shell: hostname {{ hostname | quote }}
View Code

 

几个常见的模块

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------恢复内容结束------------

posted @ 2020-04-25 13:27  汝南  阅读(165)  评论(0)    收藏  举报