本文主要是介绍puppet概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
运维自动化概述
运维自动化目标:
bootstrap --> configuration(目标) --> command and control
bootstrap:实现自动化部署基础操作系统和软件。
实现工具:PXE、cobbler、
configuration:配置服务相关属性(开机自启动、计划任务)和操作系统中更精细的管理(用户、组、文件系统)以实现我们期望的目标条件。
能够使得主机处于目标状态,但难以实现批量的自动化的配置。
实现工具:puppet、saltstack(基于python开发)、chef、cfengine。
示例:能够实现目标主机上是不是有指定用户,用户的用户名是什么,该用户对应的密码是什么,这个用户的登陆密码。
command and control:运行命令并执行一些控制机制。
实现工具:ansible、fabric。
puppet的运行机制:
工作与master/agent模型下。
puppet需要在认证之后才能对客户端主机进行配置(否则配置信息就会导致泄露),因此双方需要实现互相认证,因此双方基于一种加密的方式进行通信。
功能:在操作系统已经安装好的情况下,主动在两台的服务器上各自安装Nginx和Tomcat,并配置好Nginx服务器,使得Nginx能够主动将前端的动态页面的请求反向代理至后段的Tomcat服务器。
前提:
1、puppet基于SSL进行认证,这个证书依赖于主机名(依赖主机名的好处还在于当IP为动态获取的,但证书仍然依赖于主机名实现认证)。
2、被管控主机需要安装操作系统并配置IP地址和与之对应的主机名。
服务器端:安装puppt master服务并启动。
客户端:安装puppet agent,并启动,客户端主机。
帮助信息:
puppet describe <file|user|group|package|service|exec|cron|notice>
文件的定义:
file {"title":
type => value,
}
ensure:确保指定资源的目标状态,其值可以为present、absent、file、directory、link。
path:创建文件的位置。
target:创建链接时的源文件的位置。
content:指定创建文件的内容。
source:复制文件时,指定源文件的位置。
force:强制执行,其值为true或false。
mode:指定创建文件时的权限,777,755,666。
owner:指定文件创建时的拥有人。
group:指定文件创建时的拥有组。
练习:复制一个文件,源文件为/var/log/messages,复制后的文件存放在/tmp目录下,命名为abc,如果/tmp目录下有abc的文件则强制覆盖。
# vim test2.pp
file {"/tmp/abc":
source => "/var/log/messages",
force => true,
}
# puppet apply test2.pp
用户:
ensure:确保指定名称的用户是否存在,其值为present、absent。
name:定义用户名。
uid:指定用户的ID号。
gid:指定用户的GID号。
shell:定义用户的默认shell。
home:定义用户的家目录。
password:定义用户的密码,此处的密码为明文密码加密后的字符串,加密后的字符串应该写在单引号内。
openssl passwd -1 -salt `openssl rand -hex 4`
system:定义创建的用户是否为普通用户,false为普通用户,而true为系统用户。
创建tom用户,id号为444,shell类型为tcsh。
user {"tom":
ensure => present,
uid => 444,
shell => "/bin/tcsh",
password => "redhat",
}
练习:添加一个用户,用户名为test_user,为系统用户,id号为400,默认shell为/bin/csh。
user {"test_user":
ensure => present,
uid => 400,
shell => "/bin/csh",
system => true,
password => "$1$12345678$0ME5N6oDyoEAwUp7b5UDM/",
}
组:
ensure:present(存在),absent(不存在)。
name:定义组名。
gid:定义组ID。
system:是否为系统组。
练习:添加一个系统组,组名为test_group,组ID为444。
group {"test_group":
ensure => present,
gid => 444,
system => true,
}
package:
ensure:确保指定的名称的软件处于某个目标状态,present(installed),absent。
name:指定软件包的名字。
provider:rpm、yum,msi。
source:指定软件包的位置。
package {"mysql":
ensure => installed,
provider => "msi",
source => "D:\software\mysql-5.6.32.msi",
}
练习:在某主机上安装mysql的服务。
package {"mysql-server":
ensure => installed,
}
service:
ensure:确保服务处于哪种目标状态,stoped、running,true、false。
enable:定义服务是否开机自启动,true、false。
name:定义服务的名字。
service {"mysqld":
ensure => running,
enable => true,
}
exec:
command:定义要执行的命令。
path:对应命令所在的目录,多个路径间已冒号分隔。
/bin:/sbin
user:以哪个用户的身份去执行。
group:以指定的组的身份去执行命令。
练习:在/tmp目录下创建一个文件,文件的名字为hello,并且以test_user的身份和test_user组的身份去执行。
cron:定义计划任务。
ensure:确保计划任务是否启动,present、absent。
command:定义计划任务中要执行的命令或脚本。
environment:定义命令查找的目录。
minute:
hour:
monthday:1-31
month:定义月份。
weekday:定义周几。
user:定义计划任务以哪个用户的身份去执行。
name:为计划任务命名。
cron {"ntpd":
ensure =>present,
command =>"ntpdate 192.168.1.250 &> /dev/null"
environment =>"PATH=/bin:/sbin:/usr/bin:/usr/sbin",
hour =>['6-18/2'],
}
notify:定义通知。
message:定义通知的内容。
nofity {"notice":
message => "text change",
}
安装httpd的软件包并启动httpd的服务。
require:依赖于。
before:定义当前的资源在另一个资源之前执行。
package {"httpd":
ensure => installed,
}
service {"httpd":
ensure => running,
enable => true,
require => Package['httpd'],
}
类:
class mysqld {
package {"httpd":
ensure => installed,
}
service {"httpd":
ensure => running,
enable => true,
require => Package['httpd'],
}
}
基类:父类,所有子类的父类。
定义模块:
1、创建模块所需的目录。
# cd /etc/puppet/modules
# mkdir httpd/{manifests,files,lib} -pv
2、创建功能模块的基类。
# cd httpd/manifests
# vim init.pp
class httpd {
package {"httpd":
ensure => present,
}
}
3、调用模块。
# puppet apply -v -d -e "include httpd"
puppet_master:
1、创建基类以及要使用的子类。
# cd /etc/puppet/modules
# mkdir nginx/{manifests,files,lib} -pv
# cd nginx/manifests
# vim init.pp
class nginx {
package {"nginx":
ensure => installed,
}
}
# vim web.pp
class nginx::web inherits nginx {
file {"nginx":
ensure => present,
source => "puppet:///modules/nginx/nginx_web.conf",
force => true,
path => "/etc/nginx/nginx.conf",
}
service {"nginx":
ensure => running,
enable => true,
require => File['nginx'],
}
}
# cp /tmp/nginx_web.conf /etc/puppet/modules/nginx/files/
2、定义节点文件。
# cd /etc/puppet/manifests
# vim client.example.com.pp
node 'client.example.com' {
include nginx::web
}
# vim site.pp
import "client.example.com.pp"
3、创建证书文件并启动puppetmaster服务。
# puppet master --genconfig >> /etc/puppet/puppet.conf
# puppet master --no-daemonize -v -d (让它运行在前台,完成后直接ctrl+c退出)
# service puppetmaster start
puppet_agent:
1、测试连接服务器端主机。
# puppet agent --server server.example.com --noop --test -v -d
puppet_master:
1、为agent端签署证书。
# puppet cert list
# puppet cert sign client.example.com
2、查看当前主机上有哪些已签署的证书。
# puppet cert --list --all
puppet_agent:
1、编辑配置文件,指定master的主机名。
# vim /etc/puppet/puppet.conf
[main]
server = server.example.com
[agent]
listen = true
# vim /etc/puppet/auth.conf
allow *
2、启动agent端的服务。
# service puppet start
主动推送:
# puppet kick -d --host client.example.com
这篇关于puppet概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!