您可以使用 Patch 對一組虛擬機器 (VM) 執行個體套用作業系統修補程式。
如要將修補程式套用至 VM,請完成下列步驟:
事前準備
- 查看 OS Config 配額。
-
如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
REST
To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
限制
- 您只能為單一 Google Cloud 專案中的 VM 部署及執行修補程式工作。即使 VM 位於共用虛擬私有雲,您也無法在 Google Cloud 專案中執行修補工作。不過,您可以查看跨專案的修補程式相容性資料。
- 根據預設,VM Manager 不���修補任������於���管執行個體群組 (MIG) 的 VM。修補這些 VM 會在修補工作中回報為失敗。您可以在建立修補工作時覆寫這個預設行為。修補屬於 MIG 的 VM 時,請注意下列限制:
- MIG 修復 VM 時,會根據執行個體範本重新建立 VM。這可能會將 VM 還原為未修補的狀態。
- 在已啟用自動調整大小功能的 MIG 中修補 VM 可能會導致非預期的結果。當負載減少時,自動調度資源功能會刪除已修補的 VM,並在負載增加時使用 MIG 的執行個體範本建立新的 VM (不含任何修補程式)。舉例來說,如果平均 CPU 使用率低於您為自動調度資源功能指定的目標使用率,MIG 可以在縮放時移除部分已修補的 VM。
支援的作業系統
如需支援 Patch 的作業系統和版本完整清單,請參閱「作業系統詳細資料」。
設定 VM
如要使用修補功能,請完成下列步驟:
權限
Google Cloud 專案擁有者具備執行及管理修補工作作業的完整存取權。您必須授予其他使用者權限,您可以授予下列精細角色:
roles/osconfig.patchJobExecutor
:包含執行、取消、取得及列出修補工作的權限。也包含查看修補工作執行個體詳細資料的權限。roles/osconfig.patchJobViewer
:包含取得及列出修補程式工作時的唯讀存取權限。也包含查看修補工作中執行個體詳細資料的權限。
舉例來說,如要授予使用者執行修補作業的存取權,請使用下列指令:
gcloud projects add-iam-policy-binding project-id \ --member user:user-id@gmail.com \ --role roles/osconfig.patchJobExecutor
更改下列內容:
project-id
:專案 ID。user-id
:使用者的 Google Workspace 使用者名稱。
執行修補工作
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 REST 執行修補工作。
執行修補工作時,系統會在 instance filter 指定的所有執行個體上同時開始修補 VM。
開始修補工作後,您可以使用修補資訊主頁監控修補項目。修補工作開始後,系統大約需要 30 分鐘才能在資訊主頁上填入資料。
主控台
- 在 Google Cloud 控制台中依序前往「Compute Engine」 >「VM Manager」 >「Patch」頁面。
- 按一下「新增修補程式部署作業」。
在「目標 VM」部分中,選取含有要修補的 VM 的區域。你也可以選擇選取所有區域。
選取區域後,您可以進一步篩選該區域中的 VM。
舉例來說,如要修補位於所選可用區的特定 VM,請輸入類似下列的名稱和標籤篩選條件:
- 名稱前置字串:
test-
- 標籤:
env=dev
和app=web
- 名稱前置字串:
在「修補程式設定」部分中,設定修補程式。
- 指定修補程式的「名稱」。
- 選取作業系統的必要更新。詳情請參閱修補程式設定。
在「Scheduling」部分,完成下列操作:
- 選取時間表。如要立即執行修補工作,請選取「立即開始」。
- 選用步驟:設定時間長度或維護期間。
在「Rollout options」專區,設定修補程式發布選項:
- 選取要一次修補一個可用區,還是要同時修補多個可用區。
- 設定中斷預算。中斷預算是指在一個區域中,您希望修補程序一次中斷的 VM 數量或百分比。
選用:在「Advanced options」專區,您可以完成下列工作:
- 選取重新啟動選項。
- 上傳修補前和修補後指令碼。如要進一步������修補前和修補後指令碼,請參閱「指定修補前和修補後指令碼」。
按一下「部署」。
gcloud
使用 os-config patch-jobs execute
指令執行修補工作。將 instance-filter
替換成所需的執行個體篩選器。如要進一步瞭解執行個體篩選器,請參閱「執行個體篩選器」。
gcloud compute os-config patch-jobs execute instance-filter
如要進一步瞭解系統會套用的更新項目,請參閱「OS 修補作業包含哪些內容」。如要自訂更新內容,請使用選用標記。
範例
範例 1 如要使用下列設定執行修補工作,請按照以下步驟操作:
- 執行個體名稱:
instance-1
- 可用區:
us-east1-b
說明:
patch for instance-1
您可以執行下列指令:
gcloud compute os-config patch-jobs execute \ --instance-filter-names="zones/us-east1-b/instances/instance-1" \ --description "patch for instance-1"
範例 2 假設您想要使用下列設定以非同步方式執行修補工作:
- 必須在專案中的所有執行個體上執行修補程式。
- 修補作業必須在 1 小時 30 分鐘後逾時並停止。
- 安裝更新後,機器必須根據系統設定重新啟動。
- 在執行 Apt 的 VM 上,會使用
apt dist-upgrade
進行修補。 - 在執行 Windows 的 VM 上,只套用
KB4339284
更新的修補程式。 - 在執行 Yum 的 VM 上,使用
yum update-minimal --security
公用程式進行修補。
您可以執行下列指令:
gcloud compute os-config patch-jobs execute \ --instance-filter-all \ --duration="1h30m" --reboot-config="DEFAULT" \ --apt-dist --windows-exclusive-patches=4339284 \ --yum-minimal --yum-security \ --async
REST
在 API 中建立 POST
要求,以執行新的修補工作。您必須明確定義所有必要的設定欄位,如 patchJobs.execute
API 說明文件所述。
如要進一步瞭解系統會套用的更新項目,請參閱「OS 修補作業包含哪些內容」。如要自訂更新內容,請使用 PatchConfig
參數。
舉例來說,只有必填欄位的修補工作如下所示。
POST https://osconfig.googleapis.com/v1/projects/project-id/patchJobs:execute { "instanceFilter": instance-filter }
更改下列內容:
project-id
:您的專案 ID。instance-filter
:所需的篩選器參數。如要進一步瞭解執行個體篩選器,請參閱「執行個體篩選器」。
範例
範例 1:假設您要在 us-east1-b
中名為 instance1
的執行個體上執行修補工作,在這個範例中,我們會新增說明,並指定工作執行時間為 1 小時 30 分鐘。請將 project-id
替換為您的專案 ID。
POST https://osconfig.googleapis.com/v1/projects/project-id/patchJobs:execute { "description":"patch instance1 in us-east1-b", "duration":"5400s", "instanceFilter":{ "instances":[ "zones/us-east1-b/instances/instance1" ] } }
範例 2:下列修補作業會選取具有下列設定的 VM:
- 具備標籤
env=dev
和app=web
。 - 位於
asia-east1-b
或asia-east1-c
中。 - 前置字串為
test-
。
請將以下指令中的 project-id
替換為您的專案 ID。
POST https://osconfig.googleapis.com/v1/projects/project-id/patchJobs:execute { "instanceFilter":{ "groupLabels":[ { "labels":{ "env":"dev", "app":"web" } } ], "instanceNamePrefixes":[ "test-" ], "zones":[ "asia-east1-b", "asia-east1-c" ] } }
示例 3
假設您想使用下列設定執行修補工作:
- 必須在專案中的所有執行個體上執行修補程式。
- 修補工作必須在 1 小時 30 分鐘後逾時並停止。API 規定時間必須以秒為單位,因此請將此值設為 5400 秒。
- 安裝更新後,機器必須根據系統設定重新啟動。
- 在執行 Apt 的 VM 上,會使用
apt dist-upgrade
進行修補。 - 在執行 Windows 的 VM 上,只套用
KB4339284
更新的修補程式。 - 在執行 Yum 的 VM 上,使用
yum update-minimal --security
公用程式進行修補。
您會建立下列要求:
請將以下指令中的 project-id
替換為您的專案 ID。
POST https://osconfig.googleapis.com/v1/projects/project-id/patchJobs:execute { "duration":"5400s", "instanceFilter":{ "all":true }, "patchConfig":{ "rebootConfig":"DEFAULT", "apt":{ "type":"DIST" }, "yum":{ "security":true, "minimal":true }, "windowsUpdate":{ "exclusivePatches":"4339284" } } }
執行個體篩選器
您可以使用篩選器指定要納入修補工作單元的執行個體。修補工作支援下列篩選器:
依名稱篩選:將修補工作限制為具有特定名稱的執行個體。您必須使用完整的 URI 指定執行個體名稱。支援的 URI 格式包括:
zones/zone/instances/instance-name
projects/project-id/zones/zone/instances/instance-name
https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-name
依名稱前置字串篩選:將修補工作限制為名稱中含有特定前置字串的例項。
依區域篩選:將修補工作限制在特定區域的執行個體。
依標籤篩選:將修補工作限制為具有特定標籤的執行個體。
您也可以將 instanceFilter
中的 all
欄位設為 true
,在 Google Cloud 專案的所有執行個體上執行修補工作。詳情請參閱執行個體篩選器範例。
執行個體篩選器範例
情境 | gcloud filter | API 篩選器 |
---|---|---|
Google Cloud 專案中的所有執行個體 | --instance-filter-all |
{ "instanceFilter":{ "all":"true" } } |
位於區域 us-east1-b 中,名稱為 instance1 的執行個體。 |
--instance-filter-names="zones/us-east1-b/instances/instance1" |
{ "instanceFilter":{ "instances":[ "zones/us-east1-b/instances/instance1" ] } } |
前置字串為 app- 的執行個體 |
--instance-filter-name-prefixes="app-" |
{ "instanceFilter":{ "instanceNamePrefixes":[ "app-" ] } } |
位於 us-east1-b 或 us-east1-c 區域中的執行個體 |
--instance-filter-zones="us-east1-b","us-east1-c" |
{ "instanceFilter":{ "zones":[ "us-east1-b", "us-east1-c" ] } } |
具有 env=dev 和 app=web 組合標籤的例項,以及具有 env=dev 和 app=worker 的例項。 |
--instance-filter-group-labels="env=dev,app=web" --instance-filter-group-labels="env=dev,app=worker" |
{ "instanceFilter":{ "groupLabels":[ { "labels":{ "env":"dev", "app":"web" } }, { "labels":{ "env":"dev", "app":"worker" } } ] } } |
結合執行個體篩選器
您也可以結合使用個別篩選器。舉例來說,如要為前置字串為 test-
、位於區域 us-east1-c
且標籤為 env=dev
和 app=web
的執行個體執行修補工作,請執行下列指令:
gcloud compute os-config patch-jobs execute \ --instance-filter-name-prefixes="test-" \ --instance-filter-zones="us-east1-c" \ --instance-filter-group-labels="env=prod,app=web"
修補程式設定
執行修補作業時,您可以指定參數來控制套用至 VM 的修補程式。修補程式設定參數會依平台而異,通常會傳遞至基礎系統更新工具。實際的修補程式會從 VM 上設定的套件存放區 (Linux) 或 Windows 更新伺服器 (Windows) 取得。
您可以為 VM 指定下列修補程式設定:
- 針對 Windows,您可以指定要套用的修補程式分類 (例如
Security
和Critical
),或指定要排除的特定 KB。如要進一步瞭解修補程分類,請參閱 Microsoft 支援說明文件。 對於 RHEL、Rocky Linux 和 CentOS,底層系統為
yum
。- 針對針對 RHEL 和 Rocky Linux VM 的修補程式,您可以指定
security
和minimal
套件。 - 對於 CentOS VM,CentOS
yum
存放區中沒有security
中繼資料。因此,您在更新安全性套件時,不需要指定security
選項。如果您未指定任何套件,修補作業會更新所有套件,包括含有安全性更新的套件。 - 您也可以排除特定套裝方案。詳情請參閱
yum
說明文件。
- 針對針對 RHEL 和 Rocky Linux VM 的修補程式,您可以指定
對於 Debian 和 Ubuntu,基礎系統為
apt
。針對指定這些 VM 的修補程式,您可以指定dist-upgrade
或標準升級。您也可以排除特定套件。詳情請參閱 Debian 說明文件頁面或 Ubuntu 說明文件頁面。對於 SuSE,基礎系統是
zypper
,特別是使用 zypper 修補程式。針對指定這些 VM 的修補程式,您可以指定下列選項:with update
:更新所有未涵蓋修補程式的套件with optional
:視需要處理選用修補內容- 要套用的修補程式類別或嚴重程度
您也可以排除特定修補程式。
您可以選擇只針對所有支援的作業系統,指定要安裝的更新項目,以便安裝已核准的修補程式。您可以輸入已核准的套件或修補程式清單。選取這些已核准的修補程式時,系統只會安裝已核准的套件或修補程式。更新期間會略過所有其他修補程式設定參數。
範例
主控台
gcloud
舉例來說,如要在區域 northamerica-northeast1-a
的所有執行個體上執行修補工作,並針對不同的作業系統設定特定修補程序,請執行 gcloud compute os-config patch-jobs execute
指令:
gcloud compute os-config patch-jobs execute \ --instance-filter-zones="northamerica-northeast1-a" \ --apt-dist \ --yum-security \ --yum-minimal \ --zypper-categories=security \ --windows-classifications=critical,security \ --reboot-config=default
如要進一步瞭解支援的選項,請執行下列指令:
gcloud compute os-config patch-jobs execute --help
REST
舉例來說,如要在區域 northamerica-northeast1-a
的所有執行個體上執行修補工作,並使用不同作業系統的特定修補設定,請執行下列指令:
POST https://osconfig.googleapis.com/v1/projects/project-id/patchJobs:execute { "instanceFilter":{ "zones":[ "northamerica-northeast1-a" ] }, "patchConfig":{ "apt": { "type": "dist-upgrade" }, "yum": { "security": true, "minimal": true }, "zypper": { "categories": ["security"] }, "windowsUpdate": { "classifications": ["CRITICAL", "SECURITY"] }, "rebootConfig": "DEFAULT" } }
如要進一步瞭解支援的參數,請參閱 PatchConfig API
說明文件。
維護期間
維護期間是指允許修補工作執行的總時間長度。如果修補工作未在指定的維護時間範圍內完成,就會逾時。
舉例來說,如果您設定的維護期間為 60 minutes
,則在開始時間過後 60 分鐘內,系統不會啟動任何新的修補作業。下載檔案或重新啟動等部分程序可能會在這個維護期間外進行,但不會啟動新的修補工作。
重新啟動選項
執行修補工作時,您可以指定修補程式的重新啟動選項。可用的選項如下:
- 預設:代理程式會檢查各個 OS 的常見信號,藉此判定是否需要重新啟動。修補期間可能會多次重新啟動,且可能在安裝任何修補程式前就會重新啟動。
- 一律:機器會在更新完成後重新啟動。
- 從不:機器在更新作業完成後不會重新啟動。在某些情況下,這可能表示並非所有修補程式都已完全套用。
修補前和修補後指令碼
執行修補工作時,您可以指定要執行的修補程序指令碼。這些指令碼可用於執行關閉應用程式和執行健康狀態檢查等工作。
- 在修補作業展開前運作的修補前指令碼。如果系統必須在修補作業展開前重新啟動,則修補前指令碼會在系統重新啟動前開始運作。
- 在修補作業完成後運作的修補後指令碼。如果系統必須在修補作業中重新啟動,則修補後指令碼會在系統重新啟動後開始運作。
修補工作可接受 Linux 的一個修補前指令碼和一個修補後指令碼,以及 Windows 的一個修補前指令碼和一個修補後指令碼。當您分���透過 Google Cloud CLI、REST 或 Google Cloud 控制台 指定 Linux 和 Windows 指令碼時,必須使用適當的旗標、參數或區段提供這些指令碼。Linux 指令碼只能在 Linux VM 上執行,Windows 指令碼只能在 Windows VM 上執行。
這些指令碼檔案可儲存在 VM 或有版本控制的 Cloud Storage 值區中。
將修補指令碼儲存在 Cloud Storage 值區
如果您想使用 Cloud Storage 值區來儲存指令碼,請建立 Cloud Storage 值區,然後將指令碼上傳至該值區。使用 Cloud Storage 值區時,請考量以下事項:
- 如果 Cloud Storage 物件無法供大眾讀取,請確認已連結至執行個體的服務帳戶具備讀取 Cloud Storage 物件的必要 IAM 權限。為確保您具備正確的權限,請檢查 Cloud Storage 物件的權限設定。
- 使用 Google Cloud 控制台從 Cloud Storage 選取指令碼時,系統會預設使用指定 Cloud Storage 物件的最新版本。
如果貴機構強制執行資源位置限制限制,則必須將指令碼儲存在機構政策允許的地區和區域的 Cloud Storage 值區中。
主控台
gcloud
舉例來說,如要在區域 northamerica-northeast1-a
的所有執行個體上執行修補工作,並為 Linux 和 Windows 執行個體提供修補前後指令碼,請執行下列指令:
gcloud compute os-config patch-jobs execute \ --instance-filter-zones="northamerica-northeast1-a" \ --async \ --pre-patch-linux-executable="/tmp/pre_patch_script.sh" \ --post-patch-linux-executable="gs://my-patch-scripts/linux/post_patch_script#1523477886880" \ --pre-patch-windows-executable="C:\\Users\\user\\pre-patch-script.cmd" \ --post-patch-windows-executable="gs://my-patch-scripts/windows/post_patch_script.ps1#135920493447"
如要進一步瞭解可接受的檔案格式,請執行下列指令:
gcloud compute os-config patch-jobs execute --help
REST
舉例來說,如要在區域 northamerica-northeast1-a
的所有執行個體上執行修補工作,並為 Linux 和 Windows 執行個體提供修補前後指令碼,請執行下列指令:
POST https://osconfig.googleapis.com/v1/projects/project-id/patchJobs:execute { "instanceFilter":{ "zones":[ "northamerica-northeast1-a" ] }, "patchConfig":{ "preStep":{ "linuxExecStepConfig":{ "localPath":"/tmp/pre_patch_script.sh" }, "windowsExecStepConfig":{ "interpreter":"SHELL", "localPath":"C:\\Users\\user\\pre-patch-script.cmd" } }, "postStep":{ "linuxExecStepConfig":{ "gcsObject":{ "bucket":"my-patch-scripts", "generationNumber":"1523477886880", "object":"linux/post_patch_script" } }, "windowsExecStepConfig":{ "gcsObject":{ "bucket":"my-patch-scripts", "generationNumber":"135920493447", "object":"windows/post_patch_script.ps1" }, "interpreter":"POWERSHELL" } } } }
如要進一步瞭解可接受的檔案格式,請參閱 PatchConfig
API 說明文件中的 ExecStepConfig
部分。
修補程式推出選項
您可以選擇一次修補一個可用區的 VM (逐區修補),或一次修補所有可用區 (並行可用區)。
除了選取區域外,您也可以為 VM 指定區域中斷預算。
可用區服務中斷預算
中斷預算是指在任何特定時間內,各區域中斷的 VM 數量 (或百分比) 上限。
什麼是中斷的 VM?
在修補期間,從 OS 設定代理程式收到開始通知到修補完成,VM 都會處於中斷狀態。這段時間包括完成重新啟動和任何修補後步驟所需的時間。
如果 VM 符合下列任一條件,也會計入中斷預算:
- 套用修補程式時,修補作業失敗
- 執行修補前或修補後步驟時,修補作業失敗
- 修補作業在逾時前無法回應成功通知
中斷預算的運作方式
如果是區域逐一推出,如果某個區域的服務中斷預算超出,修補工作就會停止。這是因為要繼續執行下一個區域,必須先完成先前區域的修補程序。
舉例來說,如果中斷預算的值為 10,且 8 個 VM 無法在目前區域中套用修補程式,則修補工作會繼續一次修補 2 個 VM,直到完成該區域為止。當該區域完成修補後,系統會在下一個區域中一次修補 10 個 VM。如果下一個區域中的 10 個 VM 無法完成修補,修補工作就會停止。
範例
主控台
gcloud
範例 1
本範例顯示 os-config patch-jobs execute
指令,可用來執行具有下列規格的修補工作:
- 修補專案中的所有 VM
- 逐一修補 VM 可用區
- 確保在特定時間內,同一區域中最多只有 10 個 VM 中斷
gcloud compute os-config patch-jobs execute \ --instance-filter-all \ --rollout-mode=zone-by-zone \ --rollout-disruption-budget=10
示例 2
本範例顯示 os-config patch-jobs execute
指令,可用來執行具有下列規格的修補工作:
- 修補專案中的所有 VM
- 同時修補可用區
- 確保在特定時間內,同一區域內最多只有 50% 的 VM 中斷
gcloud compute os-config patch-jobs execute \ --instance-filter-all \ --rollout-mode=concurrent-zones \ --rollout-disruption-budget-percent=50
REST
以下範例顯示 patchJobs.execute
方法,可用於執行具有下列規格的修補工作:
- 修補
us-central1-a
、us-central1-c
和us-central1-f
區域中的所有 VM - 同時修補可用區
- 確保在特定時間內,同一個區域內的執行個體中,最多只有 25% 會中斷
POST https://osconfig.googleapis.com/v1/projects/project-id/patchJobs:execute { "instanceFilter":{ "zones":[ "us-central1-a", "us-central1-c", "us-central1-f" ] }, "rollout": { "disruptionBudget": { "percent": 25 }, "mode": "CONCURRENT_ZONES" } }
如要進一步瞭解修補程式發布作業,請參閱 PatchRollout
API 說明文件。
在 Windows VM 上啟用 Microsoft 軟體修補功能
在 Windows VM 上執行修補工作時,根據預設,Patch 只會套用 Windows 作業系統的修補程式。
執行修補作業時,您可以為 Microsoft 軟體 (例如 Microsoft SQL Server、SharePoint Server 或 .NET ���構) 套用更新,這些軟體會在 Windows VM 上執行。根據預設,這些應用程式的修補程序會停用,以免服務中斷,並為這些軟體分開規劃更新。如要自動啟用 Microsoft 軟體修補功能,您可以使用 Windows UI 或 PowerShell。
Windows UI
- 在 Windows 開始選單中,依序選取「設定」>「更新與安全性」>「Windows Update」。
- 在「進階選項」部分,將「更新 Windows 時接收其他 Microsoft 產品的更新」切換為開啟。
PowerShell
$service_manager = New-Object -ComObject 'Microsoft.Update.ServiceManager' $service_manager.AddService2("7971f918-a847-4430-9279-4a52d1efe18d",7,"")
對修補工作進行偵錯
如果修補失敗,您可以按照下列步驟找出並解決問題。
查看受影響的修補工作執行個體詳細資料。這有助於您找出哪些執行個體失敗,或它們卡在哪個狀態。每個執行個體的詳細資料清單也會包含簡短的錯誤訊息。
如果修補程式失敗,且狀態為
NO_AGENT_DETECTED
或TIMED_OUT
,通常表示服務已向代理程式傳送要求,要求開始修補,但從未收到代理程式的回覆。請查看下列可能的原因和修正方式:- 執行個體未執行。如要修正這個問題,請啟動 VM 執行個體。
- 使用驗證檢查清單驗證設定。
- 虛擬私有雲網路或執行個體的網路設定不允許 OS Config 代理程式與 OS Config API 通訊。如要修正這個問題,請檢查網路設定。
如果執行個體詳細資料未提供足夠資訊,請查看 Cloud Logging 記錄或序列埠主控台。OS Config 代理程式會將記錄項目寫入這兩個位置。在 Cloud Logging 中,您可以使用修補工作 ID 進行篩選,查看與該修補工作相關的所有記錄項目。您也可以在 VM 或 Google Cloud 專案層級設定
osconfig-log-level=debug
中繼資料值,啟用偵錯記錄功能。