前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 14.04上设置Masterless Puppet环境

如何在Ubuntu 14.04上设置Masterless Puppet环境

原创
作者头像
何处惹尘埃
修改2018-10-22 11:51:44
8050
修改2018-10-22 11:51:44
举报
文章被收录于专栏:云计算教程系列

介绍

在现代云计算领域,配置管理是至关重要的一步。配置管理工具允许您可靠地将配置部署到服务器。Puppet是这个领域中比较成熟的配置管理工具之一。

在典型的Puppet环境中,用户在其工作站上编写Puppet模块,将模块推送到版本控制服务器(例如Git),然后将这些模块下拉到Puppet主服务器。运行Puppet客户端的服务器定期连接到Puppet主服务器以查看是否有任何更改,如果是,则应用更改。

这种情况可以正常工作,直到您必须开始扩展登记的服务器数量或模块变得相当复杂。此时你有两个选择:聚集你的Puppet Master以处理负载(这可能需要你购买Puppet的商业版本),或者只是放弃Puppet master。本文将研究第二个选项。

无主的Puppet设置需要通过Git将所有Puppet模块的副本复制到每个节点,然后让Puppet在本地应用更改。这种方法的缺点是每个服务器下载所有模块,然后应用相关的,所以它不是例如具有敏感信息的设置的最佳选择。但是,在没有Puppet master的情况下运行会为您提供很大的灵活性,并且无需扩展基础架构即可实现。

准备

本教程假定您对Puppet和Git有所了解。

在本教程中,我们将使用两个腾讯云CVM:一个作为Git服务器运行,另一个我们将通过Puppet应用更改。我们将分别用your_git_server_ipyour_puppet_server_ip引用腾讯云CVM的IP地址。

因此,要学习本教程,您需要:

  • 一个Ubuntu 14.04 腾讯云CVM,添加了sudo非root用户和SSH密钥。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 添加了另一个带有SSH密钥的Ubuntu 14.04 腾讯云CVM并安装了Git Labs。

设置Git Labs的最简单方法是使用单击图像:在选择图像下的腾讯云CVM创建页面上,单击Applications选项卡,然后单击14.04上的GitLab 7.10.0 CE

第1步 - 创建Git存储库

第一步是创建一个存储库,其中将存储所有Puppet模块和清单。

首先,通过您喜欢的浏览器访问http://your_git_server_ip来打开Git Labs UI 。通过在新用户下填写右侧的详细信息来创建帐户,创建一个帐户并按绿色注册按钮。您将收到帐户激活电子邮件,激活帐户后,您将可以在主页面上登录。

单击主页面上的绿色+新建项目按钮。输入项目路径的 “puppet” ,然后单击“ 创建项目”。在“ 项目路径”字段中输入“puppet” ,然后为“ 可见性级别”选择“ 公共 ” ,然后单击绿色的“ 创建项目”按钮。

确保复制SSH URL,您将在项目屏幕的顶部看到它,因为我们将在以后的步骤中使用它。它看起来类似git@your_git_server_ip:username/puppet.git这样。

第2步 - 为Git Labs添加SSH密钥

在此步骤中,我们将在Puppet服务器上创建SSH密钥,然后将该密钥添加到Git Labs服务器。

root用户身份登录Puppet服务器。(因为Puppet的文件将由root拥有,我们需要有权在Puppet文件夹中设置初始Git仓库。)

为root用户创建SSH密钥。请确保不要输入密码,因为脚本将使用此密钥,而不是用户。

代码语言:javascript
复制
ssh-keygen -t rsa

接下来,使用以下命令显示您的公钥。

代码语言:javascript
复制
cat ~/.ssh/id_rsa.pub

复制此密钥。它看起来像ssh-rsa long_alphanumeric_string root@hostname

现在,在Git Labs Dashboard页面上,单击顶部栏上的Profile设置图标,右侧第二个。在左侧菜单中,单击SSH Keys,然后单击绿色Add a SSH Key按钮。在标题中,字段添加密钥的描述(如“Root Puppet Key”),并将您的公钥粘贴到Key字段中。最后,单击“ 添加”键

第3步 - 安装Puppet和Git

在这一步中,我们将安装Puppet和Git。

在Puppet服务器上,首先下载Ubuntu 14.04的Puppet包。

代码语言:javascript
复制
wget http://apt.puppetlabs.com/puppetlabs-release-trusty.deb

安装包。

代码语言:javascript
复制
dpkg -i /tmp/puppetlabs-release-trusty.deb

更新系统的包列表。

代码语言:javascript
复制
apt-get update

最后,安装Puppet和git。

代码语言:javascript
复制
apt-get install puppet git-core

此时,您应该按照本教程中的说明配置Git环境。

第4步 - 推送初始Puppet配置

安装了Puppet和Git后,我们就可以对Puppet存储库进行初步推送了。

首先,移动到/etc/puppet配置文件所在的目录。

代码语言:javascript
复制
cd /etc/puppet

在这里初始化一个git存储库。

代码语言:javascript
复制
git init

添加当前目录中的所有内容。

代码语言:javascript
复制
git add .

使用描述性注释提交这些更改。

代码语言:javascript
复制
git commit -m "Initial commit of Puppet files"

使用您在步骤1中复制的SSH URL将我们之前创建的Git项目添加为origin。

代码语言:javascript
复制
git remote add origin git@your_server_ip:username/puppet.git

最后,推动变革。

代码语言:javascript
复制
git push -u origin master

第5步 - 清理Puppet的配置

现在已经安装了Puppet,我们可以把所有东西放在一起。此时,您可以以root身份注销,而是以在准备期间创建的sudo非root用户身份登录。除非绝对必要,否则以root用户身份运行不是好习惯。

为了奠定基础,我们需要做出一些改变。首先,我们要清理/etc/puppet/puppet.conf文件。使用您喜欢的编辑器(vim,nano等)进行编辑/etc/puppet/puppet.conf进行以下更改。

让我们首先对我们特定设置的文件/etc/puppet/puppet.conf进行一些更改。使用nano或您喜欢的文本编辑器打开文件。

代码语言:javascript
复制
sudo nano /etc/puppet/puppet.conf

该文件将如下所示:

代码语言:javascript
复制
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates
​
[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

首先,从[master]行中删除所有内容,因为我们没有运行Puppet master。同时删除templatedir开头的[main]部分中的最后一行,因为这是不推荐使用的。最后,改变读取行factpath=$vardir/lib/facterfactpath=$confdir/facter的行。$confdir等同于/etc/puppet/,即我们的Puppet存储库。

puppet.conf完成上述更改后,您应该看到以下内容。

代码语言:javascript
复制
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$confdir/facter

第6步 - 添加Puppet模块

现在Puppet已经建立,但它没有做任何工作。Puppet的工作方式是查看名为manifests的文件,定义它应该做什么,因此在这一步中,我们将为Puppet创建一个有用的模块来运行。

我们的第一个模块,我们称之为cron-puppet,将通过Git部署Puppet。它将安装一个Git钩子,它将在成功合并后运行Puppet(例如git pull),并且它将安装一个cron作业以每30分钟执行git pull一次。

首先,进入Puppet模块目录。

代码语言:javascript
复制
cd /etc/puppet/modules

接着,建立包含manifestsfiles目录的的cron-puppet目录。

代码语言:javascript
复制
sudo mkdir -p cron-puppet/manifests cron-puppet/files

创建并打开目录manifests中的init.pp文件。

代码语言:javascript
复制
sudo nano cron-puppet/manifests/init.pp

将以下代码复制到init.pp。这是告诉Puppet每半小时从Git拉出来的原因。

代码语言:javascript
复制
class cron-puppet {
    file { 'post-hook':
        ensure  => file,
        path    => '/etc/puppet/.git/hooks/post-merge',
        source  => 'puppet:///modules/cron-puppet/post-merge',
        mode    => 0755,
        owner   => root,
        group   => root,
    }
    cron { 'puppet-apply':
        ensure  => present,
        command => "cd /etc/puppet ; /usr/bin/git pull",
        user    => root,
        minute  => '*/30',
        require => File['post-hook'],
    }
}

保存并关闭该文件,然后打开files目中的名为post-merge的另一个文件。

代码语言:javascript
复制
sudo nano cron-puppet/files/post-merge

将以下bash脚本复制到post-merge。这个bash脚本将在成功的Git合并后运行,并记录运行的结果。

代码语言:javascript
复制
#!/bin/bash -e
## Run Puppet locally using puppet apply
/usr/bin/puppet apply /etc/puppet/manifests/site.pp
​
## Log status of the Puppet run
if [ $? -eq 0 ]
then
    /usr/bin/logger -i "Puppet has run successfully" -t "puppet-run"
    exit 0
else
    /usr/bin/logger -i "Puppet has ran into an error, please run Puppet manually" -t "puppet-run"
    exit 1
fi

保存并关闭此文件

最后,我们必须告诉Puppet通过创建一个全局清单来运行这个模块,该清单在/etc/puppet/manifests/site.pp中可以找到。

代码语言:javascript
复制
sudo nano /etc/puppet/manifests/site.pp

粘贴以下内容到site.pp。这将创建一个名为“default”的节点分类。“默认”节点中包含的内容将在每台服务器上运行。在这里,我们告诉它运行我们的cron-puppet模块。

代码语言:javascript
复制
node default {
    include cron-puppet
}

保存并关闭文件。现在,让我们通过运行它来确保我们的模块工作。

代码语言:javascript
复制
sudo puppet apply /etc/puppet/manifests/site.pp

成功运行后,您应该看到一些输出以这样的行结束。

代码语言:javascript
复制
...
​
Notice: Finished catalog run in 0.18 seconds

最后,让我们将更改提交到Git存储库。首先,以root用户身份登录,因为这是具有SSH密钥访问权限的用户。

接下来,切换到/etc/puppet目录。

代码语言:javascript
复制
cd /etc/puppet

将该目录中的所有内容添加到提交中。

代码语言:javascript
复制
git add .

使用描述性消息提交更改。

代码语言:javascript
复制
git commit -m "Added the cron-puppet module"

最后,推动变革。

代码语言:javascript
复制
git push -u origin master

结论

要添加更多服务器,只需按照上面的步骤3在新服务器上安装Puppet和Git,然后将Git存储库克隆到/etc/puppet并应用site.pp清单。

您甚至可以在创建腾讯云CVM时使用用户数据自动执行此安装。确保在创建腾讯云CVM时使用SSH密钥,并将该SSH密钥添加到GitLab服务器。然后勾选腾讯云CVM创建屏幕上的启用用户数据复选框,并输入以下bash脚本,用您自己的红色突出显示红色突出显示的变量。

代码语言:javascript
复制
#!/bin/bash -e
​
## Install Git and Puppet
wget -O /tmp/puppetlabs.deb http://apt.puppetlabs.com/puppetlabs-release-`lsb_release -cs`.deb
dpkg -i /tmp/puppetlabs.deb
apt-get update
apt-get -y install git-core puppet
​
# Clone the 'puppet' repo
cd /etc
mv puppet/ puppet-bak
git clone http://your_git_server_ip/username/puppet.git /etc/puppet
​
# Run Puppet initially to set up the auto-deploy mechanism
puppet apply /etc/puppet/manifests/site.pp

就是这样!您现在拥有一个无主的Puppet系统,可以启动任意数量的其他服务器,甚至无需登录。

想要了解更多关于设置Masterless Puppet环境的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Set Up a Masterless Puppet Environment on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第1步 - 创建Git存储库
  • 第2步 - 为Git Labs添加SSH密钥
  • 第3步 - 安装Puppet和Git
  • 第4步 - 推送初始Puppet配置
  • 第5步 - 清理Puppet的配置
  • 第6步 - 添加Puppet模块
  • 结论
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档