Lista bloccata dei servizi personalizzati

Per impostazione predefinita, Migrate to Containers disabilita i servizi non necessari su una VM quando ne esegui la migrazione in un container. Questi servizi a volte possono causare problemi con il container di cui è stata eseguita la migrazione o non sono necessari in un contesto del container.

Puoi anche definire un tuo elenco personalizzato di servizi da disabilitare in un container di cui è stata eseguita la migrazione utilizzando una lista bloccata personalizzata. Con una lista bloccata, puoi specificare uno o più servizi da disattivare in un contenitore di cui è stata eseguita la migrazione.

Definizione della lista bloccata

Definisci la tua lista bloccata personalizzata in un file .yaml, nel formato:

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>

Dove:

  • I gruppi sono una raccolta logica di servizi che ti consente di raccogliere servizi simili in un singolo gruppo. Specifica un valore di stringa per il nome del gruppo.
  • Il nome del servizio specifica il servizio da disabilitare nel container di cui è stata eseguita la migrazione.

Ad esempio, definisci il file my-blocklist.yaml come segue:

service_list:
  - name: lvm-related
    services:
      - lvm2-lvmetad
  - name: hardware-related
    services:
      - microcode
      - microcode.ctl

Applicazione di una lista bloccata personalizzata

Per applicare la lista bloccata personalizzata a un contenitore, procedi in uno dei seguenti modi:

  • Creazione di un oggetto configmap Kubernetes contenente la lista bloccata e aggiunta alle specifiche di deployment del container.

    Questo metodo ti consente di aggiungere la lista bloccata senza dover ricostruire il contenitore. Tuttavia, devi ricreare configmap su ogni cluster utilizzato per ospitare il contenitore.

  • Modifica il Dockerfile per il contenitore e ricostruisci l'immagine del contenitore.

    Questo metodo richiede di ricostruire l'immagine del contenitore per aggiungere la lista bloccata. Poiché la lista bloccata è ora inclusa nel container, non è necessario eseguire alcuna configurazione aggiuntiva sul cluster prima del deployment.

Utilizzo di una mappa di configurazione

Per creare una lista bloccata utilizzando un configmap:

  1. Eseguire la migrazione della VM di origine in un container.

  2. Crea un file .yaml della lista bloccata, come mostrato sopra, che elenca il servizio da disabilitare. In questo esempio, assegna al file il nome my-blocklist.yaml.

  3. Crea un configmap dal file .yaml della lista bloccata:

    kubectl create configmap configmap-name --from-file=path-to-yaml

    In questo esempio, la configmap è denominata blocklistcm:

    kubectl create configmap blocklistcm --from-file=./my-blocklist.yaml
  4. Visualizza il file configmap:

    kubectl describe configmaps
  5. Modifica il file deployment_spec.yaml creato durante la migrazione del contenitore:

    vi deployment_spec.yaml
  6. Nella specifica del deployment, aggiungi quanto segue:

    1. Aggiungi un nuovo volume per configmap in volumes:

      volumes:
      - configMap: 
           name: blocklistcm # Name of the config map you created above. 
         name: blocklistvol # Name of the configmap volume.
      
    2. Aggiungi un montaggio del volume per il ConfigMap:

      spec:
        containers: 
          volumeMounts: 
          - mountPath: /etc/bl # Mount path for the configmap volume. 
            name: blocklistvol # Name of the configmap volume. 
      
    3. Aggiungi una nuova variabile di ambiente denominata HC_CUSTOM_SERVICE_BLOCKLIST che specifichi il percorso del file .yaml della lista bloccata. Il nome della variabile di ambiente deve essere HC_CUSTOM_SERVICE_BLOCKLIST:

      containers:
       - image: container-image-location
         env:
         - name: HC_CUSTOM_SERVICE_BLOCKLIST
           value: "/etc/bl/my-blocklist.yaml"
      

      Il percorso specificato dal valore è la concatenazione del valore mountPath della mappa di configurazione e il nome del file .yaml della lista bloccata, my-blocklist.yaml.

    4. Salva il file.

  7. Esegui il deployment del container:

    kubectl apply -f deployment_spec.yaml
  8. Dopo il deployment del container, puoi esaminare il container per assicurarti che i servizi non siano in esecuzione. Ad esempio:

    # 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```
    

Modifica del Dockerfile

Questa sezione descrive come creare una lista bloccata personalizzata modificando il file Dockerfile creato dalla migrazione.

  1. Eseguire la migrazione della VM di origine in un container.

  2. Apri il Dockerfile in un editor.

  3. Aggiungi il seguente comando COPY per aggiungere il file .yaml della lista bloccata al file system del container:

    COPY src dest 

    Ad esempio:

    COPY my-blocklist.yaml /etc/mybl/my-blocklist.yaml

    Il percorso di destinazione può essere qualsiasi percorso all'interno del contenitore.

  4. Aggiungi una nuova variabile di ambiente denominata HC_CUSTOM_SERVICE_BLOCKLIST che specifica il percorso del file .yaml della lista bloccata in base alla destinazione del file specificata dal comando COPY. Il nome della variabile di ambiente deve essere HC_CUSTOM_SERVICE_BLOCKLIST:

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path

    Ad esempio:

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
  5. Aggiorna l'immagine container.

    Il modo in cui aggiorni l'immagine del contenitore dipende dall'ambiente di compilazione. Puoi utilizzare:

    1. gcloud per creare l'immagine e caricarla in Container Registry come descritto in Guida rapida: compilazione.

    2. docker build come descritto in Creare ed eseguire l'immagine .

  6. Dopo aver creato la nuova immagine, apri il file deployment_spec.yaml in un editor per aggiornare la posizione dell'immagine:

    spec:
      containers:
      - image: new-image-location

    Ad esempio, new-image-location potrebbe essere gcr.io/my-project/my-new-image:v1.0 se hai utilizzato gcloud per creare l'immagine e averla caricata in Container Registry.

  7. Esegui il deployment del contenitore:

    kubectl apply -f deployment_spec.yaml
  8. Dopo il deployment del container, puoi esaminare il container per assicurarti che i servizi non siano in esecuzione. Ad esempio:

    # 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