映像檔管理最佳做法


此解決方案會深入說明如何管理 Compute Engine 映像檔。針對在 Compute Engine 中執行的應用程式,映像檔提供基本的作業環境,而且在確保快速及可靠地部署及調整應用程式上十分重要。您也可以使用映像檔來封存應用程式版本,以進行災難復原及還原。

瞭解映像檔

Compute Engine 中的映像檔是雲端資源,為不可變磁碟提供參照。該磁碟表示法之後會使用幾種資料格式封存。

瞭解圖片。

映像檔是一堆原始位元組,用來建立預先填入內容的硬碟。將分區表寫入任何格式化磁碟,指向一或多個包含資料的分區。要成為開機映像檔,映像檔必須包含下列項目:

如要將磁碟做為 Compute Engine 映像檔匯入,則必須將磁碟位元組寫入名為 disk.raw 的檔案。

將磁碟的完整位元組序列寫入檔案後,檔案即會以 tar 格式進行封存,接著再使用 GZIP 格式壓縮。您隨後可將產生的 *.tar.gz 檔案上傳至 Cloud Storage,並在 Compute Engine 中將其註冊為映像檔,如上圖所示。註冊映像檔後,您就能使用該映像檔在 Google Cloud的任何區域建立原始磁碟的備用資源。新註冊的映像檔通常會用來做為 Compute Engine 執行個體的開機磁碟區。

如需這些 Compute Engine 詞彙的更基本的介紹,請參閱說明文件中的虛擬機器執行個體映像檔

選擇開機映像檔

使用 Compute Engine 的第一步是選擇要做為虛擬機器 (VM) 執行個體作業系統的映像檔。您可以使用 Google Cloud 提供的公開映像檔,這些映像檔會定期更新。 Google Cloud 提供多種作業系統,包括 Debian、Ubuntu 和 CentOS,您無需額外付費即可使用。某些作業系統,例如 Red Hat Enterprise Linux 和 Microsoft Windows,為付費映像檔,因此執行個體執行的每小時都必須支付額外費用。

如要進一步瞭解特定的映像檔,例如自動更新政策、安全性修補以及支援管道等,請參閱產品說明文件的「作業系統詳細資料」一節。

為進一步提升安全性,您也可以使用可信映像檔功能定義機構政策,限制特定公開映像專案中的映像檔,以免在建立啟動映像時使用。

開機映像檔。

您可以使用 Google Cloud 公開映像檔啟動 Compute Engine 執行個體,然後自訂執行個體以執行您的應用程式。

設定執行個體的其中一種方法是使用開機指令碼執行指令,在啟動執行個體時部署您的應用程式。請注意,每次執行個體啟動時都會執行此指令碼,因此您必須讓這個指令碼變成冪等,避免最後處於不一致或部分設定的狀態。如果您的執行個體是代管執行個體群組的一部分,則可使用 Instance Group Updater 重新啟動或重新建構執行個體,進而重新執行開機指令碼。常見做法是使用開機指令碼來執行設定管理工具,例如 Chef 或 Ansible。

建立自訂映像檔

雖然您可以透過設定執行個體的開機指令碼來佈建基礎架構,但更有效率的做法是建立新的自訂映像檔,並將您的設定納入公開映像檔。您可以透過下列幾種方式自訂圖片:

  • 手動
  • 自動
  • 匯入

建立自訂映像檔的程序稱為「製作」

製作自己的映像檔有下列優點:

  • 縮短從開機到應用程式就緒的時間。
  • 提供應用程式部署的可靠性。
  • 更容易復原為先前版本。
  • 在應用程式啟動程序期間,外部服務上需要的依附元件較少。
  • 因為擴充而建立的執行個體也會包含相同的軟體版本。

手動製作

您可以建立簡易的自訂映像檔,方法是從公開映像檔建立新的 VM 執行個體,以您所需的應用程式和設定來設定執行個體,然後從該執行個體建立自訂映像檔。如果您可以從頭開始手動設定映像檔,而不使用自動製作匯入現有的映像檔,請使用此方法。

您可以透過下列步驟建立簡易的自訂映像檔:

  1. 從公開映像檔建立執行個體
  2. 連線至執行個體
  3. 自訂符合需求的執行個體。
  4. 停止執行個體
  5. 從該執行個體的開機磁碟建立自訂映像檔。此程序會要求您刪除執行個體,但是保留開機磁碟。

自動製作

手動製作對只有少量圖片的使用者來說可能是很容易上手,但用在大量圖片則會變得難以稽核和管理。Packer 是一項開放原始碼工具,能讓建立映像檔變得更好重現、更好稽核、更好設定且更可靠。您也可以使用 Packer 做為 Spinnaker 管道的一部分,以產生要部署至執行個體叢集的映像檔。

匯入現有映像檔

您可以使用虛擬磁碟匯入工具,從現有基礎架構將開機磁碟映像檔匯入至 Compute Engine,這項工具可自動執行映像檔匯入程序。如果您使用 Linux 機器,請參閱深入瞭解如何手動遷移 RAW 磁碟映像檔、Amazon Machine Image (AMI) 和 VirtualBox 映像檔

另一個匯入現有映像檔的選項是使用 Migrate to Virtual Machines

Migrate to Virtual Machines 是一個工具鍊和服務,可協助您在最短的停機時間內,透過區塊層級的持續複製,在不同平台間遷移機器。您可以將機器遷移至 Compute Engine,然後使用手動製作來建立映像檔。

加密映像檔

根據預設,系統會使用 Google 的加密金鑰為 Compute Engine 中的所有磁碟加密,也會加密從這些磁碟建構的映像檔。或者,您也可以在建立磁碟時提供自己的加密金鑰。建立磁碟後,您就能向映像檔建立指令提供您的加密金鑰,以建立加密映像檔。如要進一步瞭解靜態資料加密和客戶提供的加密金鑰,請參閱 Google Cloud 說明文件中的「靜態資料加密」。

映像檔生命週期

設定映像檔建構管道後,您就能使用映像檔,可靠地啟動應用程式的執行個體。雖然管道會處理建立映像檔的事宜,您也必須確認您的部署機制採用最新版本的映像檔。最後,您還需要一個管理圖片的程序,以防不小心使用到舊的和過時的圖片。

映像檔系列

映像檔系列可透過將相關映像檔分組到一起,來協助您管理專案中的映像檔,讓您能夠在特定映像檔版本之間向前輪動與復原。詳情請參閱「映像檔系列最佳做法」。

淘汰映像檔

做為管理員,您也可以使用下列指令,透過淘汰映像檔來復原映像檔系列指向的映像檔

gcloud compute images deprecate my-application-v3-20161011 --state DEPRECATED

下方為您可選擇的各種淘汰狀態:

狀態 說明
已淘汰 不再是最新,但仍可由使用者啟動的映像檔。使用者會在啟動時看到警告,表示他們使用的不是最新的映像檔。
過時 使用者或自動化工具不應啟動的映像檔。嘗試從這些映像檔建立執行個體將會失敗。您可以使用此映像檔狀態來封存映像檔,這樣當您將該映像檔掛接為非開機磁碟時仍可使用其資料。
已刪除 已遭刪除或標示為即將刪除的映像檔。您無法啟動這些映像檔,且應儘快刪除這些映像檔。

強制執行生命週期政策

您可以使用 gcloud compute images deprecate 指令,將映像檔標示為即將刪除或過時。您可以提供 --delete-in--delete-on 標記,將中繼資料附加至圖片,以便標示為即將刪除。如要附加中繼資料,將圖片標示為即將過時,請提供 --obsolete-in--obsolete-on 標記。您可以將此指令納入映像檔建構程序,以強制執行映像檔生命週期政策,防止他人使用專案中過時和過期的映像檔。舉例來說,您可以在映像檔建構管道的結尾納入額外的程序,對需要淘汰或刪除的映像檔進行檢查,然後明確地執行這些動作。

依預設您不會在 API 和 UI 看到顯示淘汰和已刪除的圖片,但您仍可透過 --show-deprecated 標記查看這些圖片。您必須針對圖片傳送明確的刪除指令,才能完全刪除該圖片及其資料。

在專案之間共用映像檔

機構通常會建立多個 Google Cloud 專案來分割其資源、環境和使用者存取權。將資源隔離到專案可讓您更精密地控制帳單、實施安全措施以及使用獨立網路。雖然大多數雲端資源都不需要橫跨多個專案,但映像檔很適合跨專案共用。若使用一組共用的映像檔,您就能使用一個共通的程序,針對安全性、授權、套件管理和為組織的其餘部門預先設定的操作,以最佳做法來交付映像檔。

共用圖片。

您可以將身分與存取權管理角色指派給機構的專案,以共用映像檔。如果專案包含要與其他專案共用的圖片 (在上述圖表中稱為「圖片建立專案」),則必須套用下列身分與存取權管理角色和政策:

  1. compute.imageUser 角色授予「映像檔使用者群組」的使用者,讓這些使用者從這些映像檔建立執行個體。
  2. compute.instanceAdmin 角色授予「映像檔建立使用者」,讓這些使用者在此專案中建立執行個體。
  3. compute.storageAdmin 角色授予「映像檔建立使用者」,讓這些使用者在此專案中建立映像檔和磁碟。

如果您要讓專案使用共用映像檔,則必須將 compute.instanceAdmin 角色指派給具有 compute.imageUser 角色的使用者,讓這些使用者建立執行個體。

如需在專案之間共用映像檔的詳細指示,請參閱 Compute Engine 說明文件中的跨專案共用映像檔

後續步驟