自定义服务屏蔽名单
默认情况下,Migrate to Containers 会在将虚拟机迁移到容器时停用不需要的服务。这些服务有时可能会导致已迁移的容器出现问题,或者不为容器上下文所需要。
您还可以使用自定义屏蔽名单定义要在迁移的容器中停用的专属自定义服务列表。使用屏蔽名单,您可以在迁移的容器中指定要停用的一个或多个服务。
定义屏蔽名单
在 .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
创建屏蔽名单,请执行以下操作:
将来源虚拟机迁移到容器。
按照上文所示的步骤创建 blocklist.yaml 文件以列出要停用的服务。在此示例中,将文件命名为
my-blocklist.yaml
。从 blocklist.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
的新环境变量,指定 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 来创建自定义屏蔽名单。
将来源虚拟机迁移到容器。
在编辑器中打开 Dockerfile。
添加以下
COPY
命令,以将 blocklist.yaml 文件添加到容器的文件系统中:COPY src dest
例如:
COPY my-blocklist.yaml /etc/mybl/my-blocklist.yaml
目标路径可以是容器中的任何路径。
添加一个名为
HC_CUSTOM_SERVICE_BLOCKLIST
的新环境变量,以根据COPY
命令指定的文件目标,指定 blocklist.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