ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ansible简述

2020-02-02 17:53:45  阅读:300  来源: 互联网

标签:web name inventory 简述 ansible ssh playbook


概述

ansible基于python开发,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible通过hosts文件和免秘钥(配置文件用户名密码端口号)来实现批量管理主机。

ansible基于ssh与远程主机通信,可用ssh测试验证ansible功能。

 

ansible是基于模块开发的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

安装

ubuntu

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible

yum

yum install epel-release -y
yum install ansible -y

ansible的配置文件:

/etc/ansible/ansible.cfg

/etc/ansible/hosts

ansible配置

1. 免秘钥

交换SSH Keys允许主机ansible无密码操作客户机(本地主机也可以无秘钥ssh)。

Exchanging SSH keys will allow for password-less SSH from host running Ansible to hosts being set up.

# ssh-keygen
# ssh-copy-id root@host

主机上运行ssh-keygen生成ssh key(/root/.ssh/id_rsa),可保持空秘钥,然后通过ssh-copy-id复制key到客户机。之后可以直接通过ssh无秘钥登录客户机。

模块

ansible-doc -l   ;查看ansible模块

ansible-doc -s module_name     ;查看具体模块的用法

-m module_name  ;要使用的模块

ansible支持的模块很多,具体可参考:

https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

常用模块示例如下,组名以web示例:

ansible web -m ping

ansible web -m command -a 'ss -ntl' ;直接在远程主机上执行命令,结果返回本主机

ansible web -m shell -a 'cat /etc/passwd |grep "keer"' ;在远程主机上调用shell解释器运行命令

ansible web -m copy -a 'src=~/hello dest=/data/hello' ;复制文件到远程主机,同时支持给定内容生成文件和修改权限等。

ansible web -m file -a 'path=/data/app state=directory' ;设置文件的属性,比如创建文件、创建链接文件、删除文件等。

ansible web -m fetch -a 'src=/data/hello dest=/data' ;从远程某主机获取(复制)文件到本地。

ansible web -m cron -a 'name="ntp update every 5 min" minute=*/5 job="/sbin/ntpdate 172.17.0.1 &> /dev/null"'  ;管理cron计划任务的。

ansible web -m yum -a 'name=htop state=present' ;主要用于软件的安装。

ansible web -m service -a 'name=nginx state=started enabled=true';用于服务程序的管理。

ansible web -m user -a 'name=keer uid=11111' ;主要是用来管理用户账号。

ansible web -m group -a 'name=sanguo gid=12222' ;主要用于添加或删除组。

ansible web -m script -a '/tmp/df.sh' ;将本机的脚本在被管理端的机器上运行。

ansible web -m setup -a 'filter="*mem*"' #查看内存,该模块主要用于收集信息,是通过调用facts组件来实现的。

命令

协程:线程的处理单元;

线程:最小的调度单位;

进程:最小的管理单元。

ansible-doc -l   ;查看ansible模块

ansible-doc -s module_name     ;查看具体模块的用法

-f forks  ;指定启动并发线程数以减少服务器压力,ansible -f 5 表示启动5个线程

-m module_name  ;要使用的模块

-a args1    ;特有的参数,即调用的模块里面的参数,使用-a调用

ansible all -m ping   ;查看client端是否正常ping通。

ansible  组名 -m model_name -a 执行命令

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

playbook

一个任务为play,多个任务为playbooks(剧本)。

playbook采用yaml格式,注意:每个冒号“:”后面必须有空格。

playbook包含5种模块:

task:主程序

variables:变量,以变量形式传参

templates:模板

handlers:触发器

roles:角色

ansible-playbook常用命令

ansible-playbook --syntax-check /root/ansible/httpd.yaml  ;剧本语法检测

ansible-playbook -C /root/ansible/httpd.yaml    ;模拟执行剧本

ansible-playbook /root/ansible/httpd.yaml    ;执行剧本

openNESS的onprem_controller.yml示例:

---

# Deploy EdgeController on given host(s)
- hosts: controller_group
  serial: 1
  pre_tasks:
  - debug:
      msg: "Setting up {{ inventory_hostname | upper }} at {{ ansible_host }}"
  - fail:
      msg: "Only one controller is supported"
    when:
    - groups['controller_group'] is defined
    - (groups['controller_group']|length>1)
  - include_tasks: ./tasks/precheck_hostname.yml

  roles:
    - role: offline/restore/transfer
      when: offline_mode
    - role: offline/restore/yum/setup
      when: offline_mode
    - role: os_setup
    - role: docker
    - role: git_repo
    - role: golang
    - role: openness/onprem/master
    - role: cnca/onprem
    #- role: ngc_test/onprem/master
    - role: offline/restore/yum/clean
      when: offline_mode

使用 include 语句引用 task 文件的方法,可允许你将一个配置策略分解到更小的文件中。

roles

role定义一个独立服务的集合,可单独完成某一部分任务,方便playbook复用。

Roles 的概念来自于这样的想法:通过 include 包含文件并将它们组合在一起,组织成一个简洁、可重用的抽象对象。这种方式可使你将注意力更多地放在大局上,只有在需要时才去深入了解细节。

roles的目录文件包含:

files:定义src源文件

handlers:定义触发器

tasks:定义任务,必须包含文件main.yaml或main.yml,定义任务。

templates:定义模板文件

vars:定义变量

inventory清单配置文件

ansible可同时操作属于一个组的多台主机,组合主机间的关系通过inventory文件配置。默认的文件路径为/etc/ansible/hosts。

[all]
node01 ansible_ssh_user=root ansible_host=192.168.1.11
#node02 ansible_ssh_user=root ansible_host=192.168.1.12
controller01 ansible_ssh_user=root ansible_host=192.168.1.100

[edgenode_group]
node01

[controller_group]
controller01

方括号[]中是组名,用于对系统进行分类,便于对不同系统进行个别的管理。

ansible_ssh_host
      将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.

ansible_ssh_port
      ssh端口号.如果不是默认的端口号,通过此变量设置.

ansible_ssh_user
      默认的 ssh 用户名

ansible_ssh_pass
      ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)

ansible_sudo_pass
      sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)

ansible_sudo_exe (new in version 1.8)
      sudo 命令路径(适用于1.8及以上版本)

ansible_connection
      与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.

ansible_ssh_private_key_file
      ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.

ansible_shell_type
      目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.

ansible_python_interpreter
      目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python
      不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).

      与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....

 

示例

openNESS采用ansible管理安装:

https://github.com/open-ness/openness-experience-kits.git

使用参考:

https://github.com/open-ness/specs/blob/master/doc/getting-started/on-premises/controller-edge-node-setup.md

https://github.com/open-ness/specs/blob/master/doc/getting-started/on-premises/offline-deployment.md

可直接通过ansible-playbook执行剧本:

ansible-playbook -vv ./onprem_cleanup.yml --inventory inventory.ini

ansible-playbook -vv ./onprem_controller.yml --inventory inventory.ini

ansible-playbook -vv ./onprem_node.yml --inventory inventory.ini

ansible-playbook -vv ./offline_prepare.yml --inventory offline_preparation_inventory.ini

 

参考:

1. https://docs.ansible.com/  ansible官网

2. Ansible  入门博客

3. 自动化运维工具——【ansible详解 一】

4. Ansible中文权威指南

标签:web,name,inventory,简述,ansible,ssh,playbook
来源: https://www.cnblogs.com/embedded-linux/p/12252964.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有