Ansible入门

简介

Ansible 是一个 IT 自动化工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。
Ansible 用 python 编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如 Salt,Puppet,Chef等),但它们各有优劣。
Ansible的特点在于它的简洁。让 Ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的一个优点在于,如果需要的话,你可以在不止一个地方控制你的整个基础架构。

特性

  1. Agentless:不需要在被管理节点上安装客户端,只要有sshd即可
  2. Serverless:在服务端不需要启动任何服务,只需要执行命令就行
  3. Modules in any language:基于模块工作,可以使用任意语言开发ansible模块
  4. YAML, not code:使用yaml语言定制playbook
  5. SSH by default:默认使用ssh控制各节点

基本组件

  • 核心:ansible
  • 核心模块(Core Modules):这些都是ansible自带的模块
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
  • 插件(Plugins):完成模块功能的补充
  • 剧本(Playbooks):把需要完成的多个任务定义在剧本中
  • 主机组(Host Inventory):ansible在管理多台主机时,可以选择只对其中的一部分执行某些操作

前提条件

1、设置好各个节点的IP及主机名,并写入/etc/hosts中(每个节点完成)

2、创建用户,用于管理ansible(每个节点完成)

# 创建用户
$ useradd admin

# 设置密码
$ passwd admin

3、权限委派

# 设置admin的权限,让他能够得到root权限
# 修改/etc/sudoers
$ vi /etc/sudoers
# 在root ALL=(ALL) ALL下面添加
admin ALL=(ALL) NOPASSWD: ALL
# 冒号后面有空格,NOPASSWD表示执行命令时不需要密码,当然将他改为指定命令也是可以的

4、在主控端上生成ssh密钥,用于免密连接

# 首先切换到admin
$ su - admin  # 一定要加“-”,代表切换环境变量,否则后面可能报错
$ ssh-keygen

# 将密钥拷贝到其他节点
$ ssh-copy-id 192.168.1.1

5、根据需要关闭防火墙或打开某些端口(所有节点)

$ systemctl disable firewalld
$ systemctl stop firewalld
$ sed -i 's/SELINUX=enabled/SELINUX=disable/g' /etc/sysconfig/selinux
$ seteforce 0

6、创建本地yum源(主控端完成)

$ yum install -y httpd
$ mkdir /var/www/html/pub
$ mkdir /var/www/html/ansible
# 创建/isos目录,用于存放iso文件
$ mkdir /isos
# 通过winSCP或xftp将iso文件传到主控端/isos中
- 将iso挂载到/var/www/html/pub和/var/www/html/ansible中,并写入/etc/fstab
$ vim /etc/fstab
/iso/rhel-8.0-x86_64-dvd.sio /var/www/html/pub iso9669 defaults 0 0
/iso/rhel-8.0-x86_64-additional-20190521.iso /var/www/html/ansible iso9660 defaults 0 0

# 挂载
$ mount -a
# 使用df检查是否成功挂载
$ df -Th

7、修改yum仓库

 $ vi /etc/yum.repos.d/dvd.repo

 [BaseOS]
 name=BaseOS
 baseurl=http://192.168.7.1/pub/BaseOS
 enables=1
 gpgcheck=0
 [AppStream]
 name=AppStream
 baseurl=http://192.168.7.1/pub/AppStream
 enables=1
 gpgcheck=0
 [ansible]
 name=ansible
 baseurl=http://192.168.7.1/ansible/ansible-2.8-for-rhel-8-x86_64-rpms
 enables=1
 gpgcheck=0

 $ yum clean all
 $ yum makecache

8、将/etc/yum.repos.d/dvd.repo 复制到其他各个节点

$ scp /etc/yum.repos.d/dvd.repo root@192.168.1.2:/etc/yum.repos.d/dvd.repo

安装与配置

安装并查看版本

$ yum install -y ansible
$ ansible –version

配置ansible

$ su - admin
$ sudo vi /etc/ansible/ansible.cfg

更改以下内容

[defaults]
inventory = /home/admin/ansible/inventory(可自定义)
remote_user = admin
host_key_checking = False
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
$ mkdir /home/admin/ansible
$ touch /home/admin/ansible/inventory

这个文件存放的是你所有的节点,可以分组

$ vim /home/admin/ansible/inventory

[test]
192.168.7.10
[dev]
192.168.7.1
192.168.7.2
[prod]
192.168.7.1
192.168.7.3
[it:children](这个表示prod和webservers是it的子组,it包含这两个组的所有)
prod
dev

测试是否能够正常正常读取节点

$ ansible all –list-hosts

下面执行的是所有节点执行ping,如果返回bong则表示成功,all是缺省值,表示所有节点,-m 后面跟模块名, -a 后面跟参数,用单引号括起来

$ ansible all -m ping

下面的是所有主机创建用户

$ ansible all -m command -a ‘useradd user10’ 

用法

查看所有模块

$ ansible-doc -l

根据需要查找模块

$ ansible-doc -l | grep yum

查看模块文档

$ ansible-doc yum

上面以命令的方式执行叫ad-hoc,下面介绍以文件的方式执行:playbook
一定要注意格式

vim createuser.yml

- name: Create users and group  # playbook名称
  hosts: test  # 执行的目标主机组
  tasks:
    - name: create alice user  # 任务名称
      user:  # 使用模块
        name: alice  # 目标用户名称
        state: present  # 状态,present表示创建
    - name: create it group
      group:
        name: it
        state: present

写好文件后先检测语法,但这条命令只能检测你的格式

$ ansible-playbook –syntax-check creatuser.yml

测试,前提是后面的操作和前面的操作没有联系,否则可能会报错

$ ansible-playbook -C creatuser.yml

需求,给test主机组内所有主机安装httpd以及php,并启动,要求下次开机会自动启动

- name: install httpd and setting
  hosts: test
  tasks:
    - name: install httpd
      yum:
        name:
          - httpd
          - php
        status: present
    - name: enable httpd
      service:
        name: httpd
        state: started
        enabled: yes

需求:

  1. 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上
  2. 将 Development Tools 软件包组安装到 dev 主机组中的主机上
  3. 将test主机组中主机上的所有软件包更新为最新版本
- name: install packages
  hosts: dev,test,prod
  tasks:
    - name: install httpd and php
      yum:
        name: "{{ item }}"
        state: present
      loop:
        - httpd
        - php
- name: install package group
  hosts: dev
  tasks:
    - name: install Development Tools
      yum:
        name: '@Development Tools'
        state: present
- name: upgrade package
  hosts: test
  taska:
    - name: upgrade all package
      yum:
        name: '*'
        state: latest

通过本文的介绍,相信读者已经对Ansible有了更深入的了解。Ansible以其简洁、高效、灵活的特点,成为了自动化运维领域的佼佼者。希望本文能对读者在学习和使用Ansible的过程中提供帮助,让读者能够更好地利用Ansible提高工作效率,降低运维成本。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Ops工具云原生

docker-compose安装Harbor

2025-4-1 11:41:47

AnsibleOps工具

Ansible常用模块指令

2025-4-1 11:55:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
Index