Lista bloccata dei servizi personalizzati

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

Puoi anche definire un tuo elenco personalizzato di servizi da disattivare in un contenitore sottoposto a 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 lista bloccata personalizzata in un file .yaml, nel seguente 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 unico gruppo. Specifica un valore di stringa per il nome del gruppo.
  • Il nome del servizio specifica il servizio da disattivare nel contenitore di cui è stata eseguita la migrazione.

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

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

Applicazione di una lista bloccata personalizzata

Applica la lista bloccata personalizzata a un contenitore:

  • Creare un configmap Kubernetes contenente la lista bloccata e aggiungerla alla specifica di deployment del contenitore.

    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 contenitore, non è necessario eseguire alcuna configurazione aggiuntiva sul cluster prima del deployment.

Utilizzo di un file configmap

Per creare una lista bloccata utilizzando un configmap:

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

  2. Crea un file .yaml della lista bloccata come mostrato sopra che elenca il servizio che vuoi disattivare. 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, il configmap si chiama 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 di 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 mountPath del configmap e del nome del file .yaml della lista bloccata, my-blocklist.yaml.

    4. Salva il file.

  7. Esegui il deployment del contenitore:

    kubectl apply -f deployment_spec.yaml
  8. Dopo aver eseguito il deployment del contenitore, puoi esaminarlo 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. Esegui la migrazione della VM di origine in un container.

  2. Apri il file Dockerfile in un editor.

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

    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 l'hai caricata in Container Registry.

  7. Esegui il deployment del contenitore:

    kubectl apply -f deployment_spec.yaml
  8. Dopo aver eseguito il deployment del contenitore, puoi esaminarlo 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