Lista de bloqueio de serviços personalizados
Por padrão, o Migrate to Containers desativa os serviços desnecessários em uma VM quando ela é migrada para um contêiner. Esses serviços às vezes podem causar problemas no contêiner migrado ou não são necessários em um contexto de contêiner.
Também é possível definir sua própria lista personalizada de serviços que será desativada em um contêiner migrado usando uma lista de bloqueio personalizada. Com uma lista de bloqueio, você especifica um ou mais serviços a serem desativados no contêiner migrado.
Como definir a lista de bloqueio
Defina sua lista de bloqueio personalizada em um arquivo .yaml no formulário:
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>
Em que:
- Grupos são uma coleção lógica de serviços para que você possa coletar serviços semelhantes em um único grupo. Especifique qualquer valor de string para o nome do grupo.
- O nome do serviço especifica o serviço a ser desativado no contêiner migrado.
Por exemplo, defina o arquivo my-blocklist.yaml
como:
service_list:
- name: lvm-related
services:
- lvm2-lvmetad
- name: hardware-related
services:
- microcode
- microcode.ctl
Como aplicar uma lista de bloqueio personalizada
Aplique sua lista de bloqueio personalizada a um contêiner:
Como criar um
configmap
do Kubernetes que contenha a lista de bloqueio e adicioná-lo à especificação de implantação do contêiner.Esse método permite que você adicione a lista de bloqueio sem ter que recriar o contêiner. No entanto, é necessário recriar o
configmap
em todos os clusters usados para hospedar o contêiner.Edite o Dockerfile do contêiner e recrie a imagem.
Esse método requer que você recrie a imagem do contêiner para adicionar a lista de bloqueio. Como a lista de bloqueio agora está incluída no contêiner, não é necessário executar outras configurações no cluster antes da implantação.
Como usar um configmap
Para criar uma lista de bloqueio usando um configmap
:
Migre a VM de origem para um contêiner.
Crie um arquivo .yaml de lista de bloqueio, conforme mostrado acima, que lista o serviço que você quer desativar. Neste exemplo, nomeie o arquivo
my-blocklist.yaml
.Crie um
configmap
a partir do arquivo .yaml de lista de bloqueio:kubectl create configmap configmap-name --from-file=path-to-yaml
Neste exemplo, o configmap é chamado de
blocklistcm
:kubectl create configmap blocklistcm --from-file=./my-blocklist.yaml
Ver o configmap:
kubectl describe configmaps
Edite o
deployment_spec.yaml
criado quando você migrou o contêiner:vi deployment_spec.yaml
Na especificação de implantação, adicione o seguinte:
Adicione um novo volume para
configmap
emvolumes
:volumes: - configMap: name: blocklistcm # Name of the config map you created above. name: blocklistvol # Name of the configmap volume.
Adicione uma montagem do volume para o configmap:
spec: containers: volumeMounts: - mountPath: /etc/bl # Mount path for the configmap volume. name: blocklistvol # Name of the configmap volume.
Adicione uma nova variável de ambiente chamada
HC_CUSTOM_SERVICE_BLOCKLIST
especificando o caminho para o arquivo .yaml de lista de bloqueio. O nome da variável de ambiente precisa serHC_CUSTOM_SERVICE_BLOCKLIST
:containers: - image: container-image-location env: - name: HC_CUSTOM_SERVICE_BLOCKLIST value: "/etc/bl/my-blocklist.yaml"
O caminho especificado por valor é a concatenação do mountPath do configmap e do nome do arquivo .yaml de lista de bloqueio,
my-blocklist.yaml
.Salve o arquivo.
Implantar o contêiner:
kubectl apply -f deployment_spec.yaml
Depois que o contêiner for implantado, examine-o para garantir que os serviços não estarão em execução. Exemplo:
# 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```
Como editar o Dockerfile
Esta seção descreve como criar uma lista de bloqueio personalizada editando o Dockerfile criado pela migração.
Migre a VM de origem para um contêiner.
Abra o Dockerfile em um editor.
Adicione o seguinte comando
COPY
para adicionar o arquivo .yaml de lista de bloqueio ao sistema de arquivos do contêiner:COPY src dest
Por exemplo:
COPY my-blocklist.yaml /etc/mybl/my-blocklist.yaml
O caminho de destino pode ser qualquer caminho dentro do contêiner.
Adicione uma nova variável de ambiente chamada
HC_CUSTOM_SERVICE_BLOCKLIST
especificando o caminho para o arquivo .yaml de lista de bloqueio com base no destino do arquivo especificado pelo comandoCOPY
. O nome da variável de ambiente precisa serHC_CUSTOM_SERVICE_BLOCKLIST
:ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path
Por exemplo:
ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
Atualize a imagem do contêiner.
O modo como você atualiza a imagem do contêiner depende do seu ambiente de criação. Você pode usar:
gcloud
para criar a imagem e fazer upload dela para o Container Registry, conforme descrito noGuia de início rápido: criar.docker build
, conforme descrito em Criar e executar a imagem
Depois de criar a nova imagem, abra o arquivo
deployment_spec.yaml
em um editor para atualizar o local da imagem:spec: containers: - image: new-image-location
Por exemplo, new-image-location pode ser
gcr.io/my-project/my-new-image:v1.0
, se você usougcloud
para criar a imagem e enviá-la ao Container Registry.Implantar o contêiner:
kubectl apply -f deployment_spec.yaml
Depois que o contêiner for implantado, examine-o para garantir que os serviços não estarão em execução. Exemplo:
# 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