我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第一部分。

原文地址:http://blog.jobbole.com/87679/

本文由 伯乐在线 - Wing 翻译,黄利民 校稿。未经许可,禁止转载!
英文出处:Manue Kiessling。欢迎加入翻译组

关于 Puppet

Puppet 是一种 Linux、Unix、Windows 平台的集中配置管理系统,使用自有的 Puppet 描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。Puppet把这些系统实体称之为资源,其设计目标是简化对这些资源的管理以及妥善处理资源之间的依赖关系。

在这一系列中,作者提供了一个可操作的全面教程,来逐步解释如何使用 Puppet 搭建一个集中式管理的 Linux 服务器基础结构。

目标读者

我相信有一类Linux系统管理员会从这个系列教程中收获最多,他们已经在管理一个小规模的服务器系统网络,想知道如何扩大现有的基础结构,并且为管理新增系统付出的的时间和精力,不会和新增系统的数目成正比。或许你目前在管理5个服务器系统,你可以问一下自己有没有更好的方法,可以在不增加人手的情况下,来管理50个服务器系统。或者你已经听说过集中式配置管理和Puppet, 并且渴望尝试一下。

先决条件

如果你的电脑安装了Linux、Windows 或者 Mac OS X 桌面操作系统,拥有至少4G内存,16G可用磁盘空间,并且CPU可以运行虚拟机,那就足够了。所有你要做的事情和需要的信息,我会在这个系列课程中为你说明。

开始

我无需说服你使用Puppet实现基于工具的配置管理,既然你能读到这里,你可能已经想要使用它了,所以让我们马上开始吧。

我承诺这是一个易上手的全面的教程,为此,我们需要准备一个环境,这样我们可以不仅可以讨论如何使用Puppet,而且能够创建一个虽然很小但是真实的服务器基础结构,在这个基础结构中,我们会运行一个Puppet服务器,它会管理一个Puppet客户端。换句话说,我们需要两个Linux虚拟机。

在这个教程中,我愿意使用两个 Ubuntu 12.04 LTS Precise Pangolin 系统,这只是因为我对这个Linux发行版本最有经验。如果你使用更新版本的Ubuntu或者Debian 7.0 Wheezy,那么这里描述的步骤应该不会有很大的区别。

我们要做的第一件事情是从Oracle网站下载安装VirtualBox。这是一个免费的虚拟机管理软件,我们可以使用它来运行上面提到的两个虚拟Ubuntu系统。在写这篇教程时,VirtualBox的最新发布版本是4.3.8-92456,你可以前往http://download.virtualbox.org/virtualbox/4.3.8/ ,然后根据使用的操作系统,来下载VirtualBox-4.3.8-92456-Win.exeVirtualBox-4.3.8-92456-OSX.dmg, 或者 VirtualBox-4.3.8-92456-Linux_amd64.run。一旦下载完成后,你就可以使用默认选项进行安装了。

一旦将VirtualBox安装到你的电脑后,你就需要下载Ubuntu 12.04 LTS 64位服务器版本的安装媒介了,你可以前往 http://releases.ubuntu.com/12.04/, 然后选择64-bit PC (AMD64) server install CD 链接来进行下载,我们会使用这个ISO来安装两个虚拟机。

一旦将ISO文件完全下载到你的电脑后,你可以打开VirtualBox,在Machine菜单下选择New…

我们开始安装虚拟机,这个虚拟机会被当做Puppet服务器,因此在弹出窗口中,我们将虚拟机的名字设置为puppetserver。接下来将Type设置为Linux,将Version设置为Ubuntu(64bit)。 将内存大小设置为512M就足够了。让VirtualBox来为虚拟机创建一个硬盘文件(将大小设置为8G就足够了)。

现在你就可以启动最新创建的虚拟机了。VirtualBox会向你询问安装媒介,这里需要指向你已经下载完毕的Ubuntu ISO文件的路径。

VirtualBox就会启动虚拟机并引导进入Ubuntu的安装CD,选择English作为安装过程中使用的语言,然后选择Install Ubuntu Server继续安装。

在安装过程中,你应该进行如下设置:

  • 语言:English
  • 国家:选择你的国家
  • Locale:en_US.UTF-8
  • 键盘:选择最适合你需要的键盘布局
  • 默认用户:ubuntu,密码ubuntu
  • 加密home目录:No
  • 时区:选择你所在的时区
  • 分区:Guided – use entire disk
  • 当被询问需要安装哪些包时,只选择OpenSSH server
  • 将grub安装进MBR
  • 将系统时钟设置为UTC
  • 不要自动安装安全更新。

一旦第一个虚拟机的安装完成后,启动它并进入。然后,我们创建第二个虚拟机,这个虚拟机是我们的puppet客户端。你可以参考安装第一个虚拟机时的处理方式,但其中有一个例外:在VirtualBox内部安装Ubuntu的过程中,将第二台虚拟机的名字设置为 puppetclient,而不是 puppetserver

在完成安装后,你可以像操作第一台虚拟机那样,启动并进入第二台虚拟机。这时你会看到两个VirtualBox的窗口,都在运行Ubuntu 12.04, 都向你提示输入登录信息。接下来,我们需要对VirtualBox进行一些配置,因此你需要登陆到两台虚拟机(用户名:ubuntu,密码:ubuntu),然后通过命令sudo poweroff来关闭它们。

网络

因为我们要建立一个Puppet服务器和客户端,所以这两台虚拟机需要通过网络彼此通信。同时,如果能够从我们自己的电脑连接到这两台虚拟机,也会比较方便,这样我们可以通过SSH的方式连接到虚拟机,而不是通过一个很小的不易用的VirtualBox控制台。最后还有重要的一点,这两台虚拟机需要能够连接到互联网,这样才可以安装相关软件。

为了实现这些,我们需要两个虚拟的网络,一个Host-only网络和一个NAT网络。这两台虚拟机则各需要有两个以太网适配器,其中eth0用来连接到Host-only网络,eth1用来连接到NAT网络。

Host-only网络允许这两台虚拟机可以彼此连接,也允许我们可以使用自己的电脑连接到这两台虚拟机上。NAT网络则允许这两台虚拟机可以访问互联网。

VirtualBox本身已经建立了这两种网络。选择File -> Preference,然后找到Network,其中NAT Networks选项卡中虽然没有列出任何网络,但其实一直会存在一个可用的网络,因此我们不需要再额外配置一个。然后切换到Host-only Networks选项卡。我们需要确保有一个名为vboxnet0的网络是可用的。点击在列表旁边的小螺丝刀图标,在弹出的窗口中,需要确认AdapterDHCP Server的配置如下所示。

Host-only网络中,我们自己的电脑的IP地址被自动设置为192.168.56.1,我们的puppetserver虚拟机应该设置为192.168.56.2,puppetclient虚拟机应该设置为192.168.56.3。

为了做到如上配置,我们需要在两个虚拟机内打开Settings对话框,找到Network,然后将Adapter 1绑定到Host-only Adapter,并将Name设置为vboxnet0。然后将Adapter 2绑定到NAT(注意:不是NAT Network!)。这些配置在两台虚拟机上必须保持一致。

现在启动两台虚拟机并使用ubuntu用户信息登录系统。我们需要在两台虚拟机内编辑/etc/network/interfaces文件来配置网络接口。对于puppetserver来说,该文件如下所示。

/etc/network/interfaces on puppetserver

1
2
3
4
5
6
7
8
9
10
auto lo
iface lo inet loopback
 
auto eth0
iface eth0 inet static
    address 192.168.56.2
    netmask 255.255.255.0
 
auto eth1
iface eth1 inet dhcp

对于 puppetclient 来说,该文件如下所示。

/etc/network/interfaces on puppetclient

1
2
3
4
5
6
7
8
9
10
auto lo
iface lo inet loopback
 
auto eth0
iface eth0 inet static
    address 192.168.56.3
    netmask 255.255.255.0
 
auto eth1
iface eth1 inet dhcp

如你所见,这两台虚拟机的配置中,唯一不同的地方就是IP地址。通过如上配置,我们的虚拟机就可以通过eth1来访问互联网,并通过eth0中设置的静态IP地址来访问彼此。

最后一步,我们需要将两台虚拟机的名字放到两台虚拟机的hosts文件中,这样我们就可以通过名字而不是IP地址来访问它们。puppetserver虚拟机上的etc/hosts文件内容如下所示。

/etc/hosts on puppetserver

1
2
3
4
5
6
7
8
9
10
127.0.0.1       localhost
127.0.1.1       puppetserver
192.168.56.3    puppetclient
 
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

puppetclient虚拟机上的/etc/hosts文件内容如下所示。

/etc/hosts on puppetclient

1
2
3
4
5
6
7
8
9
10
127.0.0.1       localhost
127.0.1.1       puppetclient
192.168.56.2    puppetserver
 
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

在重启两台虚拟机后,你应该能够从puppetserver虚拟机上成功运行ping puppetclient命令,反过来也可以从puppetclient虚拟机上成功连接到puppetserver虚拟机,同样你也应该能够在自己的电脑上成功运行 ping 192.168.56.2 和 ping 192.168.56.3

搭建Puppet服务器

现在,我们已经建立了Puppet服务器和Puppet客户端的虚拟机,在虚拟机上安装了Ubuntu,并配置好了网络并正在运行,我们可以开始搭建Puppet服务器系统了。

Ubuntu软件库为我们提供了将服务器系统变为Puppet服务器所需的全部内容,我们不需要手动安装任何软件或者操作外部软件包。

为了安装必要的软件包,我们需要使用ubuntu用户登录到puppetserver虚拟机,然后运行如下命令。

On the puppetserver VM

1
2
~# <strong>sudo apt-get update
~# <strong>sudo apt-get install puppetmaster

我们不需要做其他步骤了,现在Puppet服务器可以使用一个合理的默认配置来运行了。

搭建Puppet客户端

建立Puppet客户端(或者用Puppet术语,代理)并在puppetclient虚拟机上运行它,和建立Puppet服务器并没有太大的区别。首先我们需要安装Puppet客户端软件包。

On the puppetclient VM

1
2
~# sudo apt-get update
~# sudo apt-get install puppet

然后,我们需要编辑etc/puppet/puppet.conf文件,来告诉Puppet代理Puppet服务器的域名,为此我们需要在该文件中添加一行:server=puppetserver

/etc/puppet/puppet.conf on puppetclient

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[main]
server=puppetserver
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates
prerun_command=/etc/puppet/etckeeper-commit-pre
postrun_command=/etc/puppet/etckeeper-commit-post
 
[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

这样设置后,客户端就可以连接到puppetserver虚拟机上的Puppet master进程了,但它还不能真正和服务器进行通信,因为它还没有在已验证并允许的客户端列表里面。为了实现这一点,我们需要发起从客户端到服务器的第一个连接。

在 puppetclient VM

1
~# sudo puppet agent --verbose --no-daemonize --onetime

这会向Puppet master进程发起一个连接,这个进程会监听puppetserver虚拟机上的8140端口。这个连接的输出会很详细,然后客户端(代理)就不再继续以后台daemon的方式运行。同时,它只会运行一次,也就是说,当这个连接关闭后,代理进程也会结束。

如果所有的配置都正确,那么第一次运行时的输出如下所示。

在 puppetclient VM 上,运行 Puppet 代理之后,

1
2
3
4
info: Creating a new SSL key for puppetclient
info: Creating a new SSL certificate request for puppetclient
info: Certificate Request fingerprint (md5): 20:74:A7:BD:69:5D:50:8D:6A:79:67:6E:DC:5E:41:E0
Exiting; no certificate found and waitforcert is disabled

这个看上去似乎像是一个错误,但它实际上不是。客户端已经通过这次运行让服务器知道了它的信息了,但是服务器还没有接受这个客户端。下一步,我们必须签署puppetclient虚拟机已经创建的SSL认证请求,并将其发送给服务器。我们可以通过如下命令在服务器上查看那些还没有被签署的认证请求列表。

在 puppetserver VM 上

~# sudo puppet cert --list

这个命令会打印如下的列表。

在 puppetserver VM 上

"puppetclient" (20:74:A7:BD:69:5D:50:8D:6A:79:67:6E:DC:5E:41:E0)

现在我们可以签署这个请求,这样我们就允许客户端在接下来的连接中可以收到服务器的信息。

在 puppetserver VM 上

1
2
3
4
~# sudo puppet cert --sign puppetclient
 
notice: Signed certificate request for puppetclient
notice: Removing file Puppet::SSL::CertificateRequest puppetclient at '/var/lib/puppet/ssl/ca/requests/puppetclient.pem'

切换回puppetclient虚拟机,我们现在能够初始化一个指向服务器的完整连接了。

在 puppetserver VM 上

1
2
3
4
5
6
7
8
~# sudo puppet agent --verbose --no-daemonize --onetime
 
info: Caching certificate for puppetclient
info: Caching certificate_revocation_list for ca
info: Caching catalog for puppetclient
info: Applying configuration version '1395687915'
info: Creating state file /var/lib/puppet/state/state.yaml
notice: Finished catalog run in 0.02 seconds

就是这样——我们的Puppet基础结构已经完全建好并开始运行了。但是,在这个基础结构还并不能做任何事情。我们的目标是通过运行在puppetserver虚拟机上的Puppet master,来管理puppetclient虚拟机上的配置。但是我们目前还没有定义任何信息来触发客户端的配置改动。这就是我们要在使用Puppet来构建可管理的服务器基础结构: 第二部分会涉及的内容。

[翻译]用 Puppet 搭建易管理的服务器基础架构(1)的更多相关文章

  1. [翻译]用 Puppet 搭建易管理的服务器基础架构(4)

    我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第四部分. 原文地址:http://blog.jobbole.com/89214/ 本文由 伯乐在线 - Wing 翻译,黄利民 校稿 ...

  2. [翻译]用 Puppet 搭建易管理的服务器基础架构(3)

    我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第三部分. 本文由 伯乐在线 - Wing 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:Manuel Kiessling.欢迎加 ...

  3. [翻译]用 Puppet 搭建易管理的服务器基础架构(2)

    我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第二部分. 原文地址:http://blog.jobbole.com/87680/ 本文由 伯乐在线 - Wing 翻译,黄利民 校稿 ...

  4. SaltStack 是一个服务器基础架构集中化管理平台

    SaltStack详细部署   一.基础介绍============================================================================== ...

  5. Linux系统搭建并管理Git服务器

    搭建Git服务器 GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓 ...

  6. phpMyAdmin搭建及管理多台数据库服务器

    phpMyAdmin搭建及管理多台数据库服务器 环境说明: 系统版本    CentOS 6.9 x86_64         软件版本    nginx-1.12.2        php-5.5. ...

  7. 用go-module作为包管理器搭建go的web服务器

    本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器.并使用Endless来使服务器平滑重启,使用Swagger来自动生成Api文档. 源码在 ...

  8. 搭建kerberos和NTP服务器以及安全的NFS服务

    说明:这里是Linux服务综合搭建文章的一部分,本文可以作为单独搭建Kerberos和NTP时钟服务的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服务搭建综合)的顺序来做的. 如果需 ...

  9. 搭建自己的Nuget服务器

    序言 你们公司有没有好多项目,有没有好多类库,你们的类库是在tfs中管理,还是svn或者github,又或者是各自为政版本类库随意使用? 那么你们使用者写类库的时候方便吗? 有没有更新下载,版本不一致 ...

随机推荐

  1. [Hadoop大数据]——Hive部署入门教程

    Hive是为了解决hadoop中mapreduce编写困难,提供给熟悉sql的人使用的.只要你对SQL有一定的了解,就能通过Hive写出mapreduce的程序,而不需要去学习hadoop中的api. ...

  2. 负载均衡session会话保持方法

    负载均衡时,为了保证同一用户session会被分配到同一台服务器上,可以使用以下方法:1.使用cookie将用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在该用 ...

  3. bootstrap与Select2使用小结

    这个select2组件的功能确实很强大,可以将图片放入到select里面随着文字一起显示. 组件的下载地址以及API说明地址: 1.Select2使用示例地址:https://select2.gith ...

  4. AngularJS中的表单验证

    AngularJS中的表单验证 AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证 1.使用angularjs的表单验证 正则式验证 只需要配置一个正则 ...

  5. 剖析twemproxy前言

    又是喜闻乐见的新坑,前面的mysql协议,当我在解读go-mysql包的时候,会重新讲到,至于Leetcode的更新会与go语言同步.关于这个redis的新坑,目前打算通过剖析twemproxy源码来 ...

  6. jsp登入oracle

    <body> <% Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=null; ...

  7. 解密jQuery内核 样式操作

    基础回顾 jQuery里节点样式读取以及设置都是通过.css()这个方法来实现的,本章通一下分解探究下jquery里这部分代码的实现 那么jQuery要处理样式的哪些问题? 先简单回顾下样式操作会遇到 ...

  8. A Simple OpenCASCADE Qt Demo-occQt

    A Simple OpenCASCADE Qt Demo-occQt eryar@163.com Abstract. OpenCASCADE have provided the Qt samples ...

  9. @font-face使用

    转自http://www.tuicool.com/articles/QVf6nei 一.webfont与@font-face 什么是webfont web font,又称之为 在线字体 或者 网络字体 ...

  10. 利用pixi.js制作精灵动画

    CSS Sprites 技术对于广大的前端工程师来说应该是一点也不陌生.国内开发者昵称为CSS精灵,通过一定的技术手段,让精灵动起来,我称其为精灵动画,那么目前有哪些实现方式 呢?下面让我们详细的聊聊 ...