이전에는 시스템 관리자가 셸 스크립트를 사용하여 서버를 실행했지만이 방법은 확장 성이 전혀 없었습니다. 끊임없이 변화하는 수백 또는 수천 개의 서버 및 해당 시스템 구성에 대한 스크립트를 지속적으로 수정하는 것은 어려운 작업입니다.
이 기사에서 꼭두각시 모듈 및 매니페스트 서버 설정, 프로그램 설치 및 시스템 관리를 자동화하기 위해 puppet 모듈을 사용하는 방법을 살펴 보겠습니다.
이 블로그는 다음 주제를 다룹니다.
Puppet 프로그래밍 소개
인형 구성 관리에 널리 사용되는 널리 사용되는 DevOps 도구 중 하나입니다. 그것은 가져 오는 데 사용됩니다 일관성 인프라에서. Puppet은 인프라를 코드로 정의하고, 여러 서버를 관리하고, 시스템 구성을 적용하여 인프라 관리 프로세스를 자동화 할 수 있습니다.
꼭두각시에는자체 구성 언어, 꼭두각시 DSL
. 다른 DevOps 프로그램과 마찬가지로 Puppet 변경을 자동화하여 수동 스크립트 기반 변경을 제거합니다.. 그러나 Puppet은 단순한 쉘 언어가 아니며 PHP와 같은 순수한 프로그래밍 언어도 아닙니다. 대신 Puppet은...에 선언적 모델 기반 접근 방식 IT 자동화에. 이를 통해 Puppet은 인프라를 코드로 정의하고 프로그램으로 시스템 구성을 적용 할 수 있습니다.
데모를 시작하기 전에 꼭두각시 프로그래밍의 몇 가지 핵심 측면을 살펴 보겠습니다.
Puppet 프로그래밍의 주요 용어
매니페스트
꼭두각시 프로그램이 호출됩니다. 명백한 및 파일 이름이 .pp 신장. Puppet의 기본 기본 매니페스트는 /etc/puppet/manifests/site.pp
. (이것은LDAP 구성, DNS 서버 또는 모든 노드에 적용되는 기타 구성과 같은 글로벌 시스템 구성.
클래스
이러한 매니페스트 내에는 클래스 다른 모듈이 호출 할 수 있습니다. 클래스는 애플리케이션을 실행하는 데 필요한 모든 패키지, 구성 파일 및 서비스와 같은 대규모 또는 중간 크기의 기능 청크를 구성합니다. 클래스를 사용하면 Puppet 코드를 더 쉽게 재사용하고 가독성을 높일 수 있습니다.
자원
Puppet 코드는 대부분 리소스 선언으로 구성됩니다. ㅏ 자원 시스템의 원하는 상태에 대한 특정 요소를 설명합니다. 예를 들어, 특정 파일이 존재하거나 패키지가 설치되어야 함을 포함 할 수 있습니다.
인스턴스 자바는 무엇입니까
Puppet 모듈
메인을 제외하고site.pp
명백한,그것은 매니페스트를 저장합니다에 모듈 .
모든 Puppet 코드는 재사용 및 공유 할 수있는 꼭두각시의 기본 구성 요소 인 모듈로 구성됩니다. 각 모듈은 소프트웨어 설치 및 구성과 같은 인프라의 특정 작업을 관리합니다.
모듈에는 Puppet 클래스, 정의 된 유형, 작업, 작업 계획, 용량, 리소스 유형 및 플러그인 (예 : 사용자 정의 유형 또는 팩트)이 포함됩니다. Puppet에 모듈 설치모듈 경로. Puppet은 모듈 경로의 모든 모듈에서 모든 콘텐츠를로드하여이 코드를 사용할 수 있도록합니다.
Puppetlabs에는 다음에서 다운로드하여 즉시 사용할 수있는 사전 정의 된 모듈이 있습니다. 퍼펫 포지
. 요구 사항에 맞게 사용자 지정 퍼펫 모듈을 만들 수도 있습니다.
퍼펫 프로그램 워크 플로우
Puppet의 선언적 언어를 사용하여 매니페스트라는 파일에서 원하는 시스템 상태를 설명합니다. 매니페스트는 파일, 패키지 및 서비스와 같은 네트워크 및 운영 체제 리소스를 구성하는 방법을 설명합니다.
Puppet은 매니페스트를 다음으로 컴파일합니다. 카탈로그 각 카탈로그를 해당 노드에 적용하여 t의 구성이그는 노드가 정확합니다인프라 전반에 걸쳐.
데모: Apache 및 MySQL 설치 자동화
꼭두각시 모듈에 대한이 기사는 꼭두각시 모듈을 사용하는 두 가지 방법을 보여주고 방법을 가르쳐주는 실습입니다. 자동화하다 이 두 모듈로 구성된 서버의 설치.
우선, puppet 마스터 서버와 2 개의 puppet 에이전트를 포함하는 Puppet 인프라가 준비되어 있는지 확인하십시오.
- Puppet Master : Ubuntu 18.04
- 에이전트 1 : Ubuntu 18.04
- 에이전트 2 :CentOS7
이 실습에서 얻을 수있는 작업의 개요는 다음과 같습니다.
실습부터 시작하겠습니다.
처음부터 모듈 만들기
이 puppet 모듈에서는 Apache 패키지 다운로드, 파일 구성 및 가상 호스트 설정과 같은 작업을 다룹니다.
- Puppet Master에서 Puppet의 모듈 디렉토리로 이동하여 Apache 디렉토리를 만듭니다.
cd / etc / puppet / modules sudo mkdir 아파치
- apache 디렉터리 내부에서 매니페스트, 템플릿, 파일 및 예제와 같은 하위 디렉터리를 만듭니다.
cd apache sudo mkdir {manifests, templates, files, examples}
- 매니페스트 디렉터리로 이동합니다.
cd 매니페스트
- 여기에서 해당 코드 섹션의 목표에 따라 모듈을 클래스로 분리합니다.
init.pp -> Apache 패키지 다운로드
params.pp -> 변수 및 매개 변수 정의
config.pp -> Apache 서비스에 대한 구성 파일을 관리합니다.
vhosts.pp -> 가상 호스트를 정의합니다.
이 모듈은 또한 히 에라 (Puppet 코드) 데이터에서 데이터를 분리하는 데 사용되는 기본 제공 키-값 구성 데이터 조회 시스템 각 노드에 대한 변수를 저장합니다.
1 단계 : Apache 패키지 다운로드
init.pp 클래스 만들기
이제 우리는init.pp
아파치 패키지를 보관할 매니페스트 디렉토리 아래의 파일.
Apache에 서로 다른 패키지 이름을 사용하는 두 가지 OS (ubuntu 및 CentOS7)가 있으므로 변수를 사용해야합니다.$ apachename
.
/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp
class apache {package { 'apache': name => $ apachename, ensure => present,}}
꾸러미 리소스는 패키지 관리를 허용합니다. 패키지를 추가, 제거 또는 확인하는 데 사용됩니다.
대부분의 경우 이름 자원 (아파치, 위)는 관리되는 패키지의 이름이어야합니다. 이름 지정 규칙이 다르기 때문에패키지의 실제 이름을와 함께 이름 참고. 그래서 이름 , 아직 정의되지 않은 변수를 호출합니다.$ apachename
.
안전하게 하다 참조는 패키지가선물.
params.pp 파일 만들기
그만큼params.pp
파일은 필요한 변수를 정의합니다. 이러한 변수를init.pp
더 많은 변수를 리소스 유형 자체 외부에서 사용해야하므로params.pp
파일에서 변수를 정의 할 수 있습니다.만약여러 클래스에서 사용됩니다.
만들기params.pp
파일과 다음 코드.
/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp
class apache :: params {if $ :: osfamily == 'RedHat'{$ apachename = 'httpd'} elsif $ :: osfamily == 'Debian'{$ apachename = 'apache2'} else {fail ( '아닙니다. 지원되는 배포판. ')}}
원본 외부 init.pp
클래스, 각 클래스 이름은아파치. 이 클래스를 apache :: params . 이중 콜론 뒤의 이름은 파일과 이름을 공유해야합니다. 안만약문은 매개 변수를 정의하는 데 사용되며 인자 , Puppet에는 설치 자체의 일부로 팩터 설치가 있습니다. 여기서 Facter는 운영 체제 제품군 (Osfamily), 그것이 있는지 식별하기 위해빨간 모자
또는데비안 기반.
마지막으로 정의 된 매개 변수를 사용하여 params.pp
파일과 매개 변수를init.pp
. 이렇게하려면 클래스 이름 뒤, 여는 중괄호 앞에 매개 변수를 추가해야합니다.({).
그래서init.pp
이전에 생성 한 내용은 다음과 같습니다.
class apache ($ apachename = $ :: apache :: params :: apachename,) 상속 :: apache :: params {package { 'apache': name => $ apachename, ensure => present,}}
값 문자열 $ :: apache :: params :: value
Puppet에게 아파치 모듈, 매개 변수 클래스 뒤에 매개 변수 이름이옵니다. 조각 상속 :: apache :: params
허용init.pp
이러한 값을 상속합니다.
2 단계 : 구성 파일 관리
Apache 구성 파일은 Red Hat 기반 시스템에서 작업하는지 Debian 기반 시스템에서 작업하는지에 따라 다릅니다.
이 데모의 끝에서 다음 종속성 파일을 찾을 수 있습니다.httpd.conf
(빨간 모자),apache2.conf
(데비안).
- 내용 복사
httpd.conf
과apache2.conf
별도의 파일로 저장하고 파일 예배 규칙서...에서/ etc / puppetlabs / code / environments / production / modules / apache / files
.
- 두 파일을 모두 편집 비활성화 살아 유지. 줄을 추가해야합니다. KeepAlive 끄기 에
httpd.conf
파일. 이 설정을 변경하지 않으려면 각 상단에 주석을 추가해야합니다.파일:
/etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
#이 파일은 꼭두각시로 관리됩니다.
이 파일을init.pp
따라서 Puppet은 마스터 서버 및 에이전트 노드 모두에서 이러한 파일의 위치를 인식합니다. 이를 위해 우리는 파일 자원.
/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp
file { 'configuration-file': path => $ conffile, ensure => file, source => $ confsource,}
두 개의 다른 위치에 구성 파일이 있으므로 리소스에 일반 이름을 지정합니다. 구성 파일 파일과 함께 통로 매개 변수로 정의통로속성.
안전하게 하다 파일인지 확인합니다.
출처 위에서 만든 파일의 Puppet 마스터 위치를 제공합니다.
열기params.pp
파일.
우리는 $ conffile
과 $ confsource
내 변수만약성명서:
/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp
if $ :: osfamily == 'RedHat'{... $ conffile = '/etc/httpd/conf/httpd.conf'$ confsource = 'puppet : ///modules/apache/httpd.conf'} elsif $ : : osfamily == '데비안'{... $ conffile = '/etc/apache2/apache2.conf'$ confsource = 'puppet : ///modules/apache/apache2.conf'} else {...
시작 부분에 매개 변수를 추가해야합니다.아파치클래스 선언init.pp
이전 예제와 유사합니다.
구성 파일이 변경되면 Apache를 다시 시작해야합니다. 이를 자동화하기 위해 서비스 리소스를 사용할 수 있습니다.와 함께 알리다 속성, 구성 파일이 변경 될 때마다 실행할 리소스를 호출합니다.
/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp
file { 'configuration-file': path => $ conffile, ensure => file, source => $ confsource, notify => Service [ 'apache-service'],} service { 'apache-service': name => $ 아파치 이름, hasrestart => true,}
서비스 리소스는 Red Hat 및 Debian 시스템에서 Apache 이름을 정의한 이미 생성 된 매개 변수를 사용합니다.
hasrestart 속성은 정의 된 서비스의 재시작을 트리거하는 데 사용됩니다.
3 단계 : 가상 호스트 파일 만들기
시스템 배포에 따라 가상 호스트의 파일이 다르게 관리됩니다. 이 때문에 가상 호스트에 대한 코드를만약문에서 사용 된 것과 유사한params.pp
클래스이지만 실제 Puppet 리소스를 포함합니다.
자바 스크립트를 사용하여 HTML의 진행률 표시 줄
- 내부에서아파치 / 매니페스트 /디렉토리, 생성 및 열기
vhosts.pp
파일. 뼈대를 추가하십시오만약성명서:
/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp
class apache :: vhosts {if $ :: osfamily == 'RedHat'{} elsif $ :: osfamily == 'Debian'{} else {}}
CentOS 7 서버에서 가상 호스트 파일의 위치는 다음과 같습니다./etc/httpd/conf.d/vhost.conf
.
Puppet 마스터에서 파일을 템플릿으로 만들어야합니다. Ubuntu 가상 호스트 파일에 대해 동일한 작업을 수행하십시오./etc/apache2/sites-available/example.com.conf
, 교체example.com서버의 FQDN으로
- 다음으로 이동 템플릿 내 파일 아파치 모듈을 선택한 다음 가상 호스트에 대한 두 개의 파일을 만듭니다.
Red Hat 시스템의 경우 :
/etc/puppetlabs/code/environments/production/modules/apache/templates/vhosts-rh.conf.erb
ServerAdmin ServerName ServerAlias www. DocumentRoot / var / www // public_html / ErrorLog /var/www//logs/error.log CustomLog /var/www//logs/access.log 결합
Debian 시스템의 경우 :
/etc/puppet/modules/apache/templates/vhosts-deb.conf.erb
ServerAdmin ServerName ServerAlias www. DocumentRoot / var / www / html // public_html / ErrorLog /var/www/html//logs/error.log CustomLog /var/www/html//logs/access.log 결합모두 허가 필요
이 파일에서는 두 개의 변수 만 사용합니다. 관리자
과 서버 이름
. 우리는 이것들을 노드 단위로 정의 할 것입니다.site.pp
파일.
- 돌아 가기
vhosts.pp
파일. 이제 생성 된 템플릿을 코드에서 참조 할 수 있습니다.
/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp
class apache :: vhosts {if $ :: osfamily == 'RedHat'{file { '/etc/httpd/conf.d/vhost.conf': ensure => file, content => template ( 'apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily =='Debian '{file {'/etc/apache2/sites-available/$servername.conf ': ensure => file, content => template ('apache /vhosts-deb.conf.erb '),}} else {fail ('지원되는 배포판이 아닙니다. ')}}
두 배급 가족 모두파일각 배포에서 가상 호스트 위치의 제목을 가져옵니다. 데비안의 경우 다시 한 번$ servername
값. 그만큼함유량속성은 각 템플릿을 호출합니다..
- 두 가상 호스트 파일 모두 두 개의 디렉토리를 참조합니다. 기본적으로 시스템에 없습니다. 우리는파일리소스, 각각만약성명서. 완전한
vhosts.conf
파일은 다음과 유사해야합니다.
/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp
class apache :: vhosts {if $ :: osfamily == 'RedHat'{file { '/etc/httpd/conf.d/vhost.conf': ensure => file, content => template ( 'apache / vhosts-rh .conf.erb '),} file {['/ var / www / $ servername ','/ var / www / $ servername / public_html ','/ var / www / $ servername / log ',] : ensure => directory,}} elsif $ :: osfamily == 'Debian'{file { '/etc/apache2/sites-available/$servername.conf': ensure => file, content => template ( 'apache / vhosts-deb. conf.erb '),} file {['/ var / www / $ servername ','/ var / www / $ servername / public_html ','/ var / www / $ servername / logs ',] : ensure => 디렉토리 ,}} else {fail ( '지원되는 배포판이 아닙니다.')}}
4 단계 : 모듈 테스트
- 다음으로 이동
아파치 / 매니페스트 /
디렉토리에서 꼭두각시 파서 모든 파일에서 Puppet 코딩에 오류가 없는지 확인합니다.
sudo / opt / puppetlabs / bin / puppet parser validate init.pp params.pp vhosts.pp
아무 문제없이 비어 있어야합니다.
- 다음으로 이동 예 내 디렉토리아파치기준 치수. 만들기
init.pp
파일을 만들고 생성 된 클래스를 포함합니다. 값 바꾸기$ servername
과$ adminemail
자신과 함께 :
/etc/puppetlabs/code/environments/production/modules/apache/examples/init.pp
serveremail = 'webmaster@example.com'$ servername = 'puppet.example.com'include apache include apache :: vhosts
- 실행하여 모듈 테스트 꼭두각시 적용 와 더불어 – 아니 꼬리표:
sudo / opt / puppetlabs / bin / puppet apply --noop init.pp
이벤트에서 새로 고침을 트리거하는 오류 및 출력을 반환하지 않아야합니다. Puppet 마스터에 Apache를 설치하고 구성하려면– 아니, 원하는 경우.
- 기본 Puppet 디렉토리로 다시 이동 한 다음매니페스트폴더 (아니Apache 모듈에있는 것).
cd / etc / puppetlabs / code / environments / production / manifests
만들기site.pp
파일,각 에이전트 노드에 대한 Apache 모듈을 포함합니다. 또한 변수를 입력하십시오.관리자
과 서버 이름
매개 변수. 너의site.pp
다음과 유사해야합니다.
/etc/puppetlabs/code/environments/production/manifests/site.pp
node 'puppet-agent-ubuntu.example.com'{$ adminemail = 'webmaster@example.com'$ servername = 'puppet.example.com'include apache include apache :: vhosts} node 'puppet-agent-centos.example .com '{$ adminemail ='webmaster@example.com '$ servername ='puppet.example.com 'include apache include apache :: vhosts}
기본적으로 관리 노드의 Puppet 에이전트 서비스는 30 분마다 마스터를 자동으로 확인하고 마스터의 새 구성을 적용합니다. 또한 자동 에이전트 실행 사이에 Puppet 에이전트 프로세스를 수동으로 호출 할 수도 있습니다. 에이전트 노드에서 새 모듈을 수동으로 실행하려면 노드에 로그인하고 다음을 실행하십시오.
sudo / opt / puppetlabs / bin / puppet 에이전트 -t
모듈을 처음부터 만드는 방법을 배웠으므로 이제 puppetlabs의 puppet forge에서 기존 모듈을 사용하는 방법을 알아 보겠습니다.
PuppetForge의 모듈 사용
퍼펫 포지 서버에서 실행할 모듈이 이미 많이 있습니다. 생성 한 모듈만큼 광범위하게 구성 할 수 있으며 처음부터 모듈을 생성 할 필요가 없기 때문에 시간을 절약 할 수 있습니다.
당신이에 있는지 확인하십시오 / etc / puppetlabs / code / environments / production / modules
디렉토리 및 설치 Puppet Forge의 MySQL 모듈 PuppetLabs에 의해. 이것은 또한 모든 전제 조건 모듈을 설치합니다.
cd / etc / puppetlabs / code / environments / production / modules
sudo / opt / puppetlabs / bin / puppet module install puppetlabs-mysql
Hiera를 사용하여 데이터베이스 생성
MySQL 모듈에 대한 구성 파일을 생성하기 전에 모든 에이전트 노드에서 동일한 값을 사용하지 않을 수 있다는 점을 고려하십시오. Puppet에 노드 당 올바른 데이터를 제공하기 위해 Hiera를 사용합니다. 노드마다 다른 루트 암호를 사용하여 다른 MySQL 데이터베이스를 만듭니다.
- 로 이동
/ etc / puppet
Hiera의 구성 파일 생성hiera.yaml
메인에인형예배 규칙서. Hiera의 기본값을 사용합니다.
/etc/puppetlabs/code/environments/production/hiera.yaml
--- 버전 : 5 계층 :-이름 : 공통 경로 : common.yaml 기본값 : data_hash : yaml_data datadir : data
- 파일 생성
common.yaml
. 기본값을 정의합니다. 뿌리 MySQL의 비밀번호 :
/etc/puppetlabs/code/environments/production/common.yaml
mysql :: server :: root_password : '비밀번호'
우리는common.yaml
파일변수가 다른 곳에서 정의되지 않은 경우. 이는 모든 서버가 동일한 MySQL 루트 암호를 공유한다는 것을 의미합니다. 이러한 암호는 보안을 강화하기 위해 해시 될 수도 있습니다.
- MySQL 모듈의 기본값을 사용하려면 ‘:: mysql :: server’포함 라인
site.pp
파일. 그러나이 예에서는 모듈의 일부 기본값을 재정 의하여 각 노드에 대한 데이터베이스를 만듭니다.
편집site.pp
다음 값을 가진 파일 :
node 'Puppetagent-ubuntu.example.com'{$ adminemail = 'webmaster@example.com'$ servername = 'hostname.example.com'include apache include apache :: vhosts include mysql :: server mysql :: db { 'mydb_ $ {fqdn} ': 사용자 =>'myuser ', 암호 =>'mypass ', dbname =>'mydb ', 호스트 => $ :: fqdn, grant => ['SELECT ','UPDATE '], 태그 = > $ domain,}} node 'Puppetagent-centos.example.com'{$ adminemail = 'webmaster@example.com'$ servername = 'hostname.example.com'include apache include apache :: vhosts include mysql :: server mysql :: db { 'mydb _ $ {fqdn}': user => 'myuser', password => 'mypass', dbname => 'mydb', host => $ :: fqdn, grant => [ 'SELECT', ' UPDATE '], 태그 => $ domain,}}
Puppet 마스터에서 Puppet 에이전트로 Puppet 모듈 설치 자동화
- 각 노드에 SSH로 연결하고 다음 명령을 실행하여 각 노드에서 이러한 업데이트를 수동으로 실행할 수 있습니다.
sudo / opt / puppetlabs / bin / puppet 에이전트 -t
- 그렇지 않으면 관리 노드의 Puppet 에이전트 서비스가 30 분마다 한 번씩 마스터를 자동으로 확인하고 마스터의 새 구성을 적용합니다.
Ubuntu 에이전트에 카탈로그가 성공적으로 적용되었습니다.
CentOS 에이전트에 카탈로그가 성공적으로 적용되었습니다.
따라서 전체 설치는 자동화 카탈로그를 적용하여 에이전트 노드에서.이 데모에 사용 된 코드 파일 및 종속성을 찾을 수 있습니다. 여기 .
Java 용 Eclipse 설정 방법
이 데모가 꼭두각시 모듈 및 매니페스트와 IT 인프라 자동화를위한 사용법에 대한 명확한 아이디어를 얻는 데 도움이 되었기를 바랍니다.이 경우 작업이 매우 쉬워집니다. Puppet Master에서 구성을 지정하면 Puppet 에이전트가 자동으로 기본 매니페스트를 평가하고 Apache 및 MySQL 설정을 지정하는 모듈을 적용합니다. 궁금한 점이 있으면 언제든지 게시 해주세요. .
이걸 찾았다면 퍼펫 튜토리얼 관련된, 체크 아웃 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 Edureka DevOps 인증 교육 과정은 학습자가 SDLC의 여러 단계를 자동화하기 위해 Puppet, Jenkins, Nagios 및 GIT와 같은 다양한 DevOps 프로세스 및 도구에 대한 전문 지식을 습득하는 데 도움이됩니다.