2

puppet自动化布署配置入门

 3 years ago
source link: https://www.meirenji.info/2018/09/03/puppet%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B8%83%E7%BD%B2%E9%85%8D%E7%BD%AE%E5%85%A5%E9%97%A8/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
  • 本实例用到系统及软件版本

    Centos6.8
    puppet3.8.7
    mysql5.1.73

1. 自动化运维都有哪些开源软件

初始化:Kickstart、Cobbler、 Rpmbuild/Xen、Kvm、Lxc、Docker/Openstack、Cloudstack、Opennebula、Eucalyplus

配置类工具:Chef、Puppet、Func、Cfengine

命令和控制类工具: Fabric、Salstack、Ansible、Capistrano、Pssh、Dsh、Expect

监控类工具:Cacti、Nagios、Zabbix、Ganglia
  1. 什么是Puppet?

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

  2. Puppet都有哪些特性?

  • 能管理多达40多种资源,如:file、user 、group、host、packeage、service、cron、exec、yumrepo等,适合整个软件生命周期的管理
  • 可自动化重复任务、快速部署关键性应用及本地或者云端完成主动管理变更和快速扩展架构规模等
  1. puppet的整个生命周期

供应(provisioning:包安装)—>配置(configuration)—>联动(orchestration)—>报告(reporting)

Puppet通常可以用来管理一台主机的整个生命周期:从初始化到安装、升级、维护以及最后将服务迁移并下架。

  1. Puppet适用于哪些场合
  • 初始化配置、修复、升级、审计
  • 统一安装、配置管理软件
  • 统一配置系统优化参数
  • 定期检测服务是否运行
  • 快速替换集群时设备的角色

大部分配置工具,如shell或者perl脚本,是命令式或者过程式的。它们描述的是事情应该怎么做而不是所需要的最终状态应该如何。

  • Puppet Server默认需要2G内存

Puppet社区版和企业版本功能上有什么差别

Puppet支持哪些系统

Puppet架构是怎样的

Puppet如何工作的

Puppet的目录结构描述如下: 
|— puppet.conf # 主配置配置文件
|— fileserver.conf #文件服务器配置文件
|— auth.conf #认证配置文件 (只允许域内认证)
|— autosign.conf #自动验证配置文件
|— tagmail.conf # 邮件配置文件(将错误信息发送)
|— manifests # 文件存储目录(puppet会先读取该目录的.pp文件site.pp)
|— nodes
| | | puppetclient.pp #puppet解析主配置文件所有的模块和节点都在此文件里include
| |— site.pp # 定义puppet相关的变量和默认配置
| |— modules.pp # 加载class类模块文件(include nginx)
|— modules # 定义模块
| —nginx # 以nginx为例
| |— file
| |— manifests
| | |— init.pp #类的定义,类名必须与模块名相同
| |—– templates # 模块配置目录,可以被模块的manifests引用
| | |— nginx.erb #erb模板

Puppet组织结构是怎样的


  1. 如果是虚拟机或者物理机安装,一定要注意两台服务器时间要同步。
yum install -y ntp

ntpdate ntp.api.bz

如果时间不同步,会导致如下错误。

Failed to generate additional resources using 'eval_generate': SSL_connect returned=1 errno=0 state=error: certificate verify failed: [CRL is not yet valid for /CN=linux-node1.com]
  1. 在安装puppet软件以前先设置主机名,因为生成证收的时候要把主机名写入证书,如果证书生成后再改主机名,puppet客户机就连不上主机了
vi /etc/sysconfig/network
hostname
  • 修改/etc/hosts

添加服务器和客户端的dns解析

vi /etc/hosts
192.168.0.177 master.*.*
192.168.0.186 client1.*.*
  1. 客户端,服务端均需要安装epel-release,默认centos yum包管理器中没有puppet相关包,需要安装扩张包即epel-release。

Epel是企业版Linux附加软件包(Extra Packages for Enterprise Linux)的缩写,是一个由特别兴趣小组创建、维护并管理的,针对红帽企业版Linux(RHEL)及其衍生发行版(比如CentOS、Scientific Linux)的一个高质量附加软件包项目。

根据操作系统版本配置Yum源,当前系统为Centos6x64,因此选择puppetlabs-release-6-11.noarch.rpm软件包

rpm -Uvh http://yum.puppetlabs.com/el/6Server/products/x86_64/puppetlabs-release-6-11.noarch.rpm
yum clean all
yum install puppet-server # install会自动安装puppet所依赖的包(包括facter)

puppet --version # 检查版本

facter --version

查看puppet版本信息

yum info puppet-server
yum info puppet

第一次启动服务端建议采用

puppet master --verbose --no-daemonize

方式启动,有助于测试和调试错误,如果采用后面这种方式,你可以看到启动的整个过程,启动过程会做一些初始化的工作,为master创建本地证书认证中心,证书和key。并打开socket等待client的连接。你可以在/etc/puppet/ssl目录看到相关的文件和目录

5、修改配置文件

vim /etc/puppet/puppet.conf

在[master]节点最后添加:

certname = master.*.*

如果没有[master]节点,手动添加上去。

6、设置开机启动

chkconfig puppetmaster on

7、启动服务

# service start puppetmaster

服务器配置完毕!


centos6.8 的selinux是默认开启的。在这种状态下面,会报错,必须关闭!这个坑耽误了我大概2天时间

Firewall

The Puppet Master listens on port 8140, so configure the firewall in such way that managed nodes can connect to the master.

查看selinux的详细状态,如果为enable则表示为开启

/usr/sbin/sestatus -v

永久性关闭(这样需要重启服务器后生效)

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

在客户端运行

puppet agent --server=master --verbose --no-daemonize --debug

puppet agent --test

puppet agent --no-daemonize --verbose --debug --noop

puppet agent --server=master.*.* --no-daemonize --verbose --debug --noop

–no-daemonize 使得puppet客户端运行在前台并输出日志到标准输出
–verbose会使客户端输出详细的日志
–debug参数能提供更加详细的输出,在解决问题时候非常有用

puppet agent --server=master.*.* --no-daemonize --verbose --debug

二、客户端安装和配置

2.1 修改hostname

hostname

2.2 修改/etc/hosts

192.168.0.245 master.*.*
192.168.0.247 client1.*.*

2.3 安装ruby

yum -y install ruby ruby-libs

2.4 安装puppet

yum install -y puppet

2.5 修改配置文件

vim /etc/puppet/puppet.conf

在[agent]节点最后添加:

server = master.*.*
设置开机启动

# chkconfig puppet on

启动服务

# service puppet start

检查puppet是否启动

netstat -nap | grep 8140

如果启动了还是连不上的话,应该是防火墙的问题.开启防火墙

-I后面没有跟数字,所以是插入第一行的.

iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8140 -j ACCEPT

客户端配置完毕!


3.0 添加认证

3.1 客户端执行

# puppet agent -t

3.2 服务端执行,执行下面的命令查看是否有客户端的证书请求:

# puppet cert list

出现请求过的认证信息后执行:

# puppet cert sign client1.*.*

到处为止puppet服务端和客户端都能正常工作了

  • 如果看到了客户端的证书请求,用下面的命令对所有证书请求签名:
puppet cert -s -a

or we can sign all awaiting certificates at once:

puppet cert sign --all

签发证书之后,再次测试,已经从服务端获取到了文件。


  • 查看所有签名的请求
puppet cert list --all
  • 您可能想从Puppet中删除主机,或重建主机,然后将其添加回Puppet。 在这种情况下,您将要从Puppet主控中撤销主机的证书。 要做到这一点,你可以用clean动作:

4.0 在服务器如何配置给客户端自动安全的签名

在/etc/puppet/puppet.conf [main]最后添加如下内容

autosign = true

自动颁发证书是一种比较危险的操作,除非有很充分安全的需求,一般情况下不要这样操作。

runinterval选项用于设置每隔多久的时间进行自动更新,时间单位为秒,我们选择的是600秒

即时观察下messages系统日志,命令如下:

tail -f /var/log/messages

5.0 puppet进阶用法

192.168.0.245 master.*.*  # puppet-master
192.168.0.247 client1.*.* # puppet-client

puppet是利用node(节点)来区分不同的客户机端,它并且给不同的客户机端分配不同的资源。

6.0 主清单文件

Puppet使用特定于域的语言来描述系统配置,这些描述保存到名为“manifests”的文件,其具有.pp文件扩展名。

默认的主清单文件位于您的Puppet主服务器上

/etc/puppetlabs/code/environments/production/manifests/site.pp

主清单现在是空的,因此Puppet不会在代理节点上执行任何配置

  • 如何执行主要清单

Puppet代理定期检查Puppet服务器(通常每30分钟)。 当它检入时,它将向主机发送关于自身的事实,并且拉出当前目录
由主清单确定的与代理相关的资源及其期望状态的编译列表。
代理节点然后将尝试进行适当的改变以实现其期望的状态。 只要Puppet主服务器正在运行并与代理节点通信,该周期将继续。

  • 在特定代理节点上立即执行
puppet agent --test

7.0 一次性清单

该puppet apply命令可以执行不相关的主清单清单上的需求。 它仅适用清单到您从应用节点。

这里是一个例子:

puppet apply /path/to/your/manifest/init.pp

以这种方式运行清单很有用,如果你想在代理节点上测试一个新的清单,或者如果你只想运行清单一次(例如,将代理节点初始化到所需的状态)

8.0 ERB模板来自动配置Nginx虚拟主机

  1. 首先建立nginx模块

puppet模板主要用于文件,例如各种服务的配置文件,相同的服务,不同的”.erb”结尾的文件。

mkdir -p /etc/puppet/modules/nginx/{files,manifests,templates}

通过define(定义),定义和类一样也属于资源容器,不过它的特点是能够在一台主机上多次赋值,此外它还能接受参数.

在nginx.conf.erb中,我们提前定义了两个变量$sitedomain和$port,使用的格式是”<%=变量名%>”

用如下命令来检测模板是否存在语法问题:

erb -x -T '-' -P /etc/puppet/modules/nginx/templates/nginx.conf.erb | ruby -c
Warning: The package type's allow_virtual parameter will be changing its default value from false to true in a future release

解决方法:

Add this to your site.pp

if versioncmp($::puppetversion,'3.6.1') >= 0 {

$allow_virtual_packages = hiera('allow_virtual_packages',false)

Package {
allow_virtual => $allow_virtual_packages,
}
}
Error: Could not run: Could not create PID file: /var/run/puppet/agent.pid
  • Please check to see if you already have a daemonized puppet agent running when you execute the puppet agent command again. If you do, then you will not be able to run the agent again as a daemon. You can run it like so, even when the daemonized version is running:
puppet agent -t --verbose
  • 清除客户端
rm -rf /var/lib/puppet/ssl/*
  • 清楚服务端的证书
puppet cert clean --all

puppet cert clean client1.*.*

参考文档:

原文在这里

puppet3.0的命令变化

Puppet agent: Exiting; no certificate found and waitforcert is disabled - Solution

Exiting; no certificate found and waitforcert is disabled

puppet证书问题

puppet常见错误总结

在 CentOS 和 RHEL 上安装 Puppet 服务器和客户端

如何在主代理安装在CentOS 7安装Puppet 4

RedHat6.5 puppet配置服务端与客户端部署配置

Puppet的简要安装部署

初认识Puppet


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK