searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于Ansible的自动化部署与实践

2023-06-28 03:52:25
23
0

Ansible特性

下面介绍下Ansible的主要特性:

1.模块化:调用特定的模块,完成特定任务

2.支持自定义模块

3.基于Python语言实现

4.部署简单,基于python和SSH(默认已安装),agentless

5.安全,基于OpenSSH

6.支持playbook编排任务

7.幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

8.可使用任何编程语言写模块

9.YAML格式,编排任务,支持丰富的数据结构

10.较强大的多层解决方案

Ansible架构

先来看看这张架构图,然后对各个组成部分做一个简单的说明。

1.核心引擎:即图中所看到的Ansible。

2.核心模块(Core Module):和大多数运维工具一样,将系统和应用提供的能力模块化,一个模块有点像编程中一个功能接口,要使用的时候调用接口并传参就可以了。比如Ansible的service模块,你要保证名为nginx的service处于启动状态,只需要调用service模块,并配置参数name: nginx,state: started即可。

3.自定义模块(Custom Modules):显而易见,如果Ansible的核心模块满足不了你的需求,你可以添加自定义化的模块。

4.插件(Plugins):模块功能的补充,如循环插件、变量插件、过滤插件等,也和模块一样支持自定义,这个功能不常用。

5.剧本(playbooks):说到这个,先说说Ansible完成任务的两种方式,一种是Ad-Hoc,就是ansible命令,另一种就是Ansible-playbook,也就是ansible-playbook命令。他们的区别就像是Command命令行和Shell Scripts,比如,要在远程主机上安装nginx或许一条命令ansible apps -m yum -a “name=nginx state=present”,但是要进行一个完整的nginx安装配置启动的固化流程性质的操作,最好写成一个playbooks(可以看作是任务的合集)。

6.连接插件(connectior plugins):Ansible默认是基于SSH连接到目标机器上执行操作的。但是同样的Ansible支持不同的连接方法,要是这样的话就需要连接插件来帮助我们完成连接了。

7.主机清单(host inventory):为Ansible定义了管理主机的策略。一般小型环境下我们只需要在host文件中写入主机的IP地址即可,但是到了中大型环境我们有可能需要使用静态inventory或者动态主机清单来生成我们所需要执行的目标主机。

结合图中的Cloud元素提一提Ansible的host inventory和SSH,Ansible默认是基于SSH连接到目标机器上执行操作,这样就需要目标主机上有一个用户用来执行Task中定义的操作,在cloud环境中可以在镜像内置用户和公钥,然后通过调用云主机供应商提供的脚本动态生成host inventory。这样对主机的管理提供了很大的方便。

yum源安装:sudo yum install ansible

基本参数

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

 

常见使用命令

# 执行远程命令

# ansible test -m command -a 'uptime'

 

# 执行主控端脚本

# ansible test -m script -a '/etc/ansible/script/test.sh'

 

# 执行远程主机的脚本

# ansible test -m shell -a 'ps aux|grep zabbix'

 

# 类似shell

# ansible test -m raw -a "ps aux|grep zabbix|awk '{print \$2}'"

 

# 创建软链接

# ansible test -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

 

# 删除软链接

# ansible test -m file -a "path=/tmp/resolv.conf state=absent"

 

# 复制文件到远程服务器

# ansible test -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"

 

0条评论
作者已关闭评论
皇****刚
7文章数
1粉丝数
皇****刚
7 文章 | 1 粉丝
原创

基于Ansible的自动化部署与实践

2023-06-28 03:52:25
23
0

Ansible特性

下面介绍下Ansible的主要特性:

1.模块化:调用特定的模块,完成特定任务

2.支持自定义模块

3.基于Python语言实现

4.部署简单,基于python和SSH(默认已安装),agentless

5.安全,基于OpenSSH

6.支持playbook编排任务

7.幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

8.可使用任何编程语言写模块

9.YAML格式,编排任务,支持丰富的数据结构

10.较强大的多层解决方案

Ansible架构

先来看看这张架构图,然后对各个组成部分做一个简单的说明。

1.核心引擎:即图中所看到的Ansible。

2.核心模块(Core Module):和大多数运维工具一样,将系统和应用提供的能力模块化,一个模块有点像编程中一个功能接口,要使用的时候调用接口并传参就可以了。比如Ansible的service模块,你要保证名为nginx的service处于启动状态,只需要调用service模块,并配置参数name: nginx,state: started即可。

3.自定义模块(Custom Modules):显而易见,如果Ansible的核心模块满足不了你的需求,你可以添加自定义化的模块。

4.插件(Plugins):模块功能的补充,如循环插件、变量插件、过滤插件等,也和模块一样支持自定义,这个功能不常用。

5.剧本(playbooks):说到这个,先说说Ansible完成任务的两种方式,一种是Ad-Hoc,就是ansible命令,另一种就是Ansible-playbook,也就是ansible-playbook命令。他们的区别就像是Command命令行和Shell Scripts,比如,要在远程主机上安装nginx或许一条命令ansible apps -m yum -a “name=nginx state=present”,但是要进行一个完整的nginx安装配置启动的固化流程性质的操作,最好写成一个playbooks(可以看作是任务的合集)。

6.连接插件(connectior plugins):Ansible默认是基于SSH连接到目标机器上执行操作的。但是同样的Ansible支持不同的连接方法,要是这样的话就需要连接插件来帮助我们完成连接了。

7.主机清单(host inventory):为Ansible定义了管理主机的策略。一般小型环境下我们只需要在host文件中写入主机的IP地址即可,但是到了中大型环境我们有可能需要使用静态inventory或者动态主机清单来生成我们所需要执行的目标主机。

结合图中的Cloud元素提一提Ansible的host inventory和SSH,Ansible默认是基于SSH连接到目标机器上执行操作,这样就需要目标主机上有一个用户用来执行Task中定义的操作,在cloud环境中可以在镜像内置用户和公钥,然后通过调用云主机供应商提供的脚本动态生成host inventory。这样对主机的管理提供了很大的方便。

yum源安装:sudo yum install ansible

基本参数

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

 

常见使用命令

# 执行远程命令

# ansible test -m command -a 'uptime'

 

# 执行主控端脚本

# ansible test -m script -a '/etc/ansible/script/test.sh'

 

# 执行远程主机的脚本

# ansible test -m shell -a 'ps aux|grep zabbix'

 

# 类似shell

# ansible test -m raw -a "ps aux|grep zabbix|awk '{print \$2}'"

 

# 创建软链接

# ansible test -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

 

# 删除软链接

# ansible test -m file -a "path=/tmp/resolv.conf state=absent"

 

# 复制文件到远程服务器

# ansible test -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"

 

文章来自个人专栏
CStor SFS Developer
7 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0