Role and Profile pattern 的管理方式

一開始用 Puppet 的時候就是把每個 nodemanifests 像流水帳一樣寫完,但當 node 數量一多就會發現一直在寫重複的 Puppet code,當要大量修改所有 node 的某項參數或設定的時候,你就會開始吐血 ...

那麼先來看看針對不同情境下要怎麼處理。

少於 20 台 Node 的情況

在量少的狀況下會直接把 resource 寫在 node,像這樣

node default {
  service { 'ntp':
    ensure => present
  }
  ...
}

node 'example.com' {
  service { 'apache2':
    ensure => present
  }
  ...
}

模組入場 - Resource 開始重複性高的情況下

重複的 Resource 寫多了就會覺得很腦殘,一直在做重複的事情,這時候模組化就派上用場了。

node default {
  include ntp
}

node 'example.com' {
  include ntp
  include apache2
}

Role and Profile - 20 台以上 Node 且複雜性高的時候

環境開始複雜而且不好管理的時候 Role and Profile 就可以進場了。

所以 Puppet 就提出了 Role and Profile pattern 的管理方式,利於可重用可重構可修改的概念

roles-and-profiles-overview

Role and Profile 有幾個要點:

  • 使用大量 Normal module。
  • Profile 由很多 Normal module 組成。
  • Role 由很多 Profile module 組成。
  • 一個 node 只擁有一個 Role

直接看範例。

Profile example

class profile::base {
  include ntp
}

class profile::user {
  include users
}

class profile::apache2 {
  class { 'apache':
    apache_version = '2.4',
  }
}

class profile::apache2::php {
  include profile::apache2
  include php
}

Role example

class role::webserver {
  include profile::base
  include profile::user
  include profile::apache2::php
}

class role::base {
  include profile::base
  include profile::user
}

Node example

node default {
  include role::base
}

node site {
  include role::webserver
}

當我有多個 node,就可以重複使用 role 直接 include 想要的設定,你只需要一行就能做到可重用

當你要修改一個使用者的密碼,你只需要動 profile::user,而有 include profile::userRole 都會跟著動來達到可重構

然後再搭配 Hiera 來針對不同的情況給予參數來做到可修改

results matching ""

    No results matching ""