前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Ansible自动化管理云上或者本地的基础设施

使用Ansible自动化管理云上或者本地的基础设施

作者头像
Techeek
发布2018-01-08 16:37:22
1.1K0
发布2018-01-08 16:37:22
举报
文章被收录于专栏:云计算云计算

Ansible任务是幂等的。通常在没有额外编码的情况下,单单调用脚本重复执行通常是不安全的。而Ansible在执行任务之前都会收集当前的系统和环境信息作为上下文环境(这在Ansible中称为Facts

设计原则

  • 有非常简单的设置过程和最小的学习曲线。
  • 可以快速和并行地管理机器。
  • 通过利用现有的SSH守护进程来避免添加自定义代理和其他开放端口。
  • 用同时满足机器友好和可读性高的语言描述基础设施。
  • 重视安全性和内容的可维护性(方便审计、review以及重构)。
  • 不需要任何软件引导即可管理你新建的远程机器。
  • 允许使用任何动态语言进行模块开发,而不仅仅是Python。
  • 非root用户也可以执行。

Ansible默认通过SSH协议来管理机器。

Ansible安装完成后,不需要新增数据库,也不会有守护进程启动或保持后台运行。你只需要把它安装在一台机器上(通常是一台笔记本电脑),它就可以作为中心点来管理所有的远程机器。Ansible管理远程机器并不依赖于安装或运行与机器上的软件,所以升级Ansible到新的版本并不是一个难题。

Playbooks可以说是Ansible的核心概念。

Playbooks是Ansible的配置,部署和编排语言。它可以描述你希望远程系统执行的策略,也可以描述常规任务中的一系列步骤。

最基本的场合下,playbooks可以用来管理远程机器的配置和部署。更复杂一点的场合,比如说按序进行多层滚动更新,将操作委派给其他主机执行,与监控服务器进行交互,实现负载均衡,playbooks也可以胜任。

由于Playbooks设计考虑,它的语法类似文本语言,可读性很好。

Playbooks通过YAML格式表达,它看起来不是一个编程语言或脚本,而是一个配置或一个过程的模型,这是设计者有意而为之的结果。

在我的例子中,我用Vagrant创建了两个虚拟机。我将在第一台机器上安装Ansible,而在第二个有我应用的一些配置。

多机的配置来自我以前的文章

Vagrantfile(原文代码因为版本原因有点问题,译者已做更改)

代码语言:txt
复制
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
   config.vm.define "node" do |node|
    node.vm.network "private_network", ip: "192.168.0.101"
    node.vm.hostname = "node"
    node.vm.provider "virtualbox" do |v|
     v.memory = 1024
     v.cpus = 1
    end
   end
   config.vm.define "master" do |master|
    master.vm.provision :pre, type: :shell, path: "install.sh"
    master.vm.network "private_network", ip: "192.168.0.102"
    master.vm.hostname = "master"
    master.vm.provider "virtualbox" do |v|
     v.memory = 1024
     v.cpus = 1
    end
   end
end

install.sh

代码语言:txt
复制
# add web/database hosts to known_hosts (IP is defined in Vagrantfile)
ssh-keyscan -H 192.168.0.102 >> /home/vagrant/.ssh/known_hosts
ssh-keyscan -H 192.168.0.101 >> /home/vagrant/.ssh/known_hosts
chown vagrant:vagrant /home/vagrant/.ssh/known_hosts

# reload ssh in order to load the known hosts
/etc/init.d/ssh reload

master上,使用以下命令安装Ansible:

$ vagrant ssh master

如果要求输入密码,请输入vagrant

和安装Ansible的命令(当然你也可以配置在脚本中,在Vagrantfile中调用执行):

代码语言:txt
复制
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible
sudo apt-get install sshpass

/etc/ansible/hosts

代码语言:txt
复制
[vagrant]
node ansible_host=192.168.0.101
master ansible_host=192.168.0.102

运行以下命令检查之前的配置命令是否执行成功:

ansible all -m ping -u vagrant --ask-pass

结果应该是:

代码语言:txt
复制
node  |  SUCCESS => {
    "changed":false,
    "ping": pong
}
master  |  SUCCESS => {
    "changed":false,
    "ping": pong
}

让我们来创建第一个Playbook,让它在node上安装Java和Tomcat。

playbook-tomcat.yml:

代码语言:txt
复制
- hosts: node
  vars:
    http_port: 80
    max_clients: 200
  remote_user: vagrant
  tasks:
    - name: updates a server
      apt: update_cache=yes
    - name: upgrade a server
      apt: upgrade=full
    - name: install java
      apt: name=default-jdk state=latest
    - name: install tomcat
      apt: name=tomcat7 state=latest
    - name: make sure apache is running
      service: name=tomcat7 state=started

sudo ansible-playbook playbook-tomcat.yml -u vagrant --ask-pass

执行完毕后,使用vagrant ssh node连接node并在其上运行java -version(可能要多等一会)

如果一切正常,你会看到安装的java版本。

如果你想查看原作者的完整代码,可以点击这里访问。

这个例子中虽然Ansible仅安装在一台机器上(ansible不安装在master而是安装在你的电脑上也可以),但可以在其他机器上执行命令来安装工具或操作(比如说对playbooks进行版本控制)。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设计原则
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档