自动化运维工具—puppet详解_puppet自动化运维(1),2024年最新你会的还只有初级Linux运维工程师的技术吗

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
img

正文

  1. 相似的资源被抽象成同一种资源**“类型”** ,如程序包资源、用户资源及服务资源等;
  2. 将资源属性或状态的描述与其实现方式剥离开来,如仅说明安装一个程序包而不用关心其具体是通过yum、pkgadd、ports或是其它方式实现;
  3. 仅描述资源的目标状态,也即期望其实现的结果,而不是其具体过程,如“确定nginx 运行起来” 而不是具体描述为“运行nginx命令将其启动起来”;

这三个也被称作puppet 的资源抽象层(RAL)
  RAL 由type( 类型) 和provider( 提供者,即不同OS 上的特定实现)组成。

2)资源定义

资源定义通过向资源类型的属性赋值来实现,可称为资源类型实例化;
  定义了资源实例的文件即清单,manifest;
  定义资源的语法如下:

type {'title':
	attribute1 	=> value1,
	atrribute2	=> value2,
	……
}


注意:type必须使用小写字符;title是一个字符串,在同一类型中必须惟一;每一个属性之间需要用“,”隔开,最后一个“,”可省略。
  例如,可以同时有名为nginx 的“service”资源和“package”资源,但在“package” 类型的资源中只能有一个名为“nginx”的资源。

3)资源属性中的三个特殊属性:
  • Namevar:可简称为name;
  • ensure:资源的目标状态;
  • Provider:指明资源的管理接口;
3、常用资源总结

1)查看资源
  我们可以使用puppet describe来打印有关Puppet资源类型,提供者和元参数的帮助。使用语法如下:

puppet describe [-h|--help] [-s|--short] [-p|--providers] [-l|--list] [-m|--meta] [type]
	-l:列出所有资源类型;
	-s:显示指定类型的简要帮助信息;
	-m:显示指定类型的元参数,一般与-s一同使用;


2)group:管理系统上的用户组。
  查看使用帮助信息:

enter description here

group使用帮助

属性:
	name:组名,可以省略,如果省略,将继承title的值;
	gid:GID;
	system:是否为系统组,true OR false;
	ensure:目标状态,present/absent;
	members:成员用户;


简单举例如下:

vim group.pp
	group{'mygrp':
        name => 'mygrp',
        ensure => present,
        gid => 2000,
	}


我们可以来运行一下:

enter description here

运行写好的group资源

3)user:管理系统上的用户。
  查看使用帮助信息:

enter description here

user使用帮助

属性:
	name:用户名,可以省略,如果省略,将继承title的值;
	uid: UID;
	gid:基本组ID;
	groups:附加组,不能包含基本组;
	comment:注释; 
	expiry:过期时间 ;
	home:用户的家目录; 
	shell:默认shell类型;
	system:是否为系统用户 ;
	ensure:present/absent;
	password:加密后的密码串; 


简单举例如下:

vim user1.pp
	user{'keerr':
        ensure => present,
        system => false,
        comment => 'Test User',
        shell => '/bin/tcsh',
        home => '/data/keerr',
        managehome => true,
        groups => 'mygrp',
        uid => 3000,
	}


4)package:puppet的管理软件包。
  查看使用帮助信息:

enter description here

package使用帮助

属性:
	ensure:installed, present, latest, absent, any version string (implies present)
	name:包名,可以省略,如果省略,将继承title的值;
	source:程序包来源,仅对不会自动下载相关程序包的provider有用,例如rpm或dpkg;
	provider:指明安装方式;


简单举例如下:

vim package1.pp
	package{'nginx':
   		ensure  => installed,
    	procider    =>  yum
	}	


5)service:定义服务的状态
  查看使用帮助信息:

puppet describe service -s -m


enter description here

service使用帮助

属性:
	ensure:服务的目标状态,值有true(running)和false(stopped) 
	enable:是否开机自动启动,值有true和false
	name:服务名称,可以省略,如果省略,将继承title的值
	path:服务脚本路径,默认为/etc/init.d/下
	start:定制启动命令
	stop:定制关闭命令
	restart:定制重启命令
	status:定制状态


简单举例如下:

vim service1.pp
	service{'nginx':
  	  	ensure  => true,
    	enable  => false
	}


6)file:管理文件、目录、软链接
  查看使用帮助信息:

enter description here

file使用帮助

属性:
	ensure:目标状态,值有absent,present,file,directory和link
		file:类型为普通文件,其内容由content属性生成或复制由source属性指向的文件路径来创建;
		link:类型为符号链接文件,必须由target属性指明其链接的目标文件;
		directory:类型为目录,可通过source指向的路径复制生成,recurse属性指明是否递归复制;
	path:文件路径;
	source:源文件;
	content:文件内容;
	target:符号链接的目标文件; 
	owner:定义文件的属主;
	group:定义文件的属组;
	mode:定义文件的权限;
	atime/ctime/mtime:时间戳;


简单举例如下:

vim file1.pp
	file{'aaa':
   	 	path    => '/data/aaa',
    	source  => '/etc/aaa',
    	owner   => 'keerr',
    	mode    => '611',
	}


7)exec:执行命令,慎用。通常用来执行外部命令
  查看使用帮助信息:

puppet describe exec -s -m


enter description here

exec使用帮助

属性:
	command(namevar):要运行的命令;
	cwd:指定运行该命令的目录;
	creates:文件路径,仅此路径表示的文件不存在时,command方才执行;
	user/group:运行命令的用户身份;
	path:指定命令执行的搜索路径;
	onlyif:此属性指定一个命令,此命令正常(退出码为0)运行时,当前command才会运行;
	unless:此属性指定一个命令,此命令非正常(退出码为非0)运行时,当前command才会运行;
	refresh:重新执行当前command的替代命令;
	refreshonly:仅接收到订阅的资源的通知时方才运行;


简单举例如下:

vim exec1.pp
	exec{'cmd':
   	 	command => 'mkdir /data/testdir',
    	path => ['/bin','/sbin','/usr/bin','/usr/sbin'],
	#   path => '/bin:/sbin:/usr/bin:/usr/sbin',
	}


8)cron:定义周期性任务
  查看使用帮助信息:

enter description here

cron使用帮助

属性:
	command:要执行的任务(命令或脚本);
	ensure:目标状态,present/absent;
	hour:时;
	minute:分;
	monthday:日;
	month:月;
	weekday:周;
	user:以哪个用户的身份运行命令(默认为root);
	target:添加为哪个用户的任务;
	name:cron job的名称;


简单举例如下:

vim cron1.pp
	cron{'timesync':
    	command => '/usr/sbin/ntpdata 172.16.0.1',
    	ensure  => present,
    	minute  => '*/3',
    	user    => 'root',
	}


我们可以运行一下,查看我们的crontab,来看看该任务是否已经被添加:

[root@master manifests]# puppet apply -v --noop cron1.pp 		#试运行
[root@master manifests]# puppet apply -v  cron1.pp 				#运行
[root@master manifests]# crontab -l				#查看计划任务
# HEADER: This file was autogenerated at 2017-12-14 15:05:05 +0800 by puppet.
# HEADER: While it can still be managed manually, it is definitely not recommended.
# HEADER: Note particularly that the comments starting with 'Puppet Name' should
# HEADER: not be deleted, as doing so could cause duplicate cron jobs.
# Puppet Name: timesync
*/3 * * * * /usr/sbin/ntpdata 172.16.0.1


9)notify:调试输出
  查看使用帮助信息:

enter description here

属性:
	message:记录的信息
	name:信息名称


该选项一般用于master/agent模式中,来记录一些操作的时间,比如重新安装了一个程序呀,或者重启了应用等等。会直接输出到代理机的运行日志中。


以上,就是我们常见的8个资源。其余的资源我们可以使用puppet describe -l来列出,上文中也已经说过了~

4、资源的特殊属性

puppet中也提供了beforerequirenotifysubscribe四个参数来定义资源之间的依赖关系和通知关系。

before:表示需要依赖于某个资源
require:表示应该先执行本资源,在执行别的资源
notify:A notify B:B依赖于A,且A发生改变后会通知B;
subscribe:B subscribe A:B依赖于A,且B监控A资源的变化产生的事件;

同时,依赖关系还可以使用->~>来表示:

-> 表示后资源需要依赖前资源
~> 表示前资源变动通知后资源调用

举例如下:

vim file.pp
	file{'test.txt':					#定义一个文件
		path   => '/data/test.txt',
		ensure  => file,
		source  => '/etc/fstab',
	}

	file{'test.symlink':				#依赖文件建立超链接
		path   => '/data/test.symlink',
		ensure  => link,
		target  => '/data/test.txt',
		require => File['test.txt'],
	}

	file{'test.dir':					#定义一个目录
		path   => '/data/test.dir',
		ensure  => directory,
		source  => '/etc/yum.repo.d/',
		recurse => true,
	}


我们还可以使用在最下面统一写依赖关系的方式来定义:

vim redis.pp
	package{'reids':
		ensure  => installed,
	}

	file{'/etc/redis.conf':
		source  => '/root/manifets/files/redis.conf',
		ensure  => file,
		owner   => redis,
		group   => root,
		mode    => '0640',
	}

	service{'redis':
		ensure  => running,
		enable  => true,
		hasrestart => true,
	}

	Package['redis'] -> File['/etc/redis.conf'] -> Service['redis']	#定义依赖关系


tag 标签

如同 anssible 一样,puppet 也可以定义“标签”——tag,打了标签以后,我们在运行资源的时候就可以只运行某个打过标签的部分,而非全部。这样就更方便于我们的操作。
 一个资源中,可以有一个tag也可以有多个。具体使用语法如下:

type{'title':
	...
    tag => 'TAG1',
}

type{'title':
    ...
    tag => ['TAG1','TAG2',...],
}


调用时的语法如下:

	puppet apply --tags TAG1,TAG2,... FILE.PP


实例
  首先,我们去修改一下redis.pp文件,添加一个标签进去

vim redis.pp
	package{'redis':
		ensure  => installed,
	}

	file{'/etc/redis.conf':
		source  => '/root/manifets/file/redis.conf',
		ensure  => file,
		owner   => redis,
		group   => root,
		mode    => '0640',
		tag    => 'instconf'		#定义标签
	}

	service{'redis':
		ensure  => running,
		enable  => true,
		hasrestart => true,
	}

	Package['redis'] -> File['/etc/redis.conf'] -> Service['redis']


然后,我们手动先开启redis服务:

	systemctl start redis


现在,我们去修改一下file目录下的配置文件:

vim file/redis.conf 
	requirepass keerya


接着,我们就去运行redis.pp,我们的配置文件已经修改过了,现在想要实现的就是重启该服务,实现,需要使用密码keer登录:

	puppet apply -v --tags instconf redis.pp


enter description here

redis.pp运行结果

现在,我们就去登录一下redis看看是否生效:

	redis-cli -a keerya


enter description here

redis验证

验证成功,实验完成。

5、puppet 变量

puppet 变量以“

=

”开头,赋值操作符为“=”,语法为`

”开头,赋值操作符为“=”,语法为‘variable_name=value`。
数据类型:

字符型:引号可有可无;但单引号为强引用双引号为弱引用;支持转义符;
  数值型:默认均识别为字符串,仅在数值上下文才以数值对待;
  数组:[]中以逗号分隔元素列表;
  布尔型值:true, false;不能加引号;
  hash:{}中以逗号分隔k/v数据列表; 键为字符型,值为任意puppet支持的类型;{ ‘mon’ => ‘Monday’, ‘tue’ => ‘Tuesday’, };
  undef:从未被声明的变量的值类型;

正则表达式:

(?😃
  (?-😃
  OPTIONS:
    i:忽略字符大小写;
    m:把.当换行符;
    x:忽略中的空白字符;
  (?i-mx:PATTERN)
注意:不能赋值给变量,仅能用在接受=~!~操作符的位置;

1)puppet的变量种类

puppet 种类有三种,为facts内建变量用户自定义变量
facts:
  由facter提供;top scope;
内建变量:
  master端变量
    $servername, $serverip,

s

e

r

v

e

r

v

e

r

s

i

o

n

a

g

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
内建变量用户自定义变量`。
facts:
  由facter提供;top scope;
内建变量:
  master端变量
    $servername, $serverip,

s

e

r

v

e

r

v

e

r

s

i

o

n

a

g

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

[外链图片转存中…(img-Ah9iP13K-1713647875506)]

给大家整理的电子书资料:

[外链图片转存中…(img-o3D44XRK-1713647875506)]

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
[外链图片转存中…(img-0Gs0Ckvu-1713647875507)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值