カスタム サービスのブロックリスト
デフォルトでは、Migrate to Containers は VM をコンテナに移行するときに VM 上の不要なサービスを無効にします。これらのサービスにより、移行後のコンテナで問題が発生することがあります。また、これらのサービスがコンテナのコンテキストで不要になることもあります。
カスタム ブロックリストを使用すると、移行されたコンテナで無効にするサービスの独自のカスタムリストを定義することもできます。ブロックリストには、移行されたコンテナで無効にするサービスを 1 つ以上指定します。
ブロックリストの定義
.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>
ここで
- グループはサービスの論理的な集合体で、類似するサービスを 1 つのグループにまとめることができます。グループ名の文字列値を指定します。
- サービス名には、移行後のコンテナで無効にするサービスを指定します。
たとえば、次のように my-blocklist.yaml
ファイルを定義します。
service_list:
- name: lvm-related
services:
- lvm2-lvmetad
- name: hardware-related
services:
- microcode
- microcode.ctl
カスタム ブロックリストの適用
次のいずれかの方法で、カスタム ブロックリストをコンテナに適用します。
ブロックリストを含む Kubernetes
configmap
を作成し、コンテナの Deployment 仕様に追加します。この方法では、コンテナを再ビルドすることなくブロックリストを追加できます。ただし、コンテナをホストするすべてのクラスタで
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 とブロックリスト .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
コンテナ イメージを更新します。
コンテナ イメージの更新方法はビルド環境によって異なります。次の方法があります。
gcloud
を使用してイメージをビルドし、クイックスタート: ビルドの説明に従って Container Registry にアップロードします。イメージを作成して実行するの説明に従って
docker build
を実行します。
新しいイメージをビルドしたら、エディタで
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