태그 보관물: puppet

puppet

구성 관리 도구 (Puppet, Chef)가 설치된 패키지를 최신 상태로 유지할 수 있습니까? 서버를 실행한다고 가정 해보십시오. 보안

이것은 이미 구성 관리 도구를 실행중인 사용자에게는 간단한 질문 일 것입니다. 설치된 패키지를 최신 상태로 유지하기 위해 Puppet 또는 Chef와 같은 구성 관리 도구가 올바른 접근 방법입니까?

대부분 데비안과 우분투를 기반으로 여러 서버를 실행한다고 가정 해보십시오. 보안 업데이트 나 버그 수정이있을 때 구성 관리 도구를 사용하여 리포지토리에서 설치된 패키지를보다 쉽게 ​​업데이트 할 수 있습니까?

현재 시스템에 자동으로 보안 업데이트를 설치하기 위해 “무인 업그레이드” 를 실행 하고 있지만 여전히 서버에 연결하여 aptitude update && aptitude safe-upgrade자주 실행 해야합니다. 당연히 이것은 서버가 많을수록 지루하고 지루하며 오류가 발생하기 쉽습니다.

Puppet 또는 Chef와 같은 도구가 설치된 패키지를 최신 상태로 유지하는 올바른 방법입니까? 이 도구를 사용 aptitude하여 15 대의 서버에서 수동으로 실행 하거나 동등한 기능을 수행하지 않습니까? 이 질문에 대한 대답은 “예, 물론입니다”라고 확신합니다.

그러나이 특정 사용 사례에 대한 자세한 정보는 어디서 찾을 수 있습니까? 아직 Puppet 또는 Chef를 심층적으로 연구 할 시간이 없었으며 예제 요리 책 또는 클래스는 ssh와 같은 특정 패키지를 설치하는 간단한 예를 보여줍니다. 공식 문서 외에 권장 할 자료가 있습니까? (물론, 도구 중 어떤 것이 나에게 적합한 지 알게되면 문서를 공부할 것입니다).



답변

꼭두각시 (저도 요리사가 확신합니다) apt-get / yum 소프트웨어 리포지토리와 연결됩니다. 어떤 패키지를 사용할 수 있는지 파악하기 ensure => latest때문에 Ubuntu / CentOS / Debian에 적합합니다. 적절한 파일을 올바르게 설정하기 만하면됩니다 ( /etc/apt/sources.list등).


답변

꼭두각시로 할 수 있습니다.

ensure => latest,

또는

ensure=> "1.0.2",

최신 / 필요 버전을 지정합니다. 즉

package { apache2: ensure => "2.0.12-2" }
package { apache2: ensure => latest }

이것은 최소한 모든 시스템에서 동일한 버전을 지정할 수있을뿐 아니라 서버가 자동으로 자체적으로 업그레이드되지 않도록 방지 할 수 있음을 의미합니다. 여러 사이트에서 프로덕션에이 방법을 사용했으며 매우 잘 작동합니다.

무인 업그레이드를 실행하면 특히 핵심 패키지, 커널, mysql 라이브러리, 아파치 등을 업그레이드하는 경우 조금 무섭습니다. 특히 설치 스크립트가 서비스를 다시 시작하려는 경우!


답변

아마 이것이 잘못된 질문이라고 생각합니다. 확실히 Puppet 및 Chef와 같은 구성 관리 도구를 사용하여 인프라를 유지 관리하는 것은 모든 작업을 수동으로 수행하는 것보다 큰 발전입니다. 패키지 버전을 최신 상태로 유지하고 동기화하는 문제는 이러한 도구가 직접 해결하는 문제가 아닙니다. 이를 올바르게 자동화하려면 패키지 리포지토리 자체를 제어해야합니다.

이 작업을 수행하는 방법은 특정 사이트에 대해 관심이있는 패키지가 포함 된 전용 Yum 저장소 (Redhat / Fedora / CentOS의 경우 Debian / Ubuntu의 APT 저장소)를 유지 관리하는 것입니다. 이것들은 일반적으로 응용 프로그램 자체 (Ruby, PHP, Apache, Nginx, 라이브러리 등)와 보안에 중요한 패키지의 종속성입니다.

이 설정을 마치면 (일반적으로 업스트림 리포지토리에서 필요한 패키지를 미러링하여 시작할 수 있음) Puppet의 “ensure => latest”구문을 사용하여 모든 시스템이 리포지토리를 최신 상태로 유지할 수 있습니다.

‘스테이징’저장소를 사용하여 업데이트 된 버전의 패키지를 프로덕션으로 롤아웃하기 전에 테스트 할 수 있도록하는 것이 좋습니다. 이는 저장소 템플릿을 사용하여 코드를 복제하지 않고도 Puppet에서 쉽게 수행 할 수 있습니다.

패키지 버전 관리를 자동화하면 다른 운영 체제 배포판, 버전 및 시스템 아키텍처에 대해 여러 개의 저장소와 패키지를 유지 관리하는 데 시간이 많이 걸리고 모든 종류의 모호한 문제와 비 호환성이 발생할 수 있으므로 모든 프로덕션 시스템을 동기화해야합니다.

이 모든 조언은 Ruby gem, Python eggs 및 기타 패키지 시스템에 동일하게 적용됩니다.

Puppet을 빠르게 시작하고 실행하는 데 도움이되는 작은 Puppet 자습서 를 작성했습니다 . 패키지 버전을 제어하는 ​​첫 번째 단계로 Puppet을 사용하여 시스템에 사용자 정의 저장소 정의를 배치 할 수 있습니다.


답변

Puppet / Chef는이 기능에 대한 경쟁자가 될 수 있지만 시스템의 모든 것을 최신 상태로 유지하려면 사용자 정의 유형 또는 모든 패키지 (libc6와 같은 기본 시스템 라이브러리 포함)를 리소스로 나열해야합니다 ensure => latest. 자동화 된 패키지 업데이트의 특정 경우에는 원하는 것을 수행하는 cron-apt패키지 를 살펴볼 수 있습니다.


답변

이 질문은 오래되었지만 현재 기존 답변을 사용할 수 없었기 때문에 최신 방식으로 답변 할 것이라고 생각했습니다.

꼭두각시 나 요리사를 사용하는 경우 mcollective를 살펴보십시오. puppetlabs 사용자가 서버 그룹에 명령을 보낼 수있는 매우 유용한 도구입니다.http://docs.puppetlabs.com/mcollective/

또한 여러 플러그인 서버에서 apt 플러그인을 사용할 수 있습니다.
http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentApt


답변

나는 이것이 당신의 원래 질문에 대해 조금 늦었다는 것을 알고 있지만, 여기서는 “결코 늦지 않았습니다”라는 정신에 있습니다.

Cfengine 3을 사용하여 여러 서버 에서이 작업을 수행합니다. 자동 업데이트를 위해 명시적인 패키지 목록을 지정하므로 약간의주의를 기울이지 않고도 모든 패키지를 업데이트 하지 않아도됩니다. 잘 작동하고 cfengine 3은 매우 가볍습니다.

내 cfengine 구성의 약속 스 니펫은 다음과 같습니다.

    packages:
            "apache2"
                    package_method => "apt",
                    package_policy => "update";

이것이 도움이되기를 바랍니다.


답변

나는 조나단에 동의합니다. Cfengine 3 접근 방식은 낮은 수준에서 다시 코딩하지 않고도 패키지 관리의 모든 측면을 제어 할 수 있기 때문에 좋습니다.