自訂服務封鎖清單
根據預設,當您將 VM 遷移至容器時,Migrate to Containers 會停用 VM 上不需要的服務。這些服務有時可能會導致已遷移容器的問題,或是在容器情境中不需要。
您也可以使用自訂封鎖清單,定義要停用的遷移容器服務清單。您可以使用封鎖清單,指定要停用的一或多個服務。
定義封鎖清單
在 .yaml 檔案中定義自訂封鎖清單,格式如下:
service_list:
- name: <var>group-name-1</var>
services:
- <var>service-name</var>
- name: <var>group-name-2</var>
services:
- <var>service-name</var>
- <var>ervice-name</var>
其中:
- 群組是服務的邏輯集合,可讓您將類似的服務收集到單一群組中。請為群組名稱指定任何字串值。
- 服務名稱會指定要停用的遷移容器服務。
例如,將 my-blocklist.yaml
檔案定義為:
service_list:
- name: lvm-related
services:
- lvm2-lvmetad
- name: hardware-related
services:
- microcode
- microcode.ctl
套用自訂封鎖清單
您可以透過下列任一方式,將自訂封鎖清單套用至容器:
建立包含封鎖清單的 Kubernetes
configmap
,並將其新增至容器的部署規格。您可以使用這個方法新增封鎖清單,而無須重新建構容器。不過,您必須在用於代管容器的每個叢集中重新建立
configmap
。編輯容器的 Dockerfile,並重新建構容器映像檔。
使用這個方法時,您必須重新建構容器映像檔,才能加入封鎖清單。由於封鎖清單現在已納入容器,因此您不需要在部署前對叢集進行任何額外設定。
使用 ConfigMap
如要使用 configmap
建立封鎖清單,請按照下列步驟操作:
將來源 VM 遷移至容器。
如上所示,建立黑名單 .yaml 檔案,列出要停用的服務。在本例中,檔案名稱為
my-blocklist.yaml
。從封鎖清單 .yaml 檔案建立
configmap
:kubectl create configmap configmap-name --from-file=path-to-yaml
在本例中,configmap 稱為
blocklistcm
:kubectl create configmap blocklistcm --from-file=./my-blocklist.yaml
查看 configmap:
kubectl describe configmaps
編輯在遷移容器時建立的
deployment_spec.yaml
:vi deployment_spec.yaml
在部署規格中加入以下內容:
在
volumes
下為configmap
新增磁碟區:volumes: - configMap: name: blocklistcm # Name of the config map you created above. name: blocklistvol # Name of the configmap volume.
為 configmap 新增磁碟區掛接:
spec: containers: volumeMounts: - mountPath: /etc/bl # Mount path for the configmap volume. name: blocklistvol # Name of the configmap volume.
新增名為
HC_CUSTOM_SERVICE_BLOCKLIST
的環境變數,指定封鎖清單 .yaml 檔案的路徑。環境變數的名稱必須是HC_CUSTOM_SERVICE_BLOCKLIST
:containers: - image: container-image-location env: - name: HC_CUSTOM_SERVICE_BLOCKLIST value: "/etc/bl/my-blocklist.yaml"
值指定的路徑是 configmap 的 mountPath 和 blocklist .yaml 檔案名稱
my-blocklist.yaml
的連接字串。儲存檔案。
部署容器:
kubectl apply -f deployment_spec.yaml
容器部署完成後,您可以檢查容器,確認服務未執行。例如:
# Get pod name. $ kubectl get pod # Connect to pod. $ kubectl exec -it POD_NAME -- /bin/bash # View running services. This step is OS dependent. For example: $ service --status-all```
編輯 Dockerfile
本節說明如何透過編輯遷移作業建立的 Dockerfile,建立自訂封鎖清單。
將來源 VM 遷移至容器。
在編輯器中開啟 Dockerfile。
新增下列
COPY
指令,將封鎖清單 .yaml 檔案新增至容器的檔案系統:COPY src dest
例如:
COPY my-blocklist.yaml /etc/mybl/my-blocklist.yaml
目的地路徑可以是容器中的任何路徑。
新增名為
HC_CUSTOM_SERVICE_BLOCKLIST
的新環境變數,根據COPY
指令指定的檔案目的地,指定封鎖清單 .yaml 檔案的路徑。環境變數的名稱必須是HC_CUSTOM_SERVICE_BLOCKLIST
:ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path
例如:
ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
更新容器映像檔。
更新容器映像檔的方式取決於建構環境。您可以使用:
建構新映像檔後,請在編輯器中開啟
deployment_spec.yaml
檔案,以便更新圖片位置:spec: containers: - image: new-image-location
舉例來說,如果您使用
gcloud
建構映像檔並上傳至 Container Registry,new-image-location 可能會是gcr.io/my-project/my-new-image:v1.0
。部署容器:
kubectl apply -f deployment_spec.yaml
容器部署完成後,您可以檢查容器,確認服務未執行。例如:
# Get pod name. $ kubectl get pod # Connect to pod. $ kubectl exec -it POD_NAME -- /bin/bash # View running services. This step is OS dependent. For example: $ service --status-all