自动化运维工具介绍
以下是一些常见的Linux开源自动化运维工具的简要介绍:
1、Ansible:使用SSH协议,不需要在被控端安装agent,支持批量部署、配置管理、任务调度等功能。使用YAML语言编写剧本,易于学习和使用。
2、Puppet:使用自己的DSL语言,需要在被控端安装agent,支持配置管理、自动化部署等功能。相对于Ansible,Puppet的学习曲线较为陡峭,但是可以实现更加精细的配置管理。
3、SaltStack:基于Python语言,支持批量部署、配置管理、任务调度等功能。使用基于模块的插件机制,支持对不同操作系统的支持。相对于Ansible和Puppet,SaltStack具有更强的扩展性和灵活性。
4、Chef:使用Ruby语言,需要在被控端安装agent,支持自动化部署、配置管理等功能。与Puppet类似,学习曲线较为陡峭,但可以实现更加精细的配置管理。
5、Jenkins:开源的持续集成和持续交付工具,支持自动化构建、测试、部署等功能。可以通过插件扩展功能,具有广泛的应用场景和社区支持。
6、GitLab CI:GitLab提供的持续集成和持续交付工具,可以在GitLab上直接进行配置和管理。支持自动化构建、测试、部署等功能,适合与GitLab配合使用。
ansible特性
- Ansible无需在被管控主机上安装agent,操作简单方便。
- 模块化:Ansible提供了超过600个模块,可以实现各种系统管理任务,例如软件包管理、用户管理、文件管理、服务管理等。
- 多平台支持:Ansible可以管理Windows、Linux、Unix、BSD等各种操作系统,同时也支持云环境、容器和网络设备等。
- 高效性能:Ansible使用SSH协议远程执行命令,同时采用基于Python的Agentless架构,具有高效稳定的性能。
- 可扩展性:Ansible的模块库和插件系统都是开放的,可以通过编写插件或自定义模块实现功能扩展和定制化。
- 安全性:Ansible提供了多层级的安全认证机制,可以通过密码、密钥、证书等多种方式保障数据安全。
- 剧本复用:Ansible支持将一些公共任务封装成复用性高的角色或模块,使得代码得到复用,加快了开发速度,同时提高了维护效率。
- 可视化操作:Ansible提供了Tower应用,可以通过Web界面对Ansible进行集中管理和监控,提高了工作效率和易用性。
ansible架构
Ansible 是一种基于 agentless 的自动化运维工具,其架构包括以下组件:
- 控制节点(Control Node):安装了 Ansible 命令行工具和各种插件模块的主机,用于管理和配置被控节点。
- 被控节点(Managed Nodes):需要管理和配置的主机,Ansible 不需要在这些主机上安装任何客户端软件。
- Inventory(清单):用于管理和组织被控节点的清单,可以是静态清单或动态清单。
- Modules(模块):在被控节点上执行的命令或脚本,Ansible 提供了丰富的模块来支持各种操作,也可以通过自定义模块扩展功能。
- Playbooks(剧本):一种基于 YAML 语言的脚本文件,定义了一组任务,以及这些任务在被控节点上的执行顺序,可以实现自动化部署、配置、管理等任务。
- Ad-hoc Commands(即席命令):一次性的命令行操作,可以在多个被控节点上执行任务,也可以结合 Inventory 文件来实现更复杂的操作。
- API:提供了 Ansible 的 RESTful API 接口,方便其他系统集成和调用 Ansible 功能。
ansible安装
EPEL源的rpm包安装:
yum install ansible
编译安装
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
Git方式
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
pip 安装
yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
pip install --upgrade pip
pip install ansible --upgrade
ansible相关配置文件
Ansible的相关配置文件通常存放在/etc/ansible目录下,主要包括以下文件和目录:
- ansible.cfg:Ansible的配置文件,用于指定默认的配置选项、库路径、超时时间等。
- hosts:Ansible的主机清单文件,用于指定管理的主机、主机组以及连接方式等。
- group_vars:存放主机组的变量文件目录。
- host_vars:存放主机的变量文件目录。
- roles:存放Ansible角色的目录,用于组织任务和变量。
- library:存放自定义模块的目录。
- module_utils:存放自定义模块工具类的目录。
- filter_plugins:存放自定义过滤器插件的目录。
其中,ansible.cfg、hosts和group_vars是必需的文件和目录,其他的根据需要自行添加。需要注意的是,这些文件和目录的名称和路径都可以根据实际情况进行修改和自定义。
ansible主要配置文件/etc/ansible/ansible.cfg
[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
#forks = 5 # 默认并发数
#sudo_user = root # 默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
#host_key_checking = False # 检查对应服务器的host_key,建议取消注释
#log_path=/var/log/ansible.log #日志文件,建议启用
#module_name = command #默认模块,可以修改为shell模块
注:如要使用ansible管理windows机器,配置文件需要进行修改
[defaults]
inventory = /etc/ansible/hosts
remote_user = ansible
host_key_checking = False
transport = ssh
timeout = 30
interpreter_python = /usr/bin/python3
[privilege_escalation]
become = True
become_method = sudo
become_user = root
[ssh_connection]
ssh_args = -o StrictHostKeyChecking=no
pipelining = True
[winrm_connection]
transport = ntlm
inventory: 指定主机清单文件的路径,以列出要管理的所有服务器。
remote_user: 指定远程服务器的用户名,以便可以连接到目标服务器并运行 Ansible 模块。
transport: 指定连接到主机时要使用的传输机制,可以是 SSH 或者 WinRM。
ansible_connection: 指定连接主机时要使用的连接器类型,可以是 local、ssh 或 winrm。
ansible_shell_type: 指定远程服务器上的 shell 类型,可以是 sh、csh、fish 等。
ansible_python_interpreter: 指定在远程服务器上运行 Ansible 模块时使用的 Python 解释器的路径。
ansible_winrm_server_cert_validation: 指定是否验证 WinRM 服务器证书。
在上述配置文件中,如果要连接到 Windows 服务器,则需要在 ansible.cfg 文件中配置 ansible_connection 选项为 winrm。同时需要设置 ansible_winrm_server_cert_validation 选项为 ignore 或 basic,具体取决于您的实际需求和安全策略。如果您的 Windows 服务器上已安装 WinRM 服务并正确配置,那么默认情况下使用的端口是 5985(HTTP)或 5986(HTTPS)。如果要更改端口,请在主机清单文件中指定 ansible_port 选项。例如:
[windows]
192.168.1.100 ansible_connection=winrm ansible_user=administrator ansible_password=123456
在这个例子中,我们将 ansible_connection 选项设置为 winrm,表示使用 WinRM 连接到目标 Windows 服务器。同时指定了 ansible_user 和 ansible_password 选项,用于指定连接所需的用户名和密码。如果您要使用 HTTPS 连接,可以在主机清单文件中指定 ansible_winrm_transport 选项为 ssl,并将 ansible_port 选项设置为 5986。例如:
[windows]
192.168.1.100 ansible_connection=winrm ansible_user=administrator ansible_password=123456 ansible_winrm_transport=ssl ansible_port=5986
这样就可以使用 HTTPS 连接到目标 Windows 服务器,并将端口设置为 5986。
inventory 主机清单
Inventory 主机清单是 Ansible 的一个核心概念,它定义了 Ansible 用来管理的目标主机和主机组。Inventory 可以是一个 INI 文件、JSON 文件、YAML 文件、多个文件组成的目录,或者一个可以返回 JSON 格式数据的脚本。
在 Inventory 文件中,可以定义主机的基本信息,如主机名、IP 地址、连接端口、用户名、密码等,还可以将主机划分为不同的组,方便对不同的主机进行不同的管理。
inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成
[webservers]
10.0.0.[1:100] #如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机
web2.example.com
[db]
db1.example.com:2222 #当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明
db2.example.com
[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa
其中,[webservers] 和 [db] 分别定义了两个主机组,web1.example.com、web2.example.com、db1.example.com 和 db2.example.com 分别属于不同的组。
[all:vars] 定义了全局变量,这里定义了 ansible_user 和 ansible_ssh_private_key_file 两个变量,表示连接主机使用的用户名和私钥文件路径。