초보자를 위한 Puppet 튜토리얼: Puppet이란 무엇이며 어떻게 사용하나요?

Puppet을 배우기 전에 다음 사항을 이해해 봅시다.

구성 관리란 무엇입니까?

구성 관리는 소프트웨어 및 컴퓨터 시스템(예: 서버, 스토리지, 네트워크)을 알려지고 바람직하며 일관된 상태로 유지 관리하는 프로세스입니다. 또한 프로젝트 관리 및 감사 목적으로 시스템 상태의 정확한 기록 기록에 액세스할 수 있습니다.

시스템 관리자는 대부분 서버 설치, 서버 구성 등과 같은 반복적인 작업을 수행합니다. 이러한 전문가는 스크립트를 작성하여 이 작업을 자동화할 수 있습니다.

그러나 대규모 인프라 작업을 할 때는 어려운 작업입니다. 이러한 문제를 해결하기 위해 Puppet과 같은 구성 관리 도구가 도입되었습니다.

꼭두각시 란 무엇입니까?

인형 구성 관리 프로세스를 중앙 집중화하고 자동화하기 위한 시스템 관리 도구입니다. Puppet은 소프트웨어 배포 도구로도 사용됩니다. 조직의 전체 인프라에 걸쳐 다양한 애플리케이션과 서비스의 서버 구성, 관리, 배포 및 오케스트레이션에 널리 사용되는 오픈 소스 구성 관리 소프트웨어입니다.

Puppet은 Linux의 구성을 관리하도록 특별히 설계되었으며 Windows 시스템. Ruby로 작성되었으며 고유한 기능을 사용합니다. D오 메인 S특이한 L시스템 구성을 설명하는 언어(DSL)입니다.

Puppet 버전은 무엇입니까?

Puppet은 두 가지 버전으로 제공됩니다.

  • 오픈 소스 퍼펫: Open Source Puppet이라고도 알려진 Puppet 구성 관리 도구의 기본 버전입니다. Puppet 웹사이트에서 직접 사용할 수 있으며 Apache 2.0 시스템에 따라 라이센스가 부여됩니다.
  • 꼭두각시 기업: 효율적인 노드 관리를 위해 규정 준수 보고, 조정, 역할 기반 액세스 제어, GUI, API 및 명령줄 도구와 같은 기능을 제공하는 상용 버전입니다.

Puppet은 무엇을 할 수 있나요?

예를 들어, 약 100개의 서버로 구성된 인프라가 있습니다. 시스템 관리자로서 귀하의 역할은 이러한 모든 서버가 항상 최신 상태로 유지되고 모든 기능이 실행되도록 하는 것입니다.

서버에서 수동으로 작업하는 시스템 관리자
서버에서 수동으로 작업하는 시스템 관리자

이를 위해 Puppet을 사용하면 이러한 서버에 자동으로 배포할 수 있는 간단한 코드를 작성할 수 있습니다. 이를 통해 인적 노력을 줄이고 개발 프로세스를 빠르고 효과적으로 만들 수 있습니다.

Puppet은 서버 관리를 자동화합니다
Puppet은 서버 관리를 자동화합니다

Puppet은 다음과 같은 기능을 수행합니다.

  • Puppet을 사용하면 모든 호스트에 대해 고유한 구성을 정의할 수 있습니다.
  • 이 도구를 사용하면 서버를 지속적으로 모니터링하여 필요한 구성이 존재하는지, 변경되지 않았는지 확인할 수 있습니다. 구성이 변경되면 Puppet 도구는 호스트에 미리 정의된 구성으로 되돌아갑니다.
  • 또한 구성된 모든 시스템에 대한 제어 기능을 제공하므로 중앙 집중식 변경이 자동으로 적용됩니다.
  • 또한 소프트웨어를 시스템에 자동으로 배포하므로 배포 도구로도 사용됩니다. 이는 다음을 구현합니다. 정책과 구성이 코드로 작성되기 때문에 코드로서의 인프라입니다.

Puppet DSL 및 프로그래밍 패러다임

Puppet DSL을 배우기 전에 프로그래밍 패러다임을 이해해 보겠습니다.

프로그래밍 패러다임은 컴퓨터 프로그래밍에서 사용하는 스타일입니다.

네 가지 유형의 패러다임은 다음과 같습니다.

  • 피할 수 없는.
  • 선언적.
  • 기능적(해당 선언적 패러다임의 하위 집합으로 간주됨)
  • 객체 지향.

우리는 명령형과 선언형에 중점을 둘 것입니다.

명령형 패러다임

이 프로그래밍 패러다임은 계산의 논리(무엇을 해야할지)를 표현하고 제어 흐름(어떻게 해야할지)을 설명합니다.

예:

당신이 사무실에 간다고 가정하고, 택시를 예약하고 사무실에 도착할 때까지 운전사에게 단계별 길 안내를 시작합니다. 무엇을 해야 할지, 어떻게 해야 할지를 지정하는 것은 필수 스타일입니다.

선언적 패러다임

이 프로그래밍 패러다임은 제어 흐름(어떻게 해야 하는지)을 설명하지 않고 계산 논리(무엇을 해야 하는지)를 표현합니다.

예:

사무실에 간다고 가정하고 Uber 택시를 예약하고 최종 목적지(사무실)를 지정합니다. 무엇을 하지 말아야 할지, 어떻게 해야 할지를 지정하는 것은 선언적 스타일입니다.

패러다임 무엇을 수행하는 방법
필수 가능 가능
선언적 가능 아니

Puppet은 선언적 프로그래밍 패러다임을 사용합니다.

Puppet은 선언적 프로그래밍 접근 방식을 사용합니다.

예: 시스템에서 사용자를 생성합니다:

쉘 스크립트에 의한 명령형 프로그래밍 패턴을 사용하여 수행할 수 있습니다. 여기서는 사용자를 생성하는 방법과 사용할 명령을 지정합니다. 운영 체제.

선언적 패러다임

그러나 단 몇 줄의 Puppet 코드, Puppet 도메인 특정 언어(DSL)를 사용하여 선언적 프로그래밍 패턴을 사용하여 수행할 수 있으며 여전히 동일한 결과를 얻을 수 있습니다.

선언적 패러다임

구성 관리 도구의 배포 모델

배포 모델에는 두 가지가 있습니다. 구성 관리 도구 :

  • 푸시 기반 배포 모델: 마스터 노드에 의해 시작됩니다.
  • 풀 기반 배포 모델: 에이전트에 의해 시작됩니다.

푸시 기반 배포 모델

이 배포 모델에서는 마스터 서버가 구성 및 소프트웨어를 개별 에이전트에 푸시합니다. 보안 연결을 확인한 후 마스터는 에이전트에서 원격으로 명령을 실행합니다. 예를 들어, 책임감있는 그리고 솔트 스택.

풀 기반 배포 모델.

이 배포 모델에서는 개별 서버가 마스터 서버에 접속하여 보안 연결을 확인 및 설정하고 구성 및 소프트웨어를 다운로드한 다음 그에 따라 자체적으로 구성합니다(예: Puppet 및 Chef).

인형은 어떻게 작동하나요?

Puppet은 에이전트 노드가 정기적으로 체크인하는 풀 배포 모델을 기반으로 합니다. 1800 에이전트에서 업데이트해야 할 사항이 있는지 확인하기 위해 마스터 노드를 사용하여 몇 초 동안 기다리세요. 업데이트해야 할 사항이 있으면 에이전트는 마스터에서 필요한 인형 코드를 가져와서 필요한 작업을 수행합니다.

예를 들어 설명하자면 다음과 같습니다.

예: 마스터 – 에이전트 설정:

마스터

Puppet 마스터 소프트웨어가 설치된 Linux 기반 시스템. 꼭두각시 코드 형태로 구성을 유지하는 역할을 담당합니다. 마스터 노드는 Linux만 가능합니다.

에이전트

Puppet 에이전트 소프트웨어가 설치된 Puppet에서 관리하는 대상 시스템입니다.

에이전트는 Linux와 같은 지원되는 모든 운영 체제에서 구성될 수 있습니다. Windows or Solaris 또는 맥 OS.

마스터와 에이전트 간의 통신은 보안 인증서를 통해 설정됩니다.

Puppet Master 에이전트 통신
Puppet Master 에이전트 통신

마스터와 에이전트 간의 통신

단계 1) 에이전트와 마스터 간에 연결이 설정되면 Puppet 에이전트는 상태에 대한 데이터를 Puppet 마스터 서버로 전송합니다. 이를 팩트라고 합니다. 이 정보에는 호스트 이름, 커널 세부 정보, IP 주소, 파일 이름 세부 정보 등이 포함됩니다.

마스터와 에이전트 간의 통신
에이전트가 마스터에게 사실을 보냅니다.

단계 2) Puppet Master는 이 데이터를 사용하여 에이전트에 적용할 구성으로 목록을 컴파일합니다. 에이전트에서 수행되는 이 구성 목록을 목록. 이는 패키지 설치, 업그레이드 또는 제거, 파일 시스템 생성, 사용자 생성 또는 삭제, 서버 재부팅, IP 구성 변경 등으로 변경될 수 있습니다.

마스터와 에이전트 간의 통신
마스터가 에이전트에게 카탈로그를 보냅니다.

단계 3) 에이전트는 이 구성 목록을 사용하여 노드에 필요한 구성 변경 사항을 적용합니다.

구성에 변동이 없는 경우 에이전트는 구성 변경을 수행하지 않고 노드가 동일한 구성으로 실행되도록 둡니다.

마스터와 에이전트 간의 통신
에이전트가 구성을 적용합니다.

단계 4) 작업이 완료되면 노드는 구성이 적용되고 완료되었음을 나타내는 Puppet 마스터에 다시 보고합니다.

인형 블록

Puppet은 Puppet API를 사용하여 보고서를 타사 도구와 통합할 수 있는 유연성을 제공합니다.

네 가지 유형의 Puppet 빌딩 블록은 다음과 같습니다.

  1. 자료
  2. 클래스
  3. 적하 목록
  4. 모듈

인형 리소스

Puppet 리소스는 Puppet의 구성 요소입니다.

자원은 내장된 기능 퍼펫에서 필요한 작업을 수행하기 위해 백엔드에서 실행됩니다.

인형극 수업

다양한 리소스의 조합을 클래스라는 단일 단위로 그룹화할 수 있습니다.

꼭두각시 매니페스트

매니페스트는 꼭두각시 DSL 파일이 포함된 디렉터리입니다. 해당 파일의 확장자는 .pp입니다. .pp 확장자는 꼭두각시 프로그램을 나타냅니다. Puppet 코드는 Puppet 클래스의 정의 또는 선언으로 구성됩니다.

인형 모듈

모듈은 매니페스트, 클래스 정의와 같은 파일 및 디렉터리의 모음입니다. Puppet에서는 재사용 및 공유가 가능한 단위입니다.

예를 들어, MySQL 설치 및 구성을 위한 모듈 MySQL 또는 Jenkins 등을 관리하는 Jenkins 모듈.

인형 모듈
인형 모듈

Puppet 리소스 유형

일반적으로 시스템은 파일, 사용자, 서비스, 프로세스, 패키지 등으로 구성됩니다. Puppet에서는 이를 리소스라고 합니다. 리소스는 비즈니스의 기본 구성 요소입니다.

퍼펫. 퍼펫 에이전트의 모든 작업은 퍼펫 리소스의 도움으로 수행됩니다.

퍼펫 리소스는 지원되는 모든 플랫폼에서 다양한 작업과 운영을 수행하는 데 사용되는 기성 도구입니다. 단일 퍼펫 리소스를 사용하여 특정 작업을 수행하거나 여러 퍼펫 리소스를 함께 사용하여 복잡한 애플리케이션 구성 배포를 수행할 수 있습니다.

리소스는 다양한 유형을 가질 수 있습니다. 인형의 용도 자원 그리고 리소스 유형 시스템의 구성을 설명하기 위해.

리소스 유형에는 세 가지 종류가 있습니다.

  1. Puppet 핵심 또는 내장 리소스 유형.
  2. 꼭두각시는 리소스 유형을 정의했습니다.
  3. Puppet 사용자 정의 리소스 유형.

Puppet 핵심 또는 내장 리소스 유형

핵심 또는 내장 리소스 유형은 Puppet 소프트웨어와 함께 제공되는 사전 구축된 Puppet 리소스 유형입니다. 모든 핵심 또는 기본 제공 Puppet 리소스 유형은 Puppet 팀에서 작성하고 유지 관리합니다.

꼭두각시 정의 리소스 유형

정의된 리소스 유형은 기존 리소스 유형의 조합을 사용하여 Puppet 선언 언어로 작성된 경량 리소스 유형입니다.

Puppet 사용자 정의 리소스 유형

사용자 정의 리소스 유형은 Ruby로 작성된 완전히 사용자 정의된 리소스 유형입니다.

Puppet 리소스 유형에 대해 살펴보겠습니다.

터미널에서 다음 명령을 입력하면 Puppet 관련 하위 명령 목록이 표시됩니다.

Puppet --help

Puppet 사용자 정의 리소스 유형

우리의 경우 하위 명령 "에 관심이 있습니다.의지” 내장된 인형 리소스 유형에 대한 정보를 찾는 데 사용할 것입니다.

터미널에서 다음 명령 중 하나를 입력하여 목록을 표시합니다. 행위 puppet 하위 명령 “의지":

Puppet help resource		
Puppet resource --help		

Puppet 사용자 정의 리소스 유형

이 경우에는 의지 하위 명령으로 – 유형 행동으로.

Puppet에는 49가지 핵심 리소스 유형이 내장되어 있습니다.

터미널에서 다음 명령을 입력하여 사용 가능한 내장 Puppet 리소스 유형 목록을 표시합니다.

puppet resource –types

Puppet 사용자 정의 리소스 유형

각 유형은 다음 목록을 지원합니다. 속성. 이러한 속성은 Puppet이 리소스를 관리하는 데 사용하는 자세한 설명을 제공합니다.

퍼펫 리소스 유형과 연관된 모든 속성을 알아보려면 다음 명령을 사용하세요.

puppet describe <resource type name>	

매개변수는 해당 자원 유형에 사용 가능한 모든 속성을 나열합니다.

꼭두각시 설명 패키지

Puppet 사용자 정의 리소스 유형

새로운 사람이 관리되지 않는 많은 퍼펫 코드 파일을 이해하고 연관시키는 것은 어렵습니다. 여기서 작업을 연결하기 위해 그룹화가 필요합니다. 목표는 서버나 ntp 서비스에서 ssh를 구성하는 데 필요한 모든 작업이나 처음부터 전체 웹 서버나 데이터베이스 서버와 같은 단일 문제를 해결하는 것입니다.

퍼펫 클래스란 무엇입니까?

Puppet 클래스는 단일 단위로 함께 묶인 Puppet 리소스 모음입니다.

Puppet은 구조를 재사용하고 구성할 수 있도록 클래스를 도입했습니다.

먼저, 클래스 정의 구문을 사용하여 클래스를 정의해야 합니다. 클래스는 고유해야 하며 동일한 이름으로 한 번만 선언할 수 있습니다.

class <class-name> {
<Resource declarations>
}

예:

class ntpconfig {
    file {
        "/etc/ntp.conf": 
     ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}

지금까지 우리는 클래스를 정의했을 뿐 어디서도 사용하지 않았습니다. 즉, 이 클래스를 다른 곳에서 선언하지 않는 한 우리가 작성한 이 코드는 결코 실행되지 않습니다.

클래스 선언

코드에서 정의된 클래스를 사용하려면 예어.

class ntpconfig {
    file {
        "/etc/ntp.conf": 
      ensure=> "present", 
      content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}
include ntpconfig

실제 사례 시나리오를 통해 이를 이해해 보겠습니다.

데모 설치 NTP

먼저, NTP 패키지가 서버에 이미 없는지 확인하세요. 서버에 Telnet이 없으면 다음 명령은 아무 결과도 반환하지 않습니다.

rpm -qa | grep -i ntp

데모 설치 NTP

보시다시피 NTP 패키지는 이미 서버에 있습니다. 기존 NTP 패키지를 제거해 보겠습니다.

yum remove ntp

패키지를 제거한 후 ntp.conf 파일이 존재하지 않는지 확인하십시오.

ls -lrt /etc/ntp.conf

데모 설치 NTP

다음 명령을 실행하여 ntp 서비스가 존재하지 않는지 확인하세요.

systemctl status ntp

데모 설치 NTP

코드를 저장하려면 새 .pp 파일을 만드세요. 명령줄에서:

vi demontp.pp

키보드에서 i를 눌러 삽입 모드로 변경합니다.

새 파일을 만들려면 다음 코드를 입력하세요.

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

편집 완료 후 : esc 누르기

파일을 저장하려면 :wq를 누르세요!

다음 단계는 검사 코드에 구문 오류가 있는지 여부. 다음 명령을 실행합니다.

puppet parser validate demontp.pp

다음으로 전환했는지 확인하세요. 뿌리 다음 명령을 실행하여 오류 없이 테스트를 완료할 수 있습니다.

su root

Test 코드 생성 프로세스의 다음 단계입니다. 다음 명령을 실행하여 스모크 테스트를 수행합니다.

Puppet applies demontp.pp --noop

마지막 단계는 운영 리얼 모드에서 꼭두각시를 실행하고 출력을 확인합니다.

puppet apply demontp.pp

Puppet은 데모 수업이 그냥 진행되었기 때문에 아무것도 수행하지 않았습니다. 한정된 하지만 선언 한.

따라서 puppet 클래스를 선언할 때까지 코드는 적용되지 않습니다.

의하자 알리다 동일한 코드 내의 데모 클래스를 사용하여 클래스 이름 포함 코드 끝에서:

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

# Class Declaration 
include ntpconfig

다시 검사 코드에 구문 오류가 있는지 여부. 다음 명령을 실행합니다.

puppet parser validate demontp.pp

다음으로 전환했는지 확인하세요. 뿌리 다음 명령을 실행하여 오류 없이 테스트를 완료할 수 있습니다.

su root

지원 코드 생성 프로세스의 다음 단계입니다. 다음 명령을 실행하여 스모크 테스트를 수행합니다.

Puppet apply demontp.pp --noop

마지막 단계는 운영 리얼 모드에서 꼭두각시를 실행하고 출력을 확인합니다.

puppet apply demontp.pp

이번에는 클래스가 정의되고 선언되었기 때문에 코드가 적용됩니다.

데모 설치 NTP

이제 ntp.conf가 존재하는지 확인하십시오.

ls -lrt /etc/ntp.conf

다음 명령을 실행하여 ntp 서비스가 시작되었는지 확인하세요.

systemctl status ntpd

데모 설치 NTP