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
:
Eseguire la migrazione della VM di origine in un container.
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
.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
Visualizza il file configmap:
kubectl describe configmaps
Modifica il file
deployment_spec.yaml
creato durante la migrazione del contenitore:vi deployment_spec.yaml
Nella specifica del deployment, aggiungi quanto segue:
Aggiungi un nuovo volume per
configmap
involumes
:volumes: - configMap: name: blocklistcm # Name of the config map you created above. name: blocklistvol # Name of the configmap volume.
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.
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 essereHC_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
.Salva il file.
Esegui il deployment del container:
kubectl apply -f deployment_spec.yaml
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.
Eseguire la migrazione della VM di origine in un container.
Apri il Dockerfile in un editor.
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.
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 comandoCOPY
. Il nome della variabile di ambiente deve essereHC_CUSTOM_SERVICE_BLOCKLIST
:ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path
Ad esempio:
ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
Aggiorna l'immagine container.
Il modo in cui aggiorni l'immagine del contenitore dipende dall'ambiente di compilazione. Puoi utilizzare:
gcloud
per creare l'immagine e caricarla in Container Registry come descritto in Guida rapida: compilazione.docker build
come descritto in Creare ed eseguire l'immagine .
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 utilizzatogcloud
per creare l'immagine e averla caricata in Container Registry.Esegui il deployment del contenitore:
kubectl apply -f deployment_spec.yaml
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