Podman 컨테이너의 자동 업데이트를 활성화하는 방법

Podman 컨테이너의 자동 업데이트를 활성화하는 방법

Podman은 Docker 대신 자주 사용되는 OCI 호환 컨테이너화 플랫폼입니다. 데몬이 없는 모델과 광범위한 기능 세트는 개발 및 프로덕션 모두에서 사용하기에 좋은 후보입니다.

이 기사에서는 새 이미지가 출시될 때 Podman의 자동 업데이트 시스템을 사용하여 컨테이너를 다시 시작하는 방법을 보여줍니다. Podman은 업데이트를 주기적으로 확인하고, 최신 이미지를 가져오고, 현재 설정을 사용하여 영향을 받는 컨테이너를 재생성하도록 구성할 수 있습니다.

컨테이너를 자동으로 업데이트하는 이유는 무엇입니까?

컨테이너는 수명이 짧은 경우가 많지만 여전히 정기적인 유지 관리가 필요합니다. 이미지 내의 치명적인 취약점으로 인해 공격자가 애플리케이션에 액세스할 수 있으며, 이는 발견된 후 몇 시간 이내에 악용됩니다.

널리 사용되는 대부분의 컨테이너 기술에서는 컨테이너를 수동으로 업데이트해야 합니다. 이것은 릴리스 발표에 등록하고 새로운 변경 사항을 구현하는 도구를 구축하는 작업 팀에 책임이 있습니다.

Podman의 내장 컨테이너 업데이트 시스템은 이 문제를 해결하고 워크로드를 최신 상태로 유지합니다. 새 이미지 버전이 푸시된 후 컨테이너를 빠르게 업데이트할 수 있으므로 배포가 최신 패치 및 버그 수정으로 최신 상태인지 확인할 수 있습니다.

자동 업데이트 활성화

io.containers.autoupdate컨테이너 가 생성될 때 레이블 을 설정하면 컨테이너에 대한 자동 업데이트가 활성화됩니다 .

$ podman run -d -p 8080:80 \

–name nginx-container\

–label io.containers.autoupdate=레지스트리 \

docker.io/library/nginx:latest

레이블에는 두 가지 가능한 값이 있을 수 있습니다.

  • registry– 업데이트를 확인하는 동안 Podman은 이미지 레지스트리를 확인하여 컨테이너에서 사용하는 태그의 새 버전을 사용할 수 있는지 확인합니다. 이 경우 이미지가 추출되고 컨테이너가 다시 시작됩니다. 레지스트리 업데이트는 레지스트리의 전체 경로를 사용하는 경우에만 작동합니다. docker.io/library/nginx:latest위에 표시된 링크 nginx:latest는 너무 모호하므로 의도적인 것입니다.
  • local– 이 업데이트 방법은 Podman이 호스트의 파일 시스템에 이미 존재하는 컨테이너 이미지를 볼 수 없도록 합니다. 이미지 태그의 로컬 버전이 컨테이너가 실행 중인 버전과 다른 경우 컨테이너가 다시 시작됩니다. 이는 개발 중에 이미지를 다시 빌드할 때 유용할 수 있습니다.

레이블이 있으면 이 샘플 NGINX 컨테이너가 자동 업데이트에 적합합니다. 그러나 업데이트를 실제로 적용하려면 더 많은 작업이 필요합니다.

시스템 서비스 생성

Podman의 업데이트 메커니즘을 사용하려면 컨테이너가 시스템 서비스 내에서 실행되어야 합니다. Podman은 데몬이 없기 때문에 컨테이너를 시작하고 중지할 수 있는 중앙 컨트롤러가 없습니다. 시스템 서비스로 래핑하면 수명 주기 관리 기능과 특정 이벤트에 대한 응답으로 다시 시작하는 기능이 제공됩니다.

Podman CLI에는 컨테이너에서 systemd 모듈 정의를 생성하는 명령이 포함되어 있습니다.

$ podman generate systemd --name nginx-container > /etc/systemd/system/nginx-container.service

위의 명령은 올바른 위치에 systemd 서비스가 있는 새 NGINX 컨테이너를 만듭니다.

그런 다음 systemd를 다시 로드하여 서비스 정의를 등록한 다음 서비스를 활성화하고 시작합니다.

$ systemctl daemon-reload

$ systemctl nginx-container.service 활성화

$ systemctl start nginx-container.service

NGINX 컨테이너는 이제 호스트가 부팅될 때 자동으로 시작되는 시스템 서비스입니다. systemctlPodman CLI 대신 명령을 사용하여 컨테이너를 시작 및 중지할 수 있습니다 .

$ systemctl start nginx-container.service

$ systemctl stop nginx-container.service

나중에 컨테이너를 제거하려면 서비스 모듈 파일을 중지, 비활성화 및 삭제해야 합니다. 그런 다음 systemd를 다시 시작하여 변경 사항을 완전히 적용하십시오.

$ systemctl stop nginx-container.service

$ systemctl nginx-container.service 비활성화

$ rm /etc/systemd/system/nginx-container.service

$ systemctl daemon-reload

업데이트 수행

이제 NGINX 컨테이너의 성공적인 자동 업데이트를 위해 모든 것이 설정되었습니다. Podman 명령을 사용하여 주문형 업데이트 확인을 실행할 수 있습니다 auto-update.

$ podman auto-update

docker.io/library/nginx:latest를 가져오는 중…

이미지 소스 서명 가져오기

단위 컨테이너 이미지 정책 업데이트됨

nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry true

이것은 명령을 실행하는 사용자가 사용할 수 있는 systemd 서비스의 컨테이너를 업데이트합니다. sudo위의 예를 따르기 위해 를 사용해야 할 수도 있습니다 . 그렇다면 auto-update루트로도 명령을 실행하십시오.

$ sudo podman auto-update

이 예 에서는 registry업데이트 전략이 사용되었으므로 Podman은 이미지 레지스트리에 연결하고 변경 사항을 확인한 다음 해당하는 경우 새 이미지를 가져옵니다. 명령 출력은 각 서비스 컨테이너가 업그레이드되었는지 여부를 보여줍니다.

컨테이너는 systemd에서 관리하기 때문에 Podman은 새 컨테이너가 성공적으로 시작되었는지 확인할 수 있습니다. Podman은 업그레이드 실패가 감지되면 자동으로 이전 버전의 이미지로 롤백합니다. 이것이 안정적으로 작동하려면 컨테이너 내부의 응용 프로그램 이 성공적으로 시작되었음을 systemd에 알려야 합니다 . 이것은 실행하여 수행할 수 있습니다 systemd-notify --ready.

업데이트 확인

때때로 업데이트를 즉시 적용하지 않고 컨테이너 플릿에 사용할 수 있는지 확인하고 싶을 수 있습니다. flag 명령을 사용 auto-update하여 --dry-run업데이트된 이미지가 게시되는 서비스 목록을 가져옵니다.

$ podman auto-update --dry-run

단위 컨테이너 이미지 정책 업데이트됨

nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry pending

표시된 서비스 pending에 사용 가능한 업데이트가 있습니다.

일정에 따라 업데이트 적용

이제 주문형 컨테이너 업데이트를 성공적으로 구성했습니다. 새 이미지를 수동으로 가져오거나 컨테이너를 다시 시작할 필요가 없습니다. auto-update마지막 단계는 Podman이 명령 을 실행하지 않고 주기적으로 업데이트를 적용하도록 일정을 설정하는 것 입니다.

대부분의 Podman 배포판에는 이를 위한 시스템 타이머가 포함되어 있습니다. 다음 을 사용하여 타이머를 활성화할 수 있습니다 systemctl.

$ systemctl enable podman-auto-update.timer

타이머는 매일 업데이트를 확인하도록 설정되어 있습니다. 다음을 사용하고 필드systemctl edit 값 을 변경 하여 타이머 파일을 열어 일정을 사용자 정의할 수 있습니다 .OnCalendar

$ systemctl edit podman-auto-update.timer

[시간제 노동자]

OnCalendar=Fri *-*-* 18:00

위에 표시된 시간 표현식은 매주 금요일 18:00에 업데이트 확인을 실행합니다. 구문 은 systemd 매뉴얼에 설명되어 있습니다 .

이제 타이머가 활성화되었으므로 io.containers.autoupdate레이블이 지정된 컨테이너 배포를 시작할 수 있습니다. 정기적으로 업데이트되고 다시 시작되어 유지 관리 절차가 자동화됩니다.

업데이트를 예약하기 위해 Podman의 시스템 타이머를 사용할 필요가 없습니다. podman auto-update기존 툴킷 또는 와 같은 다른 작업 스케줄러 내 에서 실행할 수 있습니다 cron.

요약

자동 Podman 업데이트를 사용하면 컨테이너를 수동으로 다시 시작하거나 외부 도구를 사용하지 않고도 새 이미지 버전으로 이동할 수 있습니다. 이렇게 하면 이미지가 버그 수정 및 보안 수정을 릴리스할 때 컨테이너 집합을 유지 관리하는 데 도움이 될 수 있습니다.

자동 업데이트는 유용한 도구이지만 적절한 주의 없이 사용해서는 안 됩니다. 자동 업데이트를 허용하면 손상된 이미지가 실수로 릴리스되는 경우 자체 문제가 발생할 수 있습니다. 자체적으로 다시 시작되는 컨테이너로 인해 다운타임이 발생하거나 종속 서비스가 중단될 수도 있습니다.

따라서 이 솔루션을 구현하기 전에 자체 애플리케이션의 적합성을 평가해야 합니다. 한 가지 중간 방법은 auto-update --dry-run주기적으로 실행하고 결과를 모니터링 서비스로 보내는 것입니다. 이는 승인 없이 적용될 위험 없이 사용 가능한 업데이트를 알려줍니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다