웹사이트 검색

Debian 11에 Puppet 서버 및 에이전트를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. FQDN 설정
  3. Puppet 저장소 추가
  4. Puppet 서버 설치
  5. Puppet 서버 구성
  6. Puppet Agent 설치 및 구성
  7. Puppet 에이전트를 Puppet 서버에 등록
  8. 첫 번째 꼭두각시 매니페스트 만들기
  9. Puppet 매니페스트 확인 및 적용\n
  10. 결론

Puppet은 중앙 집중식 구성 관리 및 자동화 도구입니다. DevOps는 서버 및 애플리케이션을 배포하기 위한 구성 관리를 만들고 자동화를 위한 모든 구성은 중앙 "Puppet Server"에 저장됩니다. 그런 다음 "Agent" 노드는 "Puppet Server"에서 새 구성을 가져오고 정의된 상태를 적용합니다.

"Puppet Server"와 "Agent" 노드 간의 모든 연결 SSL/TLS 인증서를 사용하여 기본적으로 암호화됩니다. Puppet은 DSL(도메인 특정 언어)을 사용하여 시스템 구성을 설명하고 Ruby 구문과 유사합니다.

이 가이드에서는 Debian 11 Bullseye에 Puppet 서버와 에이전트를 설치하고 구성합니다. 서버 호스트 이름 puppet-server에 Puppet 서버를 설치하고 호스트 이름 에이전트가 있는 서버에 Puppet 에이전트를 설치합니다. 결국 에이전트 노드에 기본 LEMP 스택을 설치하기 위한 첫 번째 꼭두각시 매니페스트를 생성하게 됩니다.

전제 조건

  • 두 개의 서로 다른 Debian 11 서버가 필요합니다.\n
    • IP 주소가 192.168.5.100인 puppet-server 및 fqdn puppet-server.localdomainl.lan.
    • IP 주소가 192.168.5.150이고 fqdn이 agent.localdomain.lan인 에이전트 노드.

    FQDN 설정

    먼저 puppet-server와 에이전트 모두에 FQDN(정규화된 도메인 이름)과 /etc/hosts 파일을 설정합니다. 이렇게 하면 두 서버가 모두 로컬 도메인 이름과 통신할 수 있습니다.

    FQDN을 설정하려면 아래의 hostnamectl 명령을 실행하십시오.

    다음 명령을 실행하여 puppet-server에서 fqdn puppet-server.localdomain.lan을 설정합니다.

    hostnamectl set-hostname puppet-server.localdomain.lan

    다음 명령을 실행하여 에이전트 노드에서 fqdn agent.localdomain.lan을 설정합니다.

    hostnamectl set-hostname agent.localdomain.lan

    그런 다음 아래와 같이 vim 편집기를 사용하여 /etc/hosts 파일을 편집합니다.

    sudo vim /etc/hosts

    다음 구성을 복사하여 붙여넣습니다.

    192.168.5.100   puppet-server.localdomain.lan
    192.168.5.150   agent.localdomain.lan

    파일을 저장하고 종료합니다.

    마지막으로 아래의 ping 명령을 실행하여 puppet-server와 에이전트 간의 연결을 확인합니다.

    ping puppet-server.localdomain.lan -c3
    ping agent.localdomain.lan -c3

    구성이 올바르면 다음 출력이 표시됩니다. puppet-server.localdomain.lan은 서버 192.168.5.100으로 확인되고 agent.localdomain.lan은 에이전트 노드 192.168.5.150으로 확인됩니다.

    퍼펫 리포지토리 추가

    기본적으로 Puppelabs는 최신 Debian 11 Bullseye를 포함하여 다양한 Linux 배포판에 대한 리포지토리 패키지를 제공합니다. 이 단계에서는 puppet-server와 에이전트 모두에 Puppet 리포지토리를 추가하고 설치합니다. 이 글을 쓰는 시점에서 Puppet의 최신 버전은 v7.x입니다.

    아래의 wget 명령을 사용하여 저장소 패키지를 다운로드하십시오.

    wget https://apt.puppet.com/puppet7-release-bullseye.deb

    다음으로 아래의 dpkg 명령을 사용하여 deb 파일 puppet7-release-bullseye.deb을 설치합니다.

    sudo dpkg -i puppet7-release-bullseye.deb

    설치가 완료되면 아래의 apt 명령을 실행하여 Debian 패키지 인덱스를 업데이트하고 새로 고칩니다.

    sudo apt update

    이제 Puppet 패키지를 설치할 준비가 되었습니다.

    꼭두각시 서버 설치

    이 단계에서는 puppet-server에 Puppet 서버 패키지를 설치합니다. 이 글을 쓰는 시점에서 Puppet의 최신 버전은 v7입니다.

    Puppet Server를 설치하려면 아래의 apt 명령을 실행하십시오. 이 명령은 Java OpenJDK와 같은 다른 패키지도 자동으로 설치했습니다.

    sudo apt install puppetserver

    Y를 입력하여 설치를 확인합니다.

    설치가 완료되면 Puppet Server용 bash 환경을 로드해야 합니다.

    기본적으로 Puppet은 바이너리 파일을 /opt/puppetlabs/bin 디렉토리에 저장합니다. Puppet Server에 대한 새 PATH 환경 변수를 적용하려면 다음 명령을 실행하십시오.

    source /etc/profile.d/puppet-agent.sh
    echo $PATH

    선택적으로 다음 명령을 실행하여 PATH 환경 변수를 적용할 수도 있습니다.

    echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc
    source ~/.bashrc

    이제 아래 명령을 사용하여 PATH 환경 변수를 확인하십시오. /opt/puppetlabs/bin 디렉토리가 PATH 환경 변수 목록에 있는지 확인하십시오.

    echo $PATH

    그런 다음 puppetserver 명령을 정상적으로 실행할 수 있습니다. 아래에서 Puppet 버전을 확인할 수 있습니다.

    puppetserver -v

    아래 스크린샷과 유사한 출력이 표시되어야 합니다.

    그런 다음 vim 편집기를 사용하여 Puppet 서버 구성 /etc/default/puppetserver를 편집합니다.

    sudo vim /etc/default/puppetserver

    Puppet 서버의 최대 메모리 할당을 변경합니다. 시스템 메모리에 따라 다릅니다. 이 가이드에서는 2GB의 메모리를 사용하고 Puppet 서버에 1GB를 할당합니다. 그리고 우리는 아래 구성을 사용할 것입니다.

    JAVA_ARGS="-Xms1g -Xmx1g"

    구성 파일을 저장하고 종료합니다.

    다음으로 systemd 관리자를 다시 로드하여 새 Puppet 서비스 파일을 적용합니다.

    sudo systemctl daemon-reload

    그런 다음 아래 명령을 사용하여 puppetserver 서비스를 시작하고 활성화합니다.

    sudo systemctl start enable --now puppetserver

    puppetserver 서비스가 실행 중이어야 합니다. 아래 명령을 실행하여 puppetserver를 확인합니다.

    sudo systemctl status puppetserver

    아래 스크린샷과 유사한 출력이 표시되어야 합니다.

    또한 시스템에서 UFW 방화벽을 사용하는 경우 Puppet Server에서 사용할 포트 8140을 열어야 합니다.

    아래 명령을 실행하여 로컬 서브넷 192.168.5.0/24에서 포트 8140의 Puppet Server로 들어오는 모든 연결을 연결합니다.

    sudo ufw allow from 192.168.5.0/24 to any proto tcp port 8140
    sudo ufw status

    다음은 표시되어야 하는 현재 UFW 방화벽 규칙입니다.

    Puppet 서버 구성

    이 단계에서는 Puppet Server 구성을 편집합니다. 이 작업은 Puppet 구성을 직접 편집하거나 puppet 명령줄을 사용하여 구성을 생성하여 수행할 수 있습니다.

    아래의 puppet 명령을 실행하여 Puppet 서버를 설정하십시오. 이렇게 하면 기본 섹션의 Puppet Server 도메인 이름실행 간격, 환경dns_alt_names 가 설정됩니다. 서버 섹션에 있습니다.

    puppet config set server puppet-server.localdomain.lan --section main
    puppet config set runinterval 1h --section main

    puppet config set environment production --section server
    puppet config set dns_alt_names puppet-server,puppet-server.localdomain.lan --section server

    이제 아래의 cat 명령을 사용하여 Puppet 서버 구성 /etc/puppetlabs/puppet/puppet.conf를 확인하십시오.

    cat /etc/puppetlabs/puppet/puppet.conf

    아래와 같이 Puppet Server 구성이 표시되어야 합니다.

    마지막으로 puppetserver 서비스를 다시 시작하여 아래의 systemctl 명령을 실행하여 새 구성을 적용합니다.

    sudo systemctl restart puppetserver

    이 시점에서 Puppet Server 설치 및 구성을 완료했습니다.

    Puppet Agent 설치 및 구성

    이 단계에서는 클라이언트 머신 에이전트에 Puppet Agent를 설치 및 구성합니다.

    Puppet Agent를 설치하기 전에 FQDN 구성을 완료하고 Puppet 리포지토리를 추가했는지 확인하십시오.

    이제 Puppet Agent를 설치하고 구성할 수 있습니다.

    아래의 apt 명령을 사용하여 puppet-agent 패키지를 설치합니다.

    sudo apt install puppet-agent

    설치가 완료되면 아래 명령을 실행하여 Puppet 서비스를 시작하고 활성화합니다.

    sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true

    아래 스크린샷과 유사한 출력이 표시되어야 합니다.

    다음으로 PATH 환경 변수를 설정하여 Puppet 바이너리 경로 /opt/puppetlabs/bin/을 추가합니다. 이렇게 하면 바이너리 파일의 전체 경로 없이 puppet 명령을 직접 실행할 수 있습니다.

    source /etc/profile.d/puppet-agent.sh
    echo $PATH

    다른 방법은 다음 명령을 사용하여 새 PATH 환경 변수를 ~/.bashrc 구성에 추가하는 것입니다.

    echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc
    source ~/.bashrc

    이제 다음 명령을 사용하여 PATH 환경 변수 구성을 확인하십시오.

    echo $PATH

    Puppet 바이너리 경로 /opt/puppetlabs/binPATH 환경 변수에 추가된 것을 볼 수 있습니다.

    Puppet 에이전트를 Puppet 서버에 등록

    Puppet Agent를 설치한 후 이제 Puppet Agent를 설정하여 기본 Puppet Server에 등록합니다.

    먼저 에이전트 시스템에서 Puppet Server fqdn에 연결할 수 있는지 확인합니다. 아래의 ping 명령을 사용하여 테스트하십시오.

    ping puppet-server.localdomain.lan -c3

    다음으로 아래 명령을 실행하여 Puppet Agent를 구성합니다. 그러면 에이전트 섹션에서 Puppet Server 도메인 이름ca_server가 정의됩니다.

    puppet config set server puppet-server.localdomain.lan --section agent
    puppet config set ca_server puppet-server.localdomain.lan --section agent

    /etc/puppetlabs/puppet/puppet.conf 파일에서 생성된 Puppet 구성을 확인합니다.

    cat /etc/puppetlabs/puppet/puppet.conf

    아래 스크린샷과 유사한 출력이 표시되어야 합니다.

    이제 아래 명령을 실행하여 Puppet 서비스를 다시 시작하고 새로운 변경 사항을 적용하십시오. 그런 다음 Puppet 서비스를 확인하고 활성화되어 실행 중인지 확인하십시오.

    sudo systemctl restart puppet
    sudo systemctl status puppet

    다음은 Puppet 서비스 상태의 출력입니다.

    다음으로 아래 명령을 실행하여 Puppet 에이전트를 Puppet 서버에 등록합니다. 이 명령은 새 TLS 인증서를 생성하고 Puppet 서버에 대한 새 인증서 서명 요청을 만듭니다.

    puppet ssl bootstrap

    이제 Puppet Server 터미널로 이동하여 아래 명령을 실행하여 인증서 서명 요청을 확인한 다음 Puppet Agent agent.localdomain.lan에 대한 인증서 서명을 확인합니다.

    puppetserver ca list --all
    puppetserver ca sign --certname agent.localdomain.lan

    성공적으로 서명된 인증서 요청 .....과 같은 메시지가 표시되어야 합니다.

    다음으로 아래 명령을 실행하여 Puppet Server의 인증서 목록을 확인합니다.

    puppetserver ca list-all

    Puppet Server 및 Puppet Agent에 대한 인증서라는 두 개의 서로 다른 인증서가 표시되어야 합니다.

    이제 Puppet Agent 터미널로 다시 이동하면 인증서 서명 요청이 성공적으로 완료되었음을 의미하는 Notice: Completed SSL initialization과 같은 메시지가 표시되어야 합니다.

    이제 새로운 첫 번째 Puppet 매니페스트를 만들 준비가 되었습니다.

    첫 번째 꼭두각시 매니페스트 만들기

    이 단계에서는 LEMP 스택(Nginx, MariaDB 및 PHP-FPM)을 설치하기 위한 새로운 첫 번째 퍼펫 매니페스트를 만듭니다. 프로덕션 환경에 대한 모든 매니페스트는 Puppet Server 디렉터리 /etc/puppetlabs/code/environments/production/에 저장되어야 합니다.

    현재 작업 디렉터리를 /etc/puppetlabs/code/environments/production/으로 변경합니다.

    cd /etc/puppetlabs/code/environments/production/

    다음으로 modules 디렉터리 아래에 LEMP 스택에 대한 새 매니페스트 레이아웃 디렉터리를 만듭니다.

    mkdir -p modules/lemp/{manifests,files}

    modules/lemp 디렉토리로 이동하고 vim/nano 편집기를 사용하여 새 Puppet 매니페스트 파일 manifests/init.pp을 만듭니다.

    cd modules/lemp/
    nano manifests/init.pp

    LEMP Stack 설치를 위해 다음 Puppet 구문 언어를 복사하여 붙여넣고 각 LEMP Stack 서비스가 실행 중인지 확인하고 새 사용자 지정 index.html 파일을 만듭니다.

    class lemp {

        Package { ensure => 'installed' }
        $lemppackages = [ 'nginx', 'mariadb-server', 'php-fpm' ]
        package { $lemppackages: }

        Service { ensure => 'running', enable => 'true'}
        $lempsvc = [ 'nginx', 'mariadb', 'php7.4-fpm' ]
        service { $lempsvc: }

        file { '/var/www/html/index.html':
         ensure  => file,
         content => "<h1><center>Welcome to Nginx - Managed by Puppet</center></h1>",
         mode    => '0644',
       }

    }

    파일을 저장하고 종료합니다.

    그런 다음 아래 명령을 실행하여 Puppet 매니페스트 파일 init.pp의 유효성을 검사합니다.

    puppet parser validate init.pp

    출력 메시지가 표시되지 않으면 구성이 올바른 것입니다.

    이제 vim/nano 편집기를 사용하여 다른 구성 manifests/site.pp을 만듭니다.

    cd /etc/puppetlabs/code/environments/production/
    vim manifests/sites.pp

    대상 호스트를 agent.localdomain.lan으로 정의하고 새 Puppet 매니페스트 lemp를 적용합니다.

    node 'agent.localdomain.lan' {
        include lemp
    }

    파일을 저장하고 종료합니다.

    다음 명령을 사용하여 Puppet 매니페스트 구성을 다시 확인합니다.

    puppet parser validate site.pp

    퍼펫 매니페스트 확인 및 적용

    이제 LEMP 스택 배포를 위한 새로운 첫 번째 Puppet 매니페스트를 만들었습니다. 이 시점에서 Puppet Agent 노드는 모든 매니페스트를 Puppet 서버에 자동으로 동기화하고 새 매니페스트 구성을 적용합니다.

    그러나 Puppet Agent 시스템에서 수동으로 Puppet 매니페스트를 적용할 수도 있습니다.

    터미널 서버 에이전트로 다시 이동하고 아래 명령을 실행하여 Puppet 매니페스트를 수동으로 적용합니다.

    puppet agent -t

    그러면 Puppet Agent 시스템에서 Puppet 매니페스트가 실행되고 Puppet 매니페스트 lemp를 통해 LEMP 스택이 설치됩니다.

    아래는 얻을 수 있는 결과입니다.

    이제 아래 명령을 실행하여 각 서비스 Nginx, MariaDB 및 PHP-FPM을 확인합니다.

    sudo systemctl status nginx
    sudo systemctl status mariadb
    sudo systemctl status php7.4-fpm

    각 서비스가 활성화되어 실행 중이어야 합니다.

    이제 웹 브라우저를 열고 주소 표시줄에 에이전트 노드의 IP 주소를 입력하십시오. 그리고 아래에 맞춤 index.html 파일이 표시되어야 합니다.

    이제 Puppet 매니페스트를 사용하여 에이전트 시스템에 LEMP 스택 배포를 성공적으로 적용했습니다.

    결론

    축하합니다! 이제 Debian 11 Bullseye에 Puppet Server 및 Agent를 성공적으로 설치했습니다. 또한 LEMP 스택을 설치하기 위한 첫 번째 Puppet 매니페스트를 생성하는 방법을 배웠습니다.

    O다음 단계에서는 다른 노드를 설정하고 배포를 위해 더 복잡한 Puppet 매니페스트를 생성하는 것이 흥미로울 수 있습니다.