首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于Ansible实现平台自动部署初探

Hi,大家好。今天跟大家聊一聊Ansible。

什么是Ansible?

Ansible是一个批量部署远程主机的工具。远程的主机可以是远程虚拟机,远程物理机,也可以是本地虚拟机, 本地主机。

Ansible能做什么?

Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要可以通过SSH登录到的主机上能做的操作,Ansible都可以做到。

类似的软件有哪些?

1.Saltstack

基于python开发,采用c/s架构(服务端和客户端),配置语法用的是YMAL。

2. Ansible

基于python开发,分布式,无需客户端,超轻量级,配置语法也用的是YMAL,使用SSH来管理客户端

Ansible的工作原理

Ansible 在管理节点将 Ansible 模块通过 SSH 协议推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排。

我们要用Ansible做什么?

应对交易系统分布式多模块多终端的部署问题,我们现在来尝试使用Ansible加快部署以及快速配置。

安装Ansible

这里以RedHat/CentOS系Linux为例,其他系统请参考ansible的官网。

管理员的电脑上:

安裝Ansible软件

$> # Redhat/CentOS Linux上,Ansible目前放在的epel源中

$> # epel源中包含ansible,直接安装包既可

$> sudo yum install epel-release

$> sudo yum install ansible -y

配置Ansible管理节点和主机的连接

其实就是配置从管理节点到远程主机之间基于key(无密码的方式)的SSH连接:

$> # 生成ssh key

$> ssh-keygen

$> # 拷贝ssh key到远程主机,ssh的时候就不需要输入密码了

$>ssh-copy-id remoteuser@remoteserver

$> # ssh的时候不会提示是否保存key

$>ssh-keyscan remote_servers >> ~/.ssh/known_hosts

验证SSH配置: 在管理节点执行下面的ssh命令,既不需要输入密码,也不会提醒你存储key,那就成功啦。

$> ssh remoteuser@remoteserver

被管理的远程主机:

不需要安装特殊的包,只需要python>2.4,RedHat/CentOS Linux一般安装方式都是默认安装的。

配置Ansible

打开Ansible配置文件/etc/ansible/hosts

$> vim /etc/ansible/hosts

添加被控制组

[webhosts]

192.168.1.10 ansible_ssh_user=root ansible_ssh_pass=passwd

[tg_group]

192.168.2.10 ansible_ssh_user=root

192.168.2.11 ansible_ssh_user=root

[te_group]

192.168.3.11 ansible_ssh_user=root

解释

#ansible_ssh_user=root 是ssh登陆用户

#ansible_ssh_pass=passwd 是ssh登陆密码,如果设置免密钥登陆则可不填

测试各个模块

注意每个模块的用法可以使用 ansible-doc MOD 来查看例如ansible-doc copy

现在ping 你的所有节点

$> ansible all -m ping

192.168.1.10 SUCCESS => {

"changed": false,

"ping": "pong"

}

192.168.2.10 SUCCESS => {

"changed": false,

"ping": "pong"

}

192.168.2.11 SUCCESS => {

"changed": false,

"ping": "pong"

}

192.168.2.10 SUCCESS => {

"changed": false,

"ping": "pong"

}

哈,至此你已经可以与所有的节点通信啦。

下面我们试一试发布文件到某个结点

$> ansible te_group -m copy -a "src=/run.sh dest=/"

将服务端的run.sh拷贝至被控端的根目录下

192.168.3.11 success >> {

"changed": true,

"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",

"dest": "/run.sh",

"gid": 0,

"group": "root","md5sum":"d41d8cd98f00b204e9800998ecf8427e",

"mode": "0644",

"owner": "root",

"secontext": "system_u:object_r:etc_runtime_t:s0",

"size": 0,

"src": "/root/.ansible/tmp/ansible-tmp1426517500.45-83590373054645/source",

"state": "file",

"uid": 0

}

现在我们要执行他

$> ansible te_group -m copy -a "src=/run.sh dest=/"

192.168.3.11 success >> {

"changed": true,

"rc": 0,

"stderr": "",

"stdout": ""

}

怎么执行命令呢

$> ansible tg_group -m command -a "date"

192.168.2.10 success rc=0 >>

2017年 12月 16日 星期六 15:26:32 DST

192.168.2.11 success rc=0 >>

2017年 12月 16日 星期六 15:26:32 DST

至此我们已经可以简单应用Ansible了。下面我们来使用playbook。

什么是playbook

playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,计算机按照剧本表演安装,部署应用,提供对外服务,以及组织计算机处理等各种各样的事情。Ansible可以做的事情都可以用playbook写剧本。

playbook格式

playbook由YMAL语言编写。

YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。

YMAL语法请参考ansible的官网

一个playbook的实例

- hosts: webhosts

sudo: yes

tasks:

- name: 安装Apache

yum: name={{ item }} state=present

with_items:

- httpd

- httpd-devel

- name: 复制配置文件

copy:

src: "{{ item.src }}"

dest: "{{ item.dest }}"

owner: root

group: root

mode: 0644

with_items:

- {

src: "/tmp/httpd.conf",

dest: "/etc/httpd/conf/httpd.conf"

}

- {

src: "/tmp/httpd-vhosts.conf",

dest: "/etc/httpd/conf/httpd-vhosts.conf"

}

- name: 检查Apache运行状态,并设置开机启动

service: name=httpd state=started enabled=yes

执行一下

$> ansible-book temp.yml

好了,现在我们就可以进行平台的自动化部署啦。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171219G0HJE700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券