운영체제 업그레이드 권장사항

이 문서에서는 Compute Engine 인스턴스에서 운영체제를 업그레이드하기 위한 권장사항과 전략을 설명합니다. 불변 인프라, 인스턴스 재생성 또는 인플레이스 워크플로를 사용하여 주요 OS 버전을 업그레이드하고 일상적인 보안 패치를 자동화하는 방법을 알아봅니다.

운영체제 버전의 지원 종료 (EOS) 또는 수명 종료 (EOL)가 임박한 경우 지원되는 OS 버전으로 업그레이드하여 보안 업데이트, 소프트웨어 호환성, Cloud de Confiance by S3NS 플랫폼 통합을 유지해야 합니다. 지원 단계에 대한 자세한 내용은 운영체제 수명 주기를 참고하세요.

인플레이스 주요 OS 버전 업그레이드의 위험

실행 중인 컴퓨팅 인스턴스에서 Debian 12에서 13으로, RHEL 9에서 10으로, Ubuntu 24.04에서 26.04로 업그레이드하는 등 운영체제의 주요 인플레이스 업그레이드를 실행하면 클라우드 환경에서 심각한 운영 위험이 발생합니다. 온프레미스 물리적 서버와 달리 컴퓨팅 인스턴스는 게스트 환경의 특수 패키지를 사용하여 하이퍼바이저 및 Compute Engine 메타데이터 서버와 통신합니다.

운영체제를 인플레이스 업그레이드하면 다음 장애 모드가 발생할 수 있습니다.

  • SSH 및 RDP 연결 손실: 네트워크 서비스, 게스트 수준 방화벽 규칙(예: ufw 또는 firewalld) 또는 SSH 데몬 설정의 구성 형식이 OS 버전 간에 변경되어 원격 관리 액세스가 차단될 수 있습니다.
  • 게스트 환경 중단: google-guest-agentgoogle-oslogin 패키지는 SSH 키, 사용자 계정, 네트워크 인터페이스, 메타데이터와의 동기화를 관리합니다. 배포 업그레이드 중에 패키지 저장소나 종속 항목이 중단되면 게스트 에이전트가 실행을 중지하여 추가 로그인이나 네트워크 구성이 차단될 수 있습니다.
  • 스토리지 및 커널 드라이버와의 비호환성: 커널, initramfs 또는 디스크 컨트롤러 (예: virtio-scsi 또는 NVMe) 드라이버가 변경되면 부팅이 실패하거나 컴퓨팅 인스턴스에서 연결된 영구 디스크 볼륨을 인식하지 못할 수 있습니다.
  • 저장소의 일관되지 않은 구성: 운영체제 공급업체는 기존 패키지 저장소와 서명 키를 지원 중단하거나 대체하는 경우가 많으며, 이로 인해 패키지 관리자가 업그레이드 중에 실패하고 운영체제가 복구할 수 없는 절반 설치 상태로 남을 수 있습니다.

이러한 위험을 방지하려면 프로덕션 컴퓨팅 인스턴스에서 OS 주 버전을 업그레이드하는 대신 불변 인프라 모델을 사용하세요.

적절한 업그레이드 전략 선택

워크로드가 스테이트리스(Stateless)인지 스테이트풀(Stateful)인지에 따라 다음 전략 중 하나를 선택합니다.

전략 추천 대상 다운타임 위험 롤백 메커니즘
변경 불가능한 인프라 스테이트리스 워크로드, 관리형 인스턴스 그룹 (MIG), 마이크로서비스, 컨테이너 호스트 순차적 교체를 통한 제로 다운타임 인스턴스 템플릿을 이전 이미지로 되돌리기
영구 디스크로 컴퓨팅 인스턴스 다시 만들기 스테이트풀(Stateful) 독립형 컴퓨팅 인스턴스, 보조 스토리지가 연결된 데이터베이스, 기존 애플리케이션 호스트 계획된 유지보수 기간이 있는 최소 원본 컴퓨팅 인스턴스에 디스크 다시 연결 또는 스냅샷 복원
OS 인플레이스 업그레이드 자동화하거나 로컬 구성을 추출할 수 없는 독립형 컴퓨팅 인스턴스 높음, 다운타임 및 수동 복구 계획 필요 영구 디스크 스냅샷에서 복원

변경 불가능한 인프라

운영체제를 업그레이드하는 가장 안전하고 안정적인 방법은 변경 불가능한 인프라 모델을 사용하는 것입니다. 실행 중인 컴퓨팅 인스턴스를 수정하는 대신 업데이트된 공개 또는 맞춤 OS 이미지에서 새 컴퓨팅 인스턴스를 빌드하고 기존 인스턴스를 바꿉니다.

워크로드가 관리형 인스턴스 그룹 (MIG)에서 실행되는 경우 서비스 다운타임 없이 이 출시를 자동화할 수 있습니다.

업데이트된 이미지 만들기

  1. 지원되는 운영체제 세부정보 목록에서 최신 공개 OS 이미지를 선택하거나 이미지 빌더 또는 Packer, Ansible과 같은 자동화 도구를 사용하여 맞춤 기본 이미지를 만듭니다.
  2. 비프로덕션 테스트 환경에서 새 OS 버전으로 애플리케이션과 종속 항목이 성공적으로 설치되고 실행되는지 확인합니다.
  3. 커스텀 OS 이미지를 만들거나 새 공개 이미지 계열을 참조합니다. 자세한 내용은 이미지 계열 권장사항을 참고하세요.

업데이트된 인스턴스 템플릿 만들기

업데이트된 OS 이미지를 참조하는 새 인스턴스 템플릿을 만듭니다.

gcloud compute instance-templates create NEW_TEMPLATE_NAME \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --machine-type=MACHINE_TYPE \
    --region=REGION

다음을 바꿉니다.

  • NEW_TEMPLATE_NAME: 새 인스턴스 템플릿의 이름입니다.
  • IMAGE_FAMILY: 대상 OS의 이미지 계열(예: debian-12 또는 ubuntu-2404-lts)
  • IMAGE_PROJECT: 이미지를 호스팅하는 프로젝트입니다(예: debian-cloud 또는 ubuntu-os-cloud).
  • MACHINE_TYPE: 인스턴스의 머신 유형입니다.
  • REGION: 템플릿을 만드는 Compute Engine 리전입니다.

MIG에서 순차적 교체 수행

업데이트된 템플릿을 관리형 인스턴스 그룹에 적용하고 순차적 교체를 시작합니다.

gcloud compute instance-groups managed rolling-action replace MIG_NAME \
    --max-surge=20% \
    --max-unavailable=0 \
    --region=REGION

다음을 바꿉니다.

  • MIG_NAME: 관리형 인스턴스 그룹의 이름입니다.
  • REGION: MIG가 있는 리전. 영역 MIG의 경우 --region=REGION--zone=ZONE으로 바꿉니다.

영구 디스크로 컴퓨팅 인스턴스 다시 만들기

애플리케이션이 Persistent Disk 볼륨에 구성과 데이터를 저장하는 스테이트풀 독립형 컴퓨팅 인스턴스를 실행하는 경우 데이터 디스크를 보존하면서 새 부팅 디스크로 컴퓨팅 인스턴스를 다시 만들어 운영체제를 업그레이드할 수 있습니다.

모든 디스크 백업

인프라를 수정하기 전에 부팅 디스크와 연결된 모든 Persistent Disk 볼륨의 표준 또는 리전 스냅샷을 만드세요.

gcloud compute disks snapshot BOOT_DISK_NAME \
    --snapshot-names=SNAPSHOT_NAME \
    --zone=ZONE

다음을 바꿉니다.

  • BOOT_DISK_NAME: 백업할 부팅 디스크의 이름입니다.
  • SNAPSHOT_NAME: 새 영구 디스크 스냅샷의 이름입니다.
  • ZONE: 디스크가 있는 영역입니다.

자세한 내용은 스냅샷 만들기 및 관리를 참고하세요.

애플리케이션 데이터를 부팅 디스크에서 분리

애플리케이션 데이터, 데이터베이스 파일, 트랜잭션 로그가 부팅 디스크가 아닌 보조 영구 디스크 볼륨이나 Cloud Storage, Cloud SQL과 같은 외부 서비스에 상주해야 합니다.

대체 컴퓨팅 인스턴스 만들기

  1. 데이터가 일관되게 유지되도록 기존 컴퓨팅 인스턴스를 중지합니다.

    gcloud compute instances stop LEGACY_INSTANCE_NAME --zone=ZONE
    
  2. 기존 컴퓨팅 인스턴스에서 보조 데이터 디스크를 분리합니다.

    gcloud compute instances detach-disk LEGACY_INSTANCE_NAME \
        --disk=DATA_DISK_NAME \
        --zone=ZONE
    
  3. 타겟 OS 버전으로 새 컴퓨팅 인스턴스를 만듭니다.

    gcloud compute instances create NEW_INSTANCE_NAME \
        --image-family=IMAGE_FAMILY \
        --image-project=IMAGE_PROJECT \
        --zone=ZONE \
        --machine-type=MACHINE_TYPE
    
  4. 기존 보조 데이터 디스크를 새 컴퓨팅 인스턴스에 연결합니다.

    gcloud compute instances attach-disk NEW_INSTANCE_NAME \
        --disk=DATA_DISK_NAME \
        --zone=ZONE
    
  5. 새 컴퓨팅 인스턴스에 연결하고, 데이터 디스크에 파일 시스템을 마운트하고, 애플리케이션 서비스를 시작합니다.

  6. 필요한 경우 고정 외부 IP 주소 또는 DNS 레코드를 다시 할당하여 새 컴퓨팅 인스턴스를 가리키도록 합니다.

다음을 바꿉니다.

  • LEGACY_INSTANCE_NAME: 업그레이드할 기존 컴퓨팅 인스턴스의 이름입니다.
  • DATA_DISK_NAME: 분리했다가 다시 연결할 보조 Persistent Disk 볼륨의 이름입니다.
  • NEW_INSTANCE_NAME: 새 교체 컴퓨팅 인스턴스의 이름입니다.
  • IMAGE_FAMILY: 타겟 OS 버전의 이미지 계열(예: debian-13 또는 ubuntu-2604-lts)
  • IMAGE_PROJECT: 이미지를 제공하는 프로젝트입니다(예: debian-cloud 또는 ubuntu-os-cloud).
  • MACHINE_TYPE: 새 컴퓨팅 인스턴스의 머신 유형입니다.
  • ZONE: 컴퓨팅 인스턴스가 있는 영역입니다.

인플레이스 OS 업그레이드

복잡한 수동 구성으로 인해 컴퓨팅 인스턴스를 다시 만들 수 없고 현재 위치 업그레이드를 실행해야 하는 경우 업그레이드 전 검사를 완료하고 배포별 안내를 주의 깊게 따르세요.

업그레이드 전 체크리스트

인플레이스 업그레이드를 시작하기 전에 이 체크리스트의 모든 단계를 완료하세요.

  1. 업그레이드 명령어를 실행하기 전에 부팅 디스크의 스냅샷을 만듭니다. 이는 업그레이드가 실패할 경우 기본 복구 메커니즘입니다.
  2. Cloud de Confiance의 모든 현재 패키지와 게스트 환경을 현재 OS 버전에 사용할 수 있는 최신 버전으로 업데이트합니다.

    • Debian 및 Ubuntu: sudo apt update && sudo apt dist-upgrade -y
    • RHEL, CentOS, Rocky Linux: sudo dnf upgrade -y
    • SLES: sudo zypper update

    google-guest-agentgoogle-oslogin 패키지가 활성 상태인지 확인합니다.

    sudo systemctl status google-guest-agent
    
  3. 업그레이드 중에 SSH 또는 네트워킹이 작동하지 않는 경우 문제를 해결하고 로그인할 수 있도록 컴퓨팅 인스턴스에서 양방향 직렬 콘솔을 사용 설정합니다.

    gcloud compute instances add-metadata INSTANCE_NAME \
        --metadata=serial-port-enable=TRUE \
        --zone=ZONE
    

    다음을 바꿉니다.

    • INSTANCE_NAME: 컴퓨팅 인스턴스의 이름입니다.
    • ZONE: 컴퓨팅 인스턴스가 있는 영역입니다.

    자세한 내용은 직렬 콘솔과 상호작용을 참고하세요.

  4. 게스트 에이전트에서 관리하는 OS 로그인 또는 SSH 키를 사용하는 경우 업그레이드 중에 OS 로그인을 일시적으로 사용할 수 없는 경우 직렬 콘솔을 통해 로그인할 수 있도록 sudo passwd USERNAME와 같이 관리 권한이 있는 로컬 사용자 계정의 비밀번호를 설정합니다. USERNAME을 로컬 사용자 계정의 이름으로 바꿉니다.

  5. 루트 파티션 /과 부팅 파티션 /boot에 새 패키지를 다운로드하고 압축 해제할 수 있는 충분한 여유 공간이 있는지 확인합니다(최소 5GB 권장).

    df -h / /boot
    
  6. 보안, 백업 또는 모니터링을 위한 서드 파티 에이전트(Google Cloud 운영 에이전트 포함)가 대상 버전의 운영체제를 지원하는지 확인합니다.

인플레이스 업그레이드 절차

다음 섹션에서는 일반적인 운영체제에 대한 대략적인 워크플로를 제공합니다. 업그레이드하기 전에 항상 운영체제의 공식 업그레이드 문서를 참고하세요.

Debian

연속된 주요 버전 간에 Debian을 업그레이드할 수 있습니다. 주 버전을 건너뛰지 마세요. 예를 들어 먼저 Debian 11을 12로 업그레이드한 다음 Debian 12를 13으로 업그레이드하세요.

  1. 기존 Debian 패키지 저장소를 업데이트합니다.

    sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y
    
  2. /etc/apt/sources.list/etc/apt/sources.list.d/에서 현재 출시 코드명(예: bullseye)을 타겟 출시 코드명(예: bookworm)으로 바꿔 패키지 소스를 업데이트합니다. Cloud de Confiance 패키지 저장소 URL이 새 버전과 일치하는지 확인합니다.

  3. 최소 업그레이드를 실행하여 핵심 패키징 도구를 업데이트합니다.

    sudo apt update
    sudo apt upgrade --without-new-pkgs -y
    
  4. 전체 배포 업그레이드를 실행합니다.

    sudo apt full-upgrade -y
    
  5. google-guest-agent이 활성 상태이고 사용 설정되어 있는지 확인합니다.

    sudo systemctl enable --now google-guest-agent
    
  6. 컴퓨팅 인스턴스를 재부팅합니다.

    sudo systemctl reboot
    

Ubuntu

Ubuntu에서 LTS-LTS 업그레이드를 관리하려면 do-release-upgrade 도구를 사용하세요.

  1. 현재 패키지를 모두 업데이트합니다.

    sudo apt update && sudo apt dist-upgrade -y
    
  2. 업데이트 관리자의 핵심 패키지를 설치합니다.

    sudo apt install update-manager-core -y
    
  3. 버전 업그레이드 도구를 시작합니다.

    sudo do-release-upgrade
    
  4. 대화형 프롬프트에 따라 저장소 업데이트와 패키지 교체를 확인합니다. 수정된 구성 파일에 관한 메시지가 표시되면 덮어쓰기 전에 차이점을 주의 깊게 검토하세요.

  5. 메시지가 표시되면 컴퓨팅 인스턴스를 재부팅합니다.

RHEL

주 RHEL 버전 간에 업그레이드하려면 지원되는 Red Hat leapp 유틸리티를 사용하세요.

  1. Red Hat 구독 상태를 확인하고 컴퓨팅 인스턴스가 Compute Engine Red Hat Update Infrastructure (RHUI)에 연결되어 있는지 확인합니다.
  2. Leapp 유틸리티와 이전 데이터가 포함된 패키지를 설치합니다.
  3. 업그레이드 전 평가를 실행합니다.

    sudo leapp preupgrade
    
  4. /var/log/leapp/leapp-report.txt에서 보고서를 검토하고 Leapp에서 식별한 모든 차단기 문제를 해결합니다.

  5. 업그레이드를 실행합니다.

    sudo leapp upgrade
    
  6. 인스턴스를 재부팅하여 Leapp이 격리된 환경에서 OS 업그레이드를 실행하도록 합니다.

    sudo reboot
    

SLES

SLES에서 메이저 버전 서비스 팩 마이그레이션 및 배포 업그레이드를 실행하려면 zypper를 사용하세요.

  1. 기존 시스템을 업데이트합니다.

    sudo zypper patch
    
  2. zypper migration를 실행하여 온라인 마이그레이션을 수행하거나 SLES 업그레이드 문서에 지정된 zypper dup를 사용하여 배포 업그레이드 워크플로를 따릅니다.

Windows

Windows Server 컴퓨팅 인스턴스의 경우 Compute Engine 볼륨 라이선스 및 PowerShell 스크립트가 포함된 설치 미디어를 사용하여 수동 개입 없이 업그레이드를 자동화할 수 있습니다.

Windows Server에서 인플레이스 업그레이드를 수행하려면 튜토리얼에 따라 Windows Server의 인플레이스 업그레이드를 수행하세요.

부 업데이트의 패치 관리 자동화

주 OS 버전 업그레이드와 일상적인 부 업데이트 및 보안 패치를 구분합니다. 소프트웨어의 정기 유지보수, 패키지 업데이트, CVE 패치의 경우 VM Manager 패치를 사용하여 컴퓨팅 인스턴스 전체에 패치 배포를 자동화합니다.

다음 권장사항에 따라 패치를 자동으로 관리하세요.

  • 라벨로 인스턴스 정리: env:dev, env:prod, tier:frontend과 같은 메타데이터가 있는 라벨을 패치를 적용할 특정 컴퓨팅 인스턴스 그룹에 할당합니다.
  • 영역별 배포: 영역 및 리전 간에 패치 작업을 분산합니다. 프로덕션 환경에서는 모든 영역에 동시에 패치 작업을 적용하면 안 됩니다.
  • 사전 패치 및 사후 패치 스크립트 사용: 연결을 안전하게 드레인하거나 서비스를 일시중지하도록 사전 패치 스크립트를 구성하고, 인스턴스를 서비스로 반환하기 전에 상태 점검을 실행하도록 사후 패치 스크립트를 구성합니다.
  • 패치 규정 준수 모니터링:Cloud de Confiance 콘솔의 VM Manager 대시보드를 사용하여 컴퓨팅 인스턴스 전체에서 패치 규정 준수 및 취약점 상태를 추적합니다.

자세한 내용은 패치 작업 만들기를 참고하세요.

업그레이드 후 확인 및 문제 해결

업그레이드를 완료한 후 다음 확인 단계를 실행합니다.

  1. SSH 또는 RDP가 정상적으로 연결되는지 확인합니다.
  2. 게스트 에이전트와 OS 로그인 서비스가 활성 상태이고 정상 상태를 보고하는지 확인합니다.

    sudo systemctl status google-guest-agent
    sudo systemctl status google-oslogin-cache
    
  3. 컴퓨팅 인스턴스가 인스턴스 메타데이터 서버를 쿼리할 수 있는지 확인합니다.

    curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/id
    
  4. 애플리케이션 서비스가 시작되었는지, 부하 분산기의 상태 점검에서 정상 인스턴스가 보고되는지 확인합니다.

연결 끊김 문제 해결

현재 위치 업그레이드 후 컴퓨팅 인스턴스에 대한 SSH 또는 RDP 액세스 권한이 손실된 경우 다음 문제 해결 단계를 완료하세요.

  1. 콘솔 로그에서 커널 패닉, 서비스 시작 중 오류 또는 네트워크 초기화 중 오류를 확인합니다.

    gcloud compute instances tail-serial-port-output INSTANCE_NAME \
        --zone=ZONE
    
  2. 업그레이드 전에 대화형 직렬 콘솔을 사용 설정한 경우 터미널에 직접 연결합니다.

    gcloud compute connect-to-serial-port INSTANCE_NAME \
        --zone=ZONE
    

    로컬 사용자 인증 정보를 사용하여 로그인하고 journalctl -xe로 시스템 로그를 검사하고 네트워킹 또는 google-guest-agent 서비스를 다시 시작합니다.

    다음을 바꿉니다.

    • INSTANCE_NAME: 문제를 해결할 컴퓨팅 인스턴스의 이름입니다.
    • ZONE: 컴퓨팅 인스턴스가 있는 영역입니다.
  3. 운영체제를 부팅하거나 복구할 수 없는 경우 업그레이드 전에 만든 스냅샷에서 새 영구 디스크 볼륨을 만들고 이를 컴퓨팅 인스턴스의 부팅 디스크로 연결합니다. 자세한 복구 단계는 스냅샷을 새 디스크에 복원을 참고하세요.

다음 단계