구성 관리 도구 (Puppet, Chef)가 설치된 패키지를 최신 상태로 유지할 수 있습니까?


28

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

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

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

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

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


좋은 질문, 나는 데비안을 꼭두각시로 최신 상태로 유지하는 것에 대해 언급 한 자습서를 읽었지만 직접 시도하지는 않았습니다. 프로덕션 환경에서 사용하는 사람들의 답변을 보는 것이 흥미로울 것입니다.
pQd 2009

답변:


9

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


1
Puppet 또는 각 패키지 관리와 관련된 답변은 기본 Linux 배포 설치에 포함 된 패키지를 포함하여 Puppet의 모든 패키지를 추적해야 함을 의미합니다. 같은 도구를 사용 unattended-upgrades하거나 yum-cron하는 업데이트를 자동화하는 것은 훨씬 적은 일이다 - 단지 그 도구를 구성하는 인형 / 요리사 / Ansible를 사용합니다.
RichVel

22

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

ensure => latest,

또는

ensure=> "1.0.2",

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

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

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

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


답장을 보내 주셔서 감사합니다! 따라서 Puppet을 통해 설치된 패키지를 최신 상태로 유지하는 것이 가능할 것 같습니다. 알아 둘만 한. 그러나 다른 버전의 패키지를 실행하는 서버는 어떻습니까? 데비안 레니 vs 우분투 8.04와 9.10에서와 같이? 버전을 수동으로 관리해야합니까? 할 일이 더 있습니다. 웹 인터페이스와 여러 서버에서 패키지를 업데이트하기위한 다소 다른 멋진 기능을 제공하는 Canonical의 Landscape 라인을 따라 무엇을 기대하고 있는지 잘 모르겠습니다 .
daff December

다른 버전을 실행하는 서버의 경우 여기가 복잡해집니다. 퍼펫 매니페스트 내에 Facter를 사용하여 / etc에서 lsb_release 또는 debian_version 키워드를 검색 한 다음 설치할 패키지에 대한 결정을 내리는 다른 블록이 있어야합니다. 프로덕션 서버에서 Landscape가 분노에 사용되는 것을 보지 못했지만 상당히 비쌉니다.
Tom O'Connor

2
ensure => latest항상 저장소 세트가 제공하는 모든 것을 최신 상태로 유지합니다.
womble

18

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

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

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

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

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

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

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


5

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


또는 재생 시간이 긴 "yum update"실행 작업을 푸시하십시오. 어쨌든 나를 위해 작동합니다.
Sirex

5

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

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

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


4

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

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

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

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

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


2

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


2

우리는 꼭두각시 + apt-dater를 사용합니다.


1

Ubuntu / Debian 시스템을 관리하고 모니터링하도록 설계된 Canonicals Landscape와 같은 패키지 관리 도구를 사용할 수도 있습니다. 여러 시스템을 관리하고 동시에 시스템을 업데이트하고 몇 가지 기본 모니터링 기능을 제공합니다.


0

보안 업데이트

일반적으로 Ubuntu / Debian (또는 RHEL / CentOS)을위한 강력한 무인 업그레이드 패키지 를 설정하는 데 Ansible 또는 이와 유사한 것을 사용하는 것이 가장 간단하다고 생각합니다 yum-cron. Puppet, Chef 또는 기타 도구를 사용할 수 있지만 여기서 Ansible에 대해 설명하겠습니다.

  • unattended-upgrades 원하는 경우 비보안 업데이트를 동시에 수행하는 데 사용할 수 있습니다. 매일 Ansible을 통해 명령을 실행하는 것보다 훨씬 쉽습니다.

  • unattended-upgrades매일 자동 업데이트를 처리하며 일반적으로 보안 업데이트로 제한되어 있습니다 (안정성을 높이기 위해). 업데이트 후 서버를 재부팅해야하는 경우이 도구는 특정 시간에 자동 재부팅 할 수 있습니다.

재부팅이 더 복잡한 경우 unattended upgrades이메일을 보내 /var/run/reboot-required거나 생성 하여 Ansible (또는 이와 유사한)이 적절한 시간에 재부팅을 관리 할 수 ​​있도록합니다 (예 : 웹 또는 DB 서버 클러스터의 재부팅을 롤링하여 다운 타임을 피하고 각각을 기다립니다) 계속하기 전에 특정 TCP 포트에서 서버를 사용할 수있게됩니다.

Ubuntu / Debian 시스템의 경우 jnv.unattended-upgrades 또는 RHEL / CentOS를 다루는 간단하지만 효과적인 geerlingguy.security 와 같은 Ansible 역할을 사용할 수 있으며 SSH 구성을 강화할 수 있습니다.

빠른 보안 업데이트가 덜 중요한 경우에는 덜 중요한 서버에서 먼저 테스트 프로세스를 수행하고 unattended-upgrade테스트에 문제가없는 것으로 표시되면 명령을 실행할 수 있습니다. 경험.

일반 업데이트

보안 이외의 업데이트는 정상적인 지속적인 통합 및 테스트 프로세스를 거쳐 문제가 발생하지 않도록해야합니다.

aptitude safe-upgrade과거에는 서버에서 심각한 문제가 발생하는 것을 보았 으므로 보안 업데이트는 일반적으로 매우 안전하지만 자동으로 실행하지 않는 것이 가장 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.