本文由秀依林枫提供友情赞助,首发于烂泥行天下。
有关服务器的自动化管理,这方面以前没有接触过。打算这段时间把这块知识给补上。
现在服务器自动化管理软件,使用最多也最火的就是puppet了。
那么我们今天的主角也就是puppet。分以下几个步骤来介绍:
1、 puppet是什么
2、 puppet优点
3、 安装准备工作
4、 环境准备
5、 源码安装puppet
6、 RPM安装puppet
7、 puppet证书授权
8、 puppet资源
一、puppet是什么
puppet是一种基于ruby语言开发的Lnux、Unix、windows平台的集中配置管理系统。它使用自有的puppet描述语言,可管理配置文件file、用户user、cron任务、软件包、系统服务等系统实体。
puppet把这些系统实体称之为资源,puppet设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
puppet依赖于C/S(客户端/服务器)的部署架构。它需要在puppet服务器上安装puppet-server软件包(以下简称master),在需要管理的目标主机上安装puppet客户端软件(以下简称agent)。
当agent连接上master后,定义在master端的配置文件会被编译,然后在agent上运行。每个agent默认30分钟会连接一次master,确认配置信息的更新情况。但是这种方式在很多场景下不是很符合系统管理员的要求,所以很多系统管理员也会将agent通过crontab(任务计划)来管理,这样会更加灵活一些。
二、puppet优点
puppet的语法允许你创建一个单独的脚本,用来在你所有的目标主机上建立一个用户。所有的目标主机会依次使用适合本地系统的语法来解释和执行这个模块。如果这个配置是在Red Hat服务器上执行的话,建立用户使用useradd命令,如果这个配置是在FreddBSD服务器上执行的话,则使用adduser命令。
puppet另外一个卓越的地方就是它的灵活性。源于开源软件的天性,你可以自由地获得puppet的源代码。如果你遇到问题并且有能力处理的话,你可以修改或加强puppet的代码使其适用于你的环境,然后解决这个问题。
puppet也是易于扩展的。定制软件包的支持功能和特殊的系统环境配置能够快速简单地添加至puppet的安装程序中。
三、安装准备工作
本次实验OS为centos 6.5 64bit,服务端为:192.168.199.247,客户端为192.168.199.248。
在正式实验之前,我们有几个事情需要先进行处理。
3.1 主机时间同步
为了减少在实验过程中不必要的麻烦,我们需要对所有主机(包括服务器和客户端)进行时间同步。即服务器与客户端的时间相差不能超过秒级。
使用以下命令进行时间同步,如下:
ntpdate timekeeper.isi.edu
如果在进行时间同步时,出现如下错误:
21 Jan 17:20:45 ntpdate[2720]: the NTP socket is in use, exiting
请关闭主机的ntpd服务,然后再进行时间同步。
/etc/init.d/ntpd stop
3.2 修改主机名
因为安装 puppet 时会把主机名写入证书,同时客户端和服务端之间通信需要这个证书。所以需要修改服务器与客户端的主机名。
修改主机名。如下:
hostname s.ilanni.com
执行此命令,可以使主机的主机名立即生效。但是服务器重启后,此修改就会失效。
要是主机名永久生效的话,需要修改/etc/sysconfig/network文件。如下:
cat /etc/sysconfig/network
本次实验,我们就不搭建DNS服务器,直接通过修改服务端与客户端的hosts文件来达到各自解析域名的目的。如下:
cat /etc/hosts
192.168.199.247 s.ilanni.com
192.168.199.248 c.ilanni.com
3.3 关闭iptables和selinux
我们现在所有的实验都是在关闭iptables和selinux下进行的。
/etc/init.d/iptables status
cat /etc/selinux/config
四、环境准备
puppet的安装可以分为源码安装和RPM安装,但是无论哪一种安装方法,我们都需要在安装之前对其进行几点需要说明。
4.1 puppet安装说明
1、由于puppet是采用ruby语言开发,所以无论是源码还是RPM方式安装puppet,我们都必须要先安装ruby语言环境
2、puppet从2.7版本以后,就需要hiera的支持。所以也必须安装hiera。
3、在前面章节中,我们说明了puppet是一个配置管理系统,而管理的资源,都是系统的实体。但是这些实体,是如何来的呢?这就需要我们安装另外一个资源收集软件—facter。
facter主要用来收集主机的一些信息,比如:CPU、主机IP等。facter把这些收集的信息发送给puppet服务器端,服务器端就可以根据不同的条件来对不同的节点机器生成不同的puppet配置文件。
facter也是ruby语言开发的,这个我们可以在facter的安装文档中可以查看到,如下:
cat README.md
4.2 安装ruby
ruby的安装比较简单,我们在此使用是yum进行安装。如下:
yum -y install ruby
ruby安装完毕后,我们来查看其生成的文件。如下:
rpm -ql ruby
我们可以查看ruby的帮助信息,如下:
ruby -h
除此之外,我们还要安装ruby-rdoc这个软件包。该软件包主要用于查看ruby的帮助文档。如下:
yum -y install ruby-rdoc
以上就是和ruby有关的软件包,安装完毕后,我们开始来安装facter。
4.3 安装facter
facter我们可以从puppet官网下载,如下:
http://downloads.puppetlabs.com/facter/
注意:facter也可以通过yum进行安装,在此我们使用的是源码安装。
下载facter最新的版本,如下:
wget http://downloads.puppetlabs.com/facter/facter-2.3.0.tar.gz
解压facter软件包,如下:
tar -xf facter-2.3.0.tar.gz
开始安装facter,如下:
ruby install.rb或者./install.rb
facter安装完毕后,我们来查看下facter的使用帮助。如下:
facter -h
如果想查看facter详细帮助信息,我们也可以man下facter。如下:
man facter
如果安装没有问题的话,我们在执行facter命令后,会显示facter收集的相关信息。如下:
facter
4.4 安装hiera
hiera主要用于控制一些agent经常变化的数值,在puppet2.7以后的版本必须要安装。如果不安装的话,我们在安装puppet时,系统会提示如下错误:
Could not load hiera; cannot install
但是在安装hiera之前,我们必须安装额外的yum源,否则系统会提示找不到该软件包。
该yum源,我们可以puppet官网查看到。如下:
https://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-red-hat-enterPRise-linux-and-derivatives
按照puppet官网的方法进行安装。如下:
rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
yum源配置完毕后,我们现在来安装hiera。如下:
yum -y install hiera
以上安装完毕后,我们就可以正式安装puppet。
五、 源码安装puppet
puppet服务端与客户端的源码安装使用的是同一个软件包,安装步骤一样,只是在配置文件方面有细微的差别。
在下载puppet源码之前,我们还要在master端和agent端创建puppet运行时使用的用户puppet。master端如果不创建的话,master在启动时,会报如下错误:
创建puppet用户,如下:
useradd -M -s /sbin/nologin puppet
cat /etc/passwd |grep puppet
注意:puppet服务端是以puppet用户运行的,而puppet客户端是root用户运行。
这样做的目的是:master在服务端以普通用户运行安全性比较高,而agent在客户端以root用户运行,是因为master在创建用户、修改系统文件等资源时,需要具有最高权限。
5.1 puppet源码安装
puppet的源码包,我们可以从puppet官网下载。目前puppet最新版为3.7.3.如下:
http://downloads.puppetlabs.com/puppet/
下载puppet软件包。如下:
wget http://downloads.puppetlabs.com/puppet/puppet-3.7.3.tar.gz
解压puppet软件包,如下:
tar -xf puppet-3.7.3.tar.gz
puppet的安装方法与facter的安装一样,如下:
ruby install.rb或者./install.rb
puppet安装完毕后,我们来查看下其帮助信息,如下:
puppet help
查看puppet的安装位置如下:
ll /etc/puppet/
以上就是puppet的安装,安装完毕后。我们现在来配置puppet。
5.2 master端配置
puppet安装完毕后,我们来配置下master端。把puppet源码包ext/redhat/目录下的puppet.conf文件复制到puppet的安装目录/etc/puppet/下,如下:
cp ext/redhat/puppet.conf /etc/puppet/
vi /etc/puppet/puppet.conf
server = s.ilanni.com
certname = s.ilanni.com
pluginsync = false
其中s.ilanni.com表示puppet服务器的主机名。
pluginsync = false表示关闭模块中的插件功能
配置文件修改完毕后,我们现在来配置master端的启动脚本。
复制puppet源码包ext/redhat/目录下的server.init文件到/etc/init.d/下,并重命名为puppetmaster。然后赋予puppetmaster可执行权限。如下:
cp ext/redhat/server.init /etc/init.d/puppetmaster
chmod u+x /etc/init.d/puppetmaster
注意:master端启动,我们也可以通过puppet master命令来启动。如下:
puppet master
netstat -tunlp |grep "8140"
ps aux |grep puppet
其实puppetmaster启动脚本就是使用puppet master命令启动的,如下:
cat /etc/init.d/puppetmaster
把puppetmaster加入到开机启动项。如下:
chkconfig --add puppetmaster
chkconfig puppetmaster on
chkconfig |grep puppetmaster
以上都配置完毕后,我们来启动puppet服务,如下:
/etc/init.d/puppetmaster start
ps aux |grep puppet
netstat -tunlp
通过上图,我们可以很puppet服务使用TCP协议的8140端口,而且运行时使用puppet用户。
puppet服务端配置完毕后,我们现在来配置puppet客户端。
5.3 agent端配置
agent端的配置,只需要把puppet.conf文件复制到puppet的安装目录/etc/puppet/下即可,如下:。
cp ext/redhat/puppet.conf /etc/puppet/
cat /etc/puppet/puppet.conf
server = s.ilanni.com
pluginsync = false
其中s.ilanni.com表示puppet服务器的主机名。
pluginsync = false表示关闭模块中的插件功能
agent端启动,我们可以通过puppet agent命令来启动。如下:
puppet agent
ps aux |grep puppet
通过上图,我们也可以看出agent端运行时使用的用户为root,而不是puppet用户。
注意:agent端我们使用puppet agent命令来进行各种管理,包括证书的申请、资源的同步,我们都是通过这个命令进行的。
agent可以以两种方式运行:第一种方式是命令接参数连接master,第二种是以守护进程的形式在系统后台运行,默认每30分钟连接一次master,但是这样并不灵活。我们一般是使用第一种方式,并配合crontab使用。
六、 RPM安装puppet
RPM方式安装puppet比较简单,我们只需yum安装即可。如下:
6.1 puppet安装准备工作
在使用RPM安装之前,我们要先配置额外的yum源,否则系统会提示找不到puppet软件包。如下:
yum -y install puppet-server
安装额外的yum源,我们可以在puppet的官网查找到yum源。如下:
https://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-red-hat-enterprise-linux-and-derivatives
按照puppet官网的方法进行安装。如下:
rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
注意:该yum源无论是master端和agent端都需要进行配置。
6.2 master端安装与配置
现在开始yum安装master端,如下:
yum -y install puppet-server
通过上图,我们可以看到安装puppet-server是要依赖于facter、hiera和puppet三个软件包。
现在我们来查看puppet-server安装时新建的用户以及puppet服务运行时所用的用户,如下:
cat /etc/passwd
ps aux |grep puppet
通过上图,我们可以看到puppet-server在安装时确实新建用户puppet,以及在运行时使用的确实puppet用户。
查看puppet服务所使用的端口,如下:
/etc/init.d/puppetmaster start
新闻热点
疑难解答