本文說明在 Compute Engine 執行個體上升級作業系統的最佳做法和策略。瞭解如何使用不可變動的基礎架構、重新建立執行個體或就地工作流程,升級主要作業系統版本,以及如何自動執行例行安全性修補作業。
當作業系統版本即將終止支援 (EOS) 或終止服務 (EOL) 時,您必須升級至支援的作業系統版本,才能繼續取得安全性更新、維持軟體相容性,以及 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-agent和google-oslogin套件會管理 SSH 金鑰、使用者帳戶、網路介面,以及與中繼資料的同步作業。如果套件存放區或依附元件在發布升級期間中斷,客體代理程式可能會停止執行,導致無法進一步登入或設定網路。 - 儲存空間和核心驅動程式不相容:變更核心、
initramfs或磁碟控制器 (例如 virtio-scsi 或 NVMe) 的驅動程式,可能會導致開機失敗,或導致運算執行個體無法辨識連結的永久磁碟磁碟區。 - 存放區設定不一致:作業系統供應商經常會淘汰或取代舊版套件存放區和簽署金鑰,導致套件管理員在升級期間發生錯誤,並使作業系統處於無法復原的半安裝狀態。
為避免這些風險,請使用不可變動的基礎架構模型,而非在正式環境運算執行個體上就地升級主要 OS 版本。
選擇合適的升級策略
請根據工作負載是否為無狀態或有狀態,選擇下列其中一種策略:
| 策略 | 適用對象 | 停機風險 | 復原機制 |
|---|---|---|---|
| 不可變更的基礎架構 | 無狀態工作負載、代管執行個體群組 (MIG)、微服務、容器主機 | 透過滾動式替換作業,完全不必停機 | 將執行個體範本還原為較早的映像檔 |
| 使用永久磁碟重新建立運算執行個體 | 有狀態的獨立運算執行個體、附加次要儲存空間的資料庫、舊版應用程式主機 | 在預定維護期間內,影響程度極小 | 將磁碟重新連結至原始運算執行個體,或還原快照 |
| OS 就地升級 | 無法自動化或擷取本機設定的獨立運算執行個體 | 高,需要停機並手動規劃復原作業 | 從永久磁碟快照還原 |
不可變更的基礎架構
如要以最安全可靠的方式升級作業系統,請使用不可變動的基礎架構模型。您不必修改執行中的運算執行個體,而是從更新後的公開或自訂 OS 映像檔建構新的運算執行個體,並取代舊版執行個體。
如果工作負載在代管執行個體群組 (MIG) 中執行,您就能自動執行這項發布作業,且服務不會停機。
建立更新後的映像檔
- 從支援的作業系統詳細資料清單中選取最新的公用 OS 映像檔,或使用 Image Builder 或 Packer/Ansible 等自動化工具建立自訂基礎映像檔。
- 在非正式測試環境中,確認應用程式和依附元件在新版 OS 上安裝及執行成功。
- 建立自訂 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。
使用永久磁碟重新建立運算執行個體
如果您執行有狀態的獨立運算執行個體,且應用程式將設定和資料儲存在永久磁碟磁碟區,則可以重新建立運算執行個體並使用新的開機磁碟,同時保留資料磁碟,藉此升級作業系統。
備份所有磁碟
修改基礎架構前,請先建立開機磁碟和所有附加永久磁碟磁碟區的標準或區域快照:
gcloud compute disks snapshot BOOT_DISK_NAME \
--snapshot-names=SNAPSHOT_NAME \
--zone=ZONE
更改下列內容:
BOOT_DISK_NAME:要備份的開機磁碟名稱。SNAPSHOT_NAME:新 Persistent Disk 快照的名稱。ZONE:磁碟所在的區域。
詳情請參閱「建立及管理快照」。
將應用程式資料與開機磁碟分開
請確保應用程式資料、資料庫檔案和交易記錄位於次要 Persistent Disk 磁碟區或外部服務 (例如 Cloud Storage 或 Cloud SQL),而非開機磁碟。
建立替代運算執行個體
停止舊版運算執行個體,確保資料一致性:
gcloud compute instances stop LEGACY_INSTANCE_NAME --zone=ZONE
從舊版運算執行個體卸離次要資料磁碟:
gcloud compute instances detach-disk LEGACY_INSTANCE_NAME \ --disk=DATA_DISK_NAME \ --zone=ZONE使用目標 OS 版本建立新的運算執行個體:
gcloud compute instances create NEW_INSTANCE_NAME \ --image-family=IMAGE_FAMILY \ --image-project=IMAGE_PROJECT \ --zone=ZONE \ --machine-type=MACHINE_TYPE將現有的次要資料磁碟連結至新的運算執行個體:
gcloud compute instances attach-disk NEW_INSTANCE_NAME \ --disk=DATA_DISK_NAME \ --zone=ZONE連線至新的運算執行個體,掛接資料磁碟上的檔案系統,然後啟動應用程式服務。
如有必要,請重新指派所有靜態外部 IP 位址或 DNS 記錄,指向新的運算執行個體。
更改下列內容:
LEGACY_INSTANCE_NAME:要升級的現有運算執行個體名稱。DATA_DISK_NAME:要卸離並重新連結的次要永久磁碟磁碟區名稱。NEW_INSTANCE_NAME:新替代運算執行個體的名稱。IMAGE_FAMILY:目標 OS 版本的映像檔系列,例如debian-13或ubuntu-2604-lts。IMAGE_PROJECT:提供映像檔的專案,例如debian-cloud或ubuntu-os-cloud。MACHINE_TYPE:新運算執行個體的機型。ZONE:運算執行個體所在的可用區。
直接升級作業系統
如果手動設定過於複雜,導致您無法重新建立運算執行個體,且必須執行就地升級,請完成下列升級前檢查,並仔細按照特定發行版本的指示操作。
升級前檢查清單
開始就地升級前,請先完成這份檢查清單中的每個步驟:
- 執行任何升級指令前,請先為開機磁碟建立快照。如果升級失敗,這就是主要復原機制。
將所有目前的套件和客層環境更新至目前 OS 版本可用的最新版本: Cloud de Confiance
- Debian 和 Ubuntu:
sudo apt update && sudo apt dist-upgrade -y - 適用於 RHEL、CentOS 和 Rocky Linux:
sudo dnf upgrade -y - 如為 SLES:
sudo zypper update
確認
google-guest-agent和google-oslogin套件已啟用:sudo systemctl status google-guest-agent
- Debian 和 Ubuntu:
在運算執行個體上啟用互動式序列主控台,這樣一來,如果升級期間 SSH 或網路停止運作,您就能進行疑難排解及登入:
gcloud compute instances add-metadata INSTANCE_NAME \ --metadata=serial-port-enable=TRUE \ --zone=ZONE更改下列內容:
INSTANCE_NAME:運算執行個體的名稱。ZONE:運算執行個體所在的可用區。
詳情請參閱「與序列主控台互動」。
如果您使用 OS 登入或由訪客代理程式管理的安全殼層金鑰,請為具有管理員權限的本機使用者帳戶設定密碼 (例如使用
sudo passwd USERNAME),這樣一來,如果升級期間暫時無法使用 OS 登入,您就能透過序列埠控制台登入。將USERNAME替換為本機使用者帳戶名稱。請確認根分區
/和開機分區/boot有足夠的可用空間 (建議至少 5 GB),可供下載及解壓縮新套件:df -h / /boot
確認安全性、備份或監控的第三方代理程式 (包括 Google Cloud Ops Agent) 支援目標作業系統版本。
直接升級程序
下列各節提供常見作業系統的概略工作流程。升級前,請務必先參閱作業系統的官方升級說明文件。
Debian
您可以升級 Debian,但只能升級至下一個主要版本。請勿略過主要版本,舉例來說,請先將 Debian 11 升級至 12,再將 Debian 12 升級至 13。
更新現有的 Debian 套件存放區:
sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y
在
/etc/apt/sources.list和/etc/apt/sources.list.d/中更新套件來源,方法是將目前的發布版本代號 (例如bullseye) 替換為目標發布版本代號 (例如bookworm)。確認 Cloud de Confiance 套件存放區網址 與新版本相符。執行最低升級,更新核心封裝工具:
sudo apt update sudo apt upgrade --without-new-pkgs -y
執行完整發行升級:
sudo apt full-upgrade -y
確認
google-guest-agent已啟用:sudo systemctl enable --now google-guest-agent
重新啟動運算執行個體:
sudo systemctl reboot
Ubuntu
如要在 Ubuntu 上管理 LTS 升級,請使用 do-release-upgrade 工具。
更新所有目前的套件:
sudo apt update && sudo apt dist-upgrade -y
安裝更新管理員的核心套件:
sudo apt install update-manager-core -y
啟動版本升級工具:
sudo do-release-upgrade
按照互動式提示操作,確認存放區更新和套件取代作業。如果系統提示您設定檔已修改,請仔細檢查差異,再覆寫設定檔。
系統出現提示時,請重新啟動運算執行個體。
RHEL
如要在 RHEL 主要版本之間升級,請使用支援的 Red Hat leapp 公用程式。
- 確認 Red Hat 訂閱狀態,並確保運算執行個體連線至 Compute Engine Red Hat Update Infrastructure (RHUI)。
- 安裝 Leapp 公用程式和包含遷移資料的套件。
執行升級前評估:
sudo leapp preupgrade
查看
/var/log/leapp/leapp-report.txt中的報表,並解決 Leapp 發現的所有阻礙問題。執行升級:
sudo leapp upgrade
重新啟動執行個體,讓 Leapp 在獨立環境中執行 OS 升級:
sudo reboot
SLES
如要在 SLES 上執行主要版本服務套件遷移作業和發行版本升級,請使用 zypper:
更新現有系統:
sudo zypper patch
執行
zypper migration進行線上遷移,或按照發行版本升級工作流程,使用zypper dup(如 SLES 升級說明文件中所述)。
Windows
如果是 Windows Server Compute 執行個體,您可以使用安裝媒體搭配 Compute Engine 大量授權和 PowerShell 指令碼,自動升級,不需手動操作。
如要在 Windows Server 上執行就地升級,請按照教學課程執行 Windows Server 就地升級。
自動管理次要更新的修補程式
區分作業系統主要版本升級與例行性次要更新和安全性修補程式。如要定期維護軟體、更新套件及修補 CVE,請使用 VM 管理員修補程式,自動在整個運算執行個體機群中部署修補程式。
請按照下列最佳做法自動管理修補程式:
- 使用標籤整理執行個體:使用中繼資料 (例如
env:dev、env:prod和tier:frontend) 指派標籤,針對特定群組的運算執行個體套用修補程式。 - 逐一部署可用區:在不同可用區和區域交錯執行修補程式工作。請勿在正式環境中,同時對所有可用區套用修補程式作業。
- 使用修補前和修補後指令碼:設定修補前指令碼,安全地排空連線或暫停服務,並設定修補後指令碼,在將執行個體還原至服務前執行健康狀態檢查。
- 監控修補程式法規遵循狀態:使用Cloud de Confiance 控制台中的 VM 管理員資訊主頁,追蹤整個運算執行個體機群是否符合修補程式規定,以及安全漏洞的狀態。
詳情請參閱「建立修補程式工作」。
升級後的驗證和疑難排解
升級完成後,請執行下列驗證步驟:
- 確認 SSH 或 RDP 連線正常。
確認訪客代理程式和 OS 登入服務已啟用,且回報狀態正常:
sudo systemctl status google-guest-agent sudo systemctl status google-oslogin-cache
確認運算執行個體可以查詢執行個體中繼資料伺服器:
curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/id
確認應用程式服務已啟動,且負載平衡器的健康狀態檢查回報執行個體健康狀態良好。
排解連線中斷問題
如果就地升級後,您無法透過 SSH 或遠端桌面協定存取運算執行個體,請完成下列疑難排解步驟:
檢查控制台記錄,找出核心恐慌、服務啟動期間的錯誤,或網路初始化期間的失敗情形:
gcloud compute instances tail-serial-port-output INSTANCE_NAME \ --zone=ZONE如果您在升級前已啟用互動式序列主控台,請直接連線至終端機:
gcloud compute connect-to-serial-port INSTANCE_NAME \ --zone=ZONE使用本機使用者憑證登入,透過
journalctl -xe檢查系統記錄,然後重新啟動網路或google-guest-agent服務。更改下列內容:
INSTANCE_NAME:要進行疑難排解的運算執行個體名稱。ZONE:運算執行個體所在的可用區。
如果作業系統無法開機或復原,請從升級前建立的快照建立新的永久磁碟磁碟區,然後將其附加為運算執行個體的開機磁碟。如需詳細的復原步驟,請參閱「將快照還原至新磁碟」。