서버를 건드리지 않고도 인형을 설치할 수 있나요?

서버를 건드리지 않고도 인형을 설치할 수 있나요?

Puppet은 데스크톱 측뿐만 아니라 서버 측에도 설치해야 하고 서버 측에서 명령을 실행해야 한다고 들었습니다.

내 질문:인형을 사용하는 다른 방법이 있나요? 내 말은 서버 측에 설치하고 싶지 않고 서버의 데스크톱에서 스크립트를 실행하기만 하면 된다는 뜻입니다.

답변1

마스터리스 모드에서 Puppet을 사용할 수 있지만 서버에는 여전히 Puppet 클라이언트가 설치되어 있어야 합니다. 이 블로그 게시물에서는 설정에 대한 세부 정보를 설명합니다.Git으로 Puppet 확장하기.

이 문서에서는 Puppet 매니페스트 파일( )을 유지 관리하기 위해 Git 리포지토리를 설정한 .pp다음 Puppet을 수동으로 실행하여 적용하는 방법을 보여줍니다.

package { "screen":
  ensure => installed,
}

Something.pp로 저장하고 Puppet을 사용하여 실행하세요.

$ sudo puppet -v something.pp 
info: Applying configuration version '1264090058'
notice: //Package[screen]/ensure: created

그러나 이 접근 방식은 여전히 ​​Puppet 배포에서 일반적으로 볼 수 있는 클라이언트/서버 모델과 매우 유사합니다.

puppet-users 메일링 리스트에는 다음과 같은 제목의 스레드도 있습니다.Re: [Puppet 사용자] Masterless: 무엇을 잃어야 합니까?그러면 다른 옵션이 드러날 수 있습니다. 나는 또한 다음과 같은 제목의 블로그 게시물을 발견했습니다.주인 없는 인형또한 원하는 작업을 수행하기 위한 옵션에 대해서도 설명합니다.

또한 다음 제목의 기사를 안내해 드리겠습니다.구성 관리: 푸시(Push) 대 풀(Pull)구성 관리를 수행할 때 접근 방식의 차이점에 대해 설명합니다. Puppet은 엄밀히 말하면 풀 솔루션이므로 제안한 대로 사용하는 것이 어려울 수 있습니다. 원하는 것이 데스크톱에서 서버로의 푸시 솔루션처럼 들리기 때문입니다.

푸시 접근 방식을 실제로 사용하려는 경우 다른 솔루션이 있지만 이는 질문 범위를 벗어납니다.

답변2

자세히 설명하겠습니다내 댓글여기, 나의 실용적인 제안이 있습니다.

내 주요 가정은 클라이언트 노드의 수가 너무 많기 때문에 클라이언트 노드에 Puppet을 설치하고 싶지 않다는 것입니다. 권한 문제로 인해 "터치"할 수 없다면 Puppet이나 다른 방법을 통해 구성을 푸시할 수 있을지 의문입니다.

다음과 같이 ssh비밀번호 없이 컴퓨터에 로그인하도록 구성할 수 있습니다 .ssh-keygen

[user@host]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host
The key's randomart image is:
+--[ RSA 2048]----+
|          E++.+. |
|           -./ . |
|      .     = o  |
|       o   o     |
|        X +      |
|       . $ +     |
|          0 .    |
|        . .S     |
|       ..cb..    |
+-----------------+

비밀번호가 비어 있는지 확인하십시오. 따라서 이 비밀번호를 사용하는 스크립트에는 ssh비밀번호가 필요하지 않습니다.

두 번째 단계에서는 공개 키를 모든 호스트에 복사해야 합니다.

while IFS= read -r host; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub "$host"
done < hostnames_file

hostnames_file구성하려는 모든 호스트를 나열하는 호스트 이름이 한 줄에 하나씩 있다고 가정합니다 .

스크립트는 호스트 수만큼 비밀번호를 요청할 가능성이 높지만 이는 키를 설정할 때 한 번만 발생합니다.

user모든 클라이언트 간에 홈 디렉토리를 공유하는 경우 (예: NFS를 통해) 다음을 수행할 수 있습니다.

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

이제 방금 구성한 명령(또는 선택한 패키지 관리자) sudo에 대해 비밀번호 없는 액세스를 설정해야 합니다. 이제 매우 간단합니다.apt-getyumpacmanuserssh

while IFS= read -r host;do
    ssh "$host" 'sudo apt-get install puppet' # also, modify puppet.conf
end < hostnames_file

이 방법을 구성 관리의 기본 형태로 사용할 수도 있지만 * Puppet이나 Chef 또는 유사한 방법을 사용하는 것보다 훨씬 더 취약합니다.

인용하다


(*)sudo apt-get install puppet 모든 노드에서 실행하려는 명령으로 바꾸십시오 .

답변3

일반적인 Puppet 모델은 Puppet 마스터와 Puppet 클라이언트로 구성됩니다. 즉, Puppet 마스터를 완전히 건너뛰고 Puppet 클라이언트만 사용할 수 있습니다. (소유자 없는 인형 모듈이라고 함)

puppet applybash 스크립트에 명령을 래핑하여 이를 수행할 수 있습니다 .

다음은 소스에서 최신 버전의 Redis를 컴파일한 다음 RPM을 생성하는 소유자 없는 Puppet 매니페스트의 간단한 예입니다.

https://github.com/spuder/fpm-redis


다음은 우리 회사에서 사용하는 빌더(builder)라는 좀 더 복잡한 예입니다. 여기에서 데모를 볼 수 있습니다.

https://www.youtube.com/watch?v=EFByexKKkIE

Builder는 모든 개발자가 모든 가상 머신에 적용할 수 있는 스크립트일 뿐이며 스크립트는 꼭두각시를 통해 자동으로 제품군을 설치합니다. 비공개 소스이지만 기본적인 아키텍처를 설명하도록 노력하겠습니다.

개발자가 빌더를 실행할 때 설치하려는 소프트웨어의 버전과 버전을 묻는 메시지가 표시되도록 작성되었습니다.

$ sudo ./builder.sh
"Welcome to Builder"

1) Enterprise
2) Basic
3) Quit
Please select an edition: 1

"You have selected: Enterprise"

1) 7.5.0
2) 7.6.0
3) 7.7.0
4) 7.8.0
5) Quit
Please select a release: 2

"You have selected 7.6.0, applying manifests"

이와 같이 bash 스크립트에 puppet 매니페스트를 래핑하는 것의 장점 중 하나는 나중에 사용할 수 있도록 자신만의 요소 변수를 간단히 작성할 수 있다는 것입니다. github/spuder/fpm-redis에서 간단한 예를 확인하세요.

변수 앞에 대문자 "FACTER"를 붙입니다.

cat fpm-redis
#!/bin/bash
export FACTER_REDIS_VERSION='2.8.8'
puppet apply ./manifests/init.pp

그런 다음 Puppet 매니페스트는 소문자 변수를 참조할 수 있습니다("FACTER_"라는 단어는 자동으로 제거됨).

cat ./manifests/init.pp

class foo {
  file { "${::redis_version}":
      ensure => file,
      content => 'foo'
  }
}
include foo

빌더 코드로 돌아가면 모듈식이므로 설치해야 하는 각 제품에 대한 디렉터리가 있습니다. 이를 통해 속성 파일을 정의할 수 있습니다.

$ tree /tmp/builder
|
build
    \_ Enterprise.prop
    \_ Basic.prop
|
packages
    \_ java_7
      \_ manifests
                 \_ init.pp

    \_ java_6
      \_ manifests
                 \_ init.pp
    \_ foo
      \_ manifests
                 \_ init.pp
|
builder.sh

속성 파일은 환경 변수와 적용할 꼭두각시 매니페스트 목록을 포함하는 bash 스크립트입니다. 때로는 패키지를 특정 순서로 설치해야 하므로 사전 작업과 사후 작업으로 구분됩니다.

$ cat Enterprise.prop

    PRE_APPLY_LIST= "build/java_6/manifests/init.pp \
                     build/foo/manifests/init.pp"
    POST_APPLY_LIST= "build/foobar/manifests/init.pp"
    export FACTER_FOO='bar'
    export FACTER_DB_PASSWORD='correct horse battery staple'

$ cat Basic.prop

    PRE_APPLY_LIST= "build/java_7"
    export FACTER_HERP='derp'

앞서 언급한 메뉴 프롬프트로 돌아갑니다. 빌더는 빌딩 디렉토리를 반복하여 메뉴 옵션 목록을 생성합니다.

$ cat /tmp/builder.sh

# prompt the user for which product
OPTIONS=`ls build/*.prop`
for opt in $OPTIONS
do
  PP_APPLY=$opt
  break
done

# import the variables from the property file
source $PP_APPLY

# install the desired packages
puppet apply $PRE_APPLY_LIST
puppet apply $POST_APPLY_LIST

이는 꼭두각시 마스터가 없어도 꼭두각시를 활용할 수 있는 좋은 방법입니다.

답변4

Puppet은 패키지, 파일 및 서비스를 관리하도록 설계되었습니다. (트리오라고 함). Puppet Master 없이 이를 관리하려면 다음 애플리케이션 중 하나를 사용할 수 있습니다.


카푸

yaml 구성 파일을 받아들이고 모든 애플리케이션을 설치하기 위한 디렉터리 구조와 꼭두각시 매니페스트를 생성하는 Ruby gem입니다.

https://github.com/theforeman/kafo

그것은에 의해 만들어졌습니다십장. 이것이 설치 프로그램을 생성하는 방법입니다.


불소 PM

불소 PM이는 rpm 및 deb 패키지를 빠르게 생성하는 가장 좋은 방법입니다. 또한 독립적인(소유되지 않은) 퍼펫 매니페스트를 생성할 수도 있습니다. 글을 쓰는 시점에서는 아직 실험 단계입니다.

실행하려는 스크립트 유형을 지정하지 않았습니다. 패키지, 파일 또는 서비스를 관리하는 경우 kafo를 사용하여 애플리케이션을 만드는 행운을 누릴 수 있습니다.

관련 정보