puppet ENC 配置說明

2021-09-20 19:19:26 字數 3873 閱讀 7755

節點分類(node classification)

生成catalog的第一步是必須找到agent節點的配置裡使用了哪些class和resource。這個過程稱為節點分類(node classification)。

預設的方式使用site.pp中的靜態配置,其預設路徑是/etc/puppet/manifests/. 如果environment被設定了,請檢視enviornment相關設定來確定site.pp位置

node 'web01' , 'web02' , 'web03' 

include apache                             #節點中宣告的class

}

另一種方式是使用enc(external node classifier)。這種方式提供乙個外部的資料來源來儲存節點定義,例如puppetdashboard,the foremanandpuppetenterprise。同時,它會提供乙個程式。master可以呼叫這個程式並輸入節點fqdn名作為引數,然後這個程式會返回乙個yaml格式的檔案,其中包含節點需要使用的class和resource。這個程式可以是由任何語言編寫。

使用這個功能,需要在master的puppet.conf裡進行配置

[master]

node_terminus = exec                                        #使用enc

external_nodes = /etc/puppet/node.rb               #外部程式路徑。

puppet master接收到乙個node的請求的時候,如果 node_terminus 配置為exec,將輸出node的fqdn給external_nodes

puppet 有兩種將節點資訊儲存在外部的方法:

1.使用外部節點分類器 (enc)

2.使用ldap伺服器分類

主要學習使用enc(外部節點分類器)。enc是一種提供puppet 查詢節點資料的基於指令碼(shell、ruby、perl等)整合系統,這個指令碼返回類、繼承、變數和環境設定,puppet可用來定義乙個節點和配置主機。

ldap:是允許你查詢ldap(輕型目錄訪問協議)的目錄來獲取節點的資訊。這種整合方式用得沒有enc那麼多。列如你的資產管理資料庫或者乙個ldap的dns後端來提供節點資料

使用外部節點,無論是通過enc還是ldap,都是在大規模主機中擴充套件puppet實現的推薦方式。

使用enc的根本原因之一是在於我們的nodes全部定義在/etc/puppet/manifests/site.pp檔案中,如果我們有太多的nodes的話,會使site.pp檔案變得很大!

一般的操作都是在/etc/puppet/manifests/ 目錄下根據每個node的定義不同,建立多個nodes檔案,之後在site.pp中import所有的nodes定義檔案

import 『nodes*.pp』

這樣就包含了所有的node,但是隨著你node的增多,你需要手工管理太多的檔案

要使用enc,首先需要更改master的配置檔案:

cd /etc/puppet/

[root@mobim-kvm puppet]# vi puppet.conf

######檔案最後面追加##

[master]

node_terminus = exec

external_nodes = /etc/puppet/puppet_node_classifer.pl

需要重啟puppetmaster 服務

[root@mobim-kvm puppet]# service puppetmaster restart

停止 puppetmaster:                                        [確定]

啟動 puppetmaster:                                        [確定]

修改這個配置設定,就是說:

1. puppet master接收到乙個node的請求的時候,如果 node_terminus 配置為exec,將輸出node的fqdn給external_nodes

2.external_nodes接收到agent的主機名,並將主機名傳遞給/etc/puppet/puppet_node_classifer.pl

指令碼的配置:

[root@mobim-kvm puppet]# cat puppet_node_classifer.pl

#!/usr/bin/perl -w

use strict;

use yaml qw(dump);

my $hostname = shift || die "no hostname passed";

$hostname =~ /^([\w-]+)\_vm(\d[0-9]?)/i or die "invalid hostname :$hostname";

my @classes = ('rsync','rsync_svn_up');

my %parameters = (

puppetserver => "mobim-kvm"

);print dump();

[root@mobim-kvm puppet]# perl puppet_node_classifer.pl  mobim_vm1

---classes:

- rsync

- rsync_svn_up

parameters:

puppetserver: mobim-kvm

這個是乙個yaml的格式,相當於

node   mobim_vm1

rsync rsync_svn_up 是定義的類

以上的配置檔案的修改和指令碼都是在master上進行的,在client上請求master進行資料同步

[root@mobim_vm1 /]# puppet agent --server=mobim-kvm --test -v

info: caching catalog for mobim_vm1

notice: /stage[main]/rsync_svn_up/file[svn_up_file]/ensure: defined content as '4221d002ceb5d3c9e9137e495ceaa647'

info: /stage[main]/rsync_svn_up/file[svn_up_file]: scheduling refresh of exec[echo file]

notice: /stage[main]/rsync_svn_up/exec[echo file]: triggered 'refresh' from 1 events

notice: finished catalog run in 0.60 second

ok,一切正常的,這個是簡單的enc的應用例項,

error  

err: could not retrieve catalog from remote server: error 400 on server: could not find class svn for mobim_vm1 on node mobim_vm1

warning: not using cache on failed catalog

err: could not retrieve catalog; skipping run

配置好enc時,有遇到上面的error資訊,提示我在master上找不到node ssl證書

解決辦法:

給指令碼附加可執行的許可權

chmod -r 775 /etc/puppet/puppet_node_classifer.pl

參考:

記Puppet ENC 簡單學習筆記

puppet 有兩種將節點資訊儲存在外部的方法 1.使用外部節點分類器 enc 2.使用ldap伺服器分類 主要學習使用enc 外部節點分類器 enc是一種提供puppet 查詢節點資料的基於指令碼 shell ruby perl等 整合系統,這個指令碼返回類 繼承 變數和環境設定,puppet可用...

karrigell配置說明

配置 配置被定義為三種級別 python karrigell.py serverconfigdirectory 預設情況,這個目錄就在karrigell.py所在的目錄 3.主機配置指令碼 定義在每個主機的data目錄下的conf.py中 對於本地主機,它在data www中 每乙個主機都可以通過指...

conky 配置說明

首先,conky的配置檔案分為兩個部分,第一部分對conky的全域性屬性做設定,比如字型 嵌入桌面等等 第二部分是定義conky的輸出格式,也就是conky呈現在桌面上的樣式。在全域性屬性的部分,重要的引數有 1 background no 是否嵌入桌面,no 表示不嵌入 yes 表示嵌入。2 ou...