10.4. 에지 이미지용 RHEL 롤백

RHEL for Edge는 운영 체제에 트랜잭션 업데이트를 적용하기 때문에 수동으로 또는 실패한 업데이트를 마지막 알려진 양호한 상태로 자동 롤백하여 업데이트 중에 시스템 실패를 방지할 수 있습니다. greenboot 프레임워크를 사용하여 확인 및 롤백 프로세스를 자동화할 수 있습니다.

greenboot 상태 점검 프레임워크는 rpm-ostree 를 활용하여 시스템 시작 시 사용자 정의 상태 점검을 실행합니다. 문제가 발생하면 시스템이 마지막 작동 상태로 롤백됩니다. rpm-ostree 업데이트를 배포할 때 스크립트를 실행하여 업데이트 후에도 중요한 서비스가 계속 작동할 수 있는지 확인합니다. 예를 들어 일부 실패한 패키지로 인해 시스템이 작동하지 않는 경우 시스템을 이전 안정된 시스템 버전으로 롤백할 수 있습니다. 이 프로세스를 통해 엣지 장치용 RHEL이 운영 상태에 있습니다.

이미지를 업데이트한 후 이전 이미지 배포를 유지하면서 새 이미지 배포를 생성합니다. 업데이트가 성공했는지 확인할 수 있습니다. 예를 들어 실패한 패키지로 인해 업데이트에 실패한 경우 시스템을 이전 안정 버전으로 롤백할 수 있습니다.

10.4.1. greenboot 검사 소개

Greenbootrpm-ostree 기반 시스템에서 systemd 를 사용할 수 있는 일반 상태 점검 프레임워크입니다. 시스템에 설치할 수 있는 다음 RPM 패키지가 포함되어 있습니다.

  • greenboot - 다음 기능이 포함된 패키지입니다.

    • 제공된 스크립트 확인
    • 검사에 실패하면 시스템 재부팅
    • 이전 배포로 롤백하면 재부팅 시 문제가 해결되지 않았습니다.
  • greenboot-default-health-checks - 녹색 부팅 시스템 유지 관리자가 제공하는 선택적 및 선택된 상태 점검 세트입니다.

Greenboot 는 시스템에서 실행되는 상태 점검 스크립트를 사용하여 시스템 상태를 평가하고 일부 소프트웨어가 실패하는 경우 마지막 정상 상태로 롤백을 자동화하여 RHEL for Edge 시스템에서 작동합니다. 이러한 상태 점검 스크립트는 /etc/greenboot/check/required.d 디렉토리에서 사용할 수 있습니다. Greenboot 는 상태 점검을 위해 쉘 스크립트를 지원합니다. 상태 점검 프레임워크가 있으면 소프트웨어 문제를 확인하고 직접 서비스 가능성이 제한되거나 존재하지 않는 에지 장치에서 시스템 롤백을 수행해야 하는 경우 특히 유용합니다. 상태 점검 스크립트를 설치하고 구성할 때 시스템이 시작될 때마다 상태 점검을 트리거합니다.

자체 상태 점검 스크립트를 생성하여 워크로드 및 애플리케이션의 상태를 평가할 수 있습니다. 이러한 추가 상태 점검 스크립트는 소프트웨어 문제 검사 및 자동 시스템 롤백의 유용한 구성 요소입니다.

참고

OSTree를 사용하지 않는 시스템에서 상태 점검 실패의 경우 롤백을 사용할 수 없습니다.

10.4.2. RHEL for Edge 이미지가 greenboot로 롤백

Edge 이미지용 RHEL을 사용하면 트랜잭션 업데이트만 운영 체제에 적용됩니다. 트랜잭션 업데이트는 atomic이므로 모든 업데이트가 성공적으로 수행되고 롤백이 지원되는 경우에만 업데이트가 적용됩니다. 트랜잭션 업데이트를 사용하면 실패한 업데이트를 마지막으로 알려진 양호한 상태로 쉽게 롤백하여 업데이트 중에 시스템 실패를 방지할 수 있습니다.

상태 점검을 수행하는 것은 소프트웨어 문제를 확인하고 직접 서비스 가능성이 제한되거나 존재하지 않는 에지 장치에서 시스템 롤백을 수행해야 하는 경우 특히 유용합니다.

참고

상태 점검이 실행될 수 있더라도 OSTree를 사용하지 않는 시스템에서 롤백을 사용할 수 없습니다.

greenboot 상태 점검 프레임워크와 함께 지능형 롤백을 사용하여 시스템이 시작될 때마다 시스템 상태를 자동으로 평가할 수 있습니다. greenboot-default-health-checks 하위 패키지에서 사전 구성된 상태를 가져올 수 있습니다. 이러한 검사는 rpm-ostree 시스템의 /usr/lib/greenboot/check 읽기 전용 디렉터리에 있습니다.

Greenbootrpm-ostree 를 활용하고 시스템 시작 시 실행되는 사용자 정의 상태 점검을 실행합니다. 문제가 발생하는 경우 시스템은 변경 사항을 롤백하고 마지막 작업 상태를 유지합니다. rpm-ostree 업데이트를 배포할 때 스크립트를 실행하여 업데이트 후에도 중요한 서비스가 계속 작동할 수 있는지 확인합니다. 시스템이 작동하지 않으면 업데이트가 시스템의 마지막 알려진 작업 버전으로 롤백됩니다. 이 프로세스를 통해 엣지 장치용 RHEL이 운영 상태에 있습니다.

greenboot-default-health-checks'subpackage에서 사전 구성된 상태를 가져올 수 있습니다. 이러한 검사는 rpm-ostree 시스템의 '/usr/lib/greenboot/check 읽기 전용 디렉터리에 있습니다. 쉘 스크립트를 다음 유형의 검사로 구성할 수도 있습니다.

예 10.1. greenboot 디렉터리 구조

etc
└─ greenboot
   ├─ check
   |   └─ required.d
   |   └─ init.py
   └─ green.d
   └─ red.d
필수 항목
실패하지 않아야 하는 상태 점검을 포함합니다. 필요한 쉘 스크립트를 /etc/greenboot/check/required.d 디렉토리에 배치합니다. 스크립트가 실패하면 greenboot에서 기본적으로 세 번 재시도합니다. GREENBOOT_MAX_BOOTS 매개변수를 원하는 재시도 횟수로 설정하여 /etc/greenboot/greenboot.conf 파일에서 재시도 횟수를 구성할 수 있습니다.

모든 재시도에 실패한 후 greenboot 는 사용 가능한 경우 롤백을 자동으로 시작합니다. 롤백을 사용할 수 없는 경우 시스템 로그 출력에 수동 조작이 필요함이 표시됩니다.

원하는 경우
시스템이 롤백되지 않고 실패할 수 있는 상태 점검을 포함합니다. /etc/greenboot/check/wanted.d 디렉토리에 쉘 스크립트를 배치합니다. Greenboot 는 스크립트가 실패하고 시스템 상태가 영향을 받지 않고 롤백을 수행하지 않음을 알려줍니다.

검사 후 실행할 쉘 스크립트를 지정할 수도 있습니다.

녹색
성공적으로 부팅된 후 실행할 스크립트가 포함되어 있습니다. 이 스크립트를 /etc/greenboot/green.d'directory 에 배치합니다. Greenboot 는 부팅이 성공했음을 알려줍니다.
빨간색
부팅 실패 후 실행할 스크립트가 포함되어 있습니다. 이 스크립트를 /etc/greenboot/red.d 디렉토리에 배치합니다. 시스템은 세 번 부팅하려고 시도하며 오류가 발생하는 경우 스크립트를 실행합니다. Greenboot 는 부팅이 실패했음을 알려줍니다.

다음 다이어그램은 에지 이미지 롤백 프로세스의 RHEL을 보여줍니다.

이미지 복원 프로세스

업데이트된 운영 체제를 부팅한 후 greenbootrequired.dwanted.d 디렉토리에서 스크립트를 실행합니다. required.d 디렉토리에서 스크립트가 실패하면 greenboot빨간색.d 디렉터리에서 스크립트를 실행한 다음 시스템을 재부팅합니다.

Greenboot 를 사용하면 업그레이드된 시스템에서 2번 부팅을 더 시도합니다. 세 번째 부팅 중에 required.d 의 스크립트가 계속 실패하는 경우 greenboot red.d 스크립트를 마지막으로 실행하여 문제를 해결하기 위한 수정 작업을 수행하려고 시도했으며 성공하지 못했습니다. 그런 다음 greenboot 는 현재 rpm-ostree 배포에서 이전 안정적인 배포로 시스템을 롤백합니다.

10.4.3. Greenboot 상태 점검 상태

업데이트된 시스템을 배포할 때 greenboot가 시스템을 이전 상태로 롤백하면 변경 사항이 손실되지 않도록 greenboot 상태 점검이 완료될 때까지 기다립니다. 구성을 변경하거나 애플리케이션을 배포하려면 greenboot 상태 점검이 완료될 때까지 기다려야 합니다. 이렇게 하면 greenboot가 rpm-ostree 시스템을 이전 상태로 롤백하면 변경 사항이 손실되지 않습니다.

greenboot-healthcheck 서비스는 한 번 실행한 다음 종료됩니다. 서비스 상태를 확인하여 다음 명령을 사용하여 서비스 상태를 확인하고 결과를 확인할 수 있습니다.

systemctl is-active greenboot-healthcheck.service
이 명령은 서비스가 종료되면 활성 상태를 보고합니다. 서비스가 실행되지 않은 경우 비활성 상태로 표시됩니다.
systemctl show --property=SubState --value greenboot-healthcheck.service
완료되면 보고서 가 종료되고 계속 실행되는 동안 보고서가 종료 되었습니다.
systemctl show --property=Result --value greenboot-healthcheck.service
검사가 통과되었을 때 성공을 보고합니다.
systemctl show --property=ExecMainStatus --value greenboot-healthcheck.service
0은 서비스의 숫자 종료 코드를 보고하며 0이 아닌 값은 실패가 발생했음을 의미합니다.
cat /run/motd.d/boot-status
에는 "Boot Status is GREEN - Health Check SUCCESS"와 같은 메시지가 표시됩니다.

10.4.4. greenboot 상태 점검 상태 확인

시스템을 변경하기 전 또는 문제 해결 중에 greenboot 상태 점검 상태를 확인합니다. 다음 명령을 사용하여 greenboot 스크립트 실행이 완료되었는지 확인할 수 있습니다.

  • 다음 옵션 중 하나를 사용하여 상태를 확인합니다.

    • 상태 점검 상태 보고서를 보려면 다음을 입력합니다.

      $ systemctl show --property=SubState --value greenboot-healthcheck.service

      다음 출력이 가능합니다.

      • start 는 greenboot 검사가 여전히 실행 중임을 의미합니다.
      • exited 는 검사가 통과되었으며 greenboot가 종료되었음을 의미합니다. Greenboot는 시스템이 정상 상태인 경우 green.d 디렉토리에서 스크립트를 실행합니다.
      • 실패 란 검사가 통과되지 않았음을 의미합니다. Greenboot는 시스템이 이 상태에 있을 때 빨간색.d 디렉토리로 스크립트를 실행하고 시스템을 다시 시작할 수 있습니다.
    • 서비스의 숫자 종료 코드를 표시하는 보고서를 보려면 0은 성공과 0 이 아닌 값이 실패했음을 의미합니다. 다음 명령을 사용합니다.

      $ systemctl show --property=ExecMainStatus --value greenboot-healthcheck.service
    • 부팅 상태에 대한 메시지(예: Boot Status is GREEN - Health Check SUCCESS )를 표시하는 보고서를 보려면 다음을 입력합니다.

      $ cat /run/motd.d/boot-status

10.4.5. RHEL for Edge 이미지 수동 롤백

운영 체제를 업그레이드하면 새 배포가 생성되고 rpm-ostree 패키지도 이전 배포를 유지합니다. 업데이트된 버전의 운영 체제에 문제가 있는 경우 단일 rpm-ostree 명령을 사용하여 이전 배포로 또는 GRUB 부트 로더에서 이전 배포를 선택하여 수동으로 롤백할 수 있습니다.

이전 버전으로 수동으로 롤백하려면 다음 단계를 수행합니다.

사전 요구 사항

  1. 시스템을 업데이트하고 실패했습니다.

절차

  1. 선택 사항: 실패 오류 메시지를 확인합니다.

    $ journalctl -u greenboot-healthcheck.service.
  2. 롤백 명령을 실행합니다.

    # rpm-ostree rollback

    명령 출력은 이동 중인 커밋 ID에 대한 세부 정보를 제공하고 제거 중인 패키지의 세부 정보와 함께 완료된 트랜잭션을 표시합니다.

  3. 시스템을 재부팅합니다.

    # systemctl reboot

    명령은 안정적인 콘텐츠를 사용하여 이전 커밋을 활성화합니다. 변경 사항이 적용되고 이전 버전이 복원됩니다.

10.4.6. 자동화된 프로세스를 사용하여 에지 이미지용 RHEL 롤백

Greenboot 검사에서는 부팅 프로세스에 통합된 프레임워크를 제공하고 상태 점검에 실패할 때 rpm-ostree 롤백을 트리거할 수 있습니다. 상태 점검의 경우 상태 점검이 통과되었는지 또는 실패했는지 여부를 나타내는 사용자 지정 스크립트를 생성할 수 있습니다. 결과에 따라 롤백이 트리거되는 시기를 결정할 수 있습니다. 다음 절차에서는 상태 점검 스크립트 예제를 생성하는 방법을 보여줍니다.

절차

  1. 표준 종료 코드 0 을 반환하는 스크립트를 생성합니다.

    예를 들어 다음 스크립트는 구성된 DNS 서버를 사용할 수 있는지 확인합니다.

    #!/bin/bash
    
    DNS_SERVER=$(grep ^nameserver /etc/resolv.conf | head -n 1 | cut -f2 -d" ")
    COUNT=0
    # check DNS server is available
    ping -c1 $DNS_SERVER
    while [ $? != '0' ] && [ $COUNT -lt 10 ]; do
    ((COUNT++))
    echo "Checking for DNS: Attempt $COUNT ."
    sleep 10
    ping -c 1 $DNS_SERVER
    done
  2. /etc/greenboot/check/required.d/ 에서 상태 점검을 위한 실행 파일을 포함합니다.

    chmod +x check-dns.sh

    다음 재부팅 중에 스크립트는 시스템이 boot-complete.target 유닛에 입력하기 전에 부팅 프로세스의 일부로 실행됩니다. 상태 점검에 성공하면 조치가 취해지지 않습니다. 상태 점검이 실패하면 업데이트를 실패로 표시하고 이전 업데이트로 롤백하기 전에 시스템을 여러 번 재부팅합니다.

검증 단계

기본 게이트웨이에 연결할 수 있는지 확인하려면 다음 상태 점검 스크립트를 실행합니다.

  1. 표준 종료 코드 0 을 반환하는 스크립트를 생성합니다.

    #!/bin/bash
    
    DEF_GW=$(ip r | awk '/^default/ {print $3}')
    SCRIPT=$(basename $0)
    
    count=10
    connected=0
    ping_timeout=5
    interval=5
    
    while [ $count -gt 0 -a $connected -eq 0 ]; do
      echo "$SCRIPT: Pinging default gateway $DEF_GW"
      ping -c 1 -q -W $ping_timeout $DEF_GW > /dev/null 2>&1 && connected=1 || sleep $interval
      ((--count))
    done
    
    if [ $connected -eq 1 ]; then
      echo "$SCRIPT: Default gateway $DEF_GW is reachable."
      exit 0
    else
      echo "$SCRIPT: Failed to ping default gateway $DEF_GW!" 1>&2
      exit 1
    fi
  2. /etc/greenboot/check/required.d/ 디렉터리에 상태 점검을 위한 실행 파일을 포함합니다.

    chmod +x check-gw.sh