12

Ansible 快速入门

 4 years ago
source link: https://pylixm.top/posts/2021-02-09-ansible-start.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

DeanWu

Beijing, China
欢迎关注微信公众号「码农吴先生」:专注python/golang/devops等技术的学习经验及资源分享!回复关键字:go或python 获取我收集的资料,也可回复关键字:小二,加我wx,一块聊技术,聊人生~

Ansible 是自动化运维领域一款常用的服务器集群管理工具,他有丰富的文档和活跃的社区。

与同类型的竞品开源工具SaltStack/Puppet 相比,各有特色。可参考:

本文旨在让读者快速掌握或回顾 Ansible 的一些概念和用法,所以并不会涉及细节的东西。如想进一步掌握,可阅读 Ansible 的官方文档

Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务。

Ansible的特点

  • 1、ansible不需要单独安装客户端,也不需要启动任何服务
  • 2、ansible是python中的一套完整的自动化执行任务模块
  • 3、ansible playbook 采用yaml配置,对于自动化任务执行过程一目了然
  • 3、ansible 执行任务时幂等的。

Ansible组成结构

控制机

安装ansible 的机器,截止目前2.9,只支持Linux 和 Mac 作为控制机,不支持 Windows。配置文件默认路径/etc/ansible/ansible.cfg

被控机

在 ansible hosts 清单里的机器,控制机可ssh 登录。ssh 登录时,可使用用户名密码或私钥公钥登录。

清单(Inventory)

Ansible管理主机的清单,可ip、hostname,可分组控制。默认是 /etc/ansible/hosts文件,可使用 -i <path> 参数在命令行中指定。

集合(Collections)

一种ansible 的分发格式,包含剧本、角色、模块和插件。

模块(Modules)

Ansible执行命令的功能模块,执行代码的基本单元。Ansible2.3版本为止,共有1039个模块。还可以自定义模块。

任务(Tasks)

ansible 执行的任务单元。

剧本(Playbooks)

任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,可重复执行,yaml格式。

ansible

ansible的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令执行。

Plugins

插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的较少。

API

提供给第三方程序调用的应用程序编程接口。

Ansible 基本概念

清单文件中的变量:

[all:vars]
foo1=bar
foo2=bar2

[group1]
host1
host2

[group1:vars]
foo3=bar3
PlayBook

Playbook 中的变量:

---
- hosts: all
  vars:
    http_port: 80
  vars_prompt:
    - name: service_name
      prompt: "Which service do you want to remove?"
      private: no
  vars_files:
    - /vars/external_vars.yml

角色专用变量,一般位于 defaults/mian.yml 或者 vars/ 目录下。官方文档,角色(Roles)

ansible 内部自定的变量,可以通过下面命令查看:

$ ansible hostname -m setup
{
    "ansible_all_ipv4_addresses": [
        "REDACTED IP ADDRESS"
    ],
    "ansible_all_ipv6_addresses": [
        "REDACTED IPV6 ADDRESS"
    ],
    "ansible_apparmor": {
        "status": "disabled"
    },
    "ansible_architecture": "x86_64",
    "ansible_bios_date": "11/28/2013"
        ......
}

变量作用域

ansible 的变量作用域主要有 3 种:

  • Global:ansible 配置文件,环境变量,命令行
  • Play:playbook vars, vars_prompt, vars_files; role defaults, vars
  • Host: Inventory 中定义的的 host vars; facts

ansible 允许你在各处通过 jinja2 的语法使用变量。jinja2 是一个用 Python 开发的模版引擎,本身并不复杂,核心东西就 3 个:变量的输出,控制流,过滤器。

需要注意的是,在 Ansible 中如果你要使用 jinja2 的语法去引用一个变量,必须用双引号内使用。

- hosts: all
  vars:
    deploy_path: "{{ home_dir }}/apps"

比如我们想根据各种上下文生成 nginx 的配置文件,可以通过 template 命令来渲染。首先定一个模版文件 nginx.conf.j2

server {
  server_name {{ server_name }};
  listen 80;
  
  location / {
    try_files $uri $uri/ /index.html;
  }
}

我们希望这个配置文件可以覆盖默认的 nginx 配置:

- hosts: nginx
  vars:
    server_name: gio.com
    nginx_user: nginx
    nginx_group: "{{ nginx_user }}"
  tasks:
    - name: generate nginx config file
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: "{{ nginx_user }}"
        group: "{{ nginx_group }}"
      become: yes

命令行方式

ansible [pattern] -m [module] -a "[module options]"
  • pattern 匹配主机的模式
  • -m 指定调用的模块
  • -a 模块需要的参数
  • 其他参数文档,官方文档

playbook 方式(yaml配置文件)

ansible-playbook <playbook name>.yml 
# test.yaml
- hosts: all
  tasks:
    - name: install vim
      yum:
        name: vim
        state: present

    - name: install jdk
      yum:
        name: openjdk
        state: present

运行如下命令执行:

ansible-playbook test.yaml 

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK