Esegui l'upgrade dei carichi di lavoro dei container per un runtime migliorato
Se hai carichi di lavoro di container esistenti creati utilizzando le versioni 1.7.x e 1.8.x di Migrate to Containers, puoi convertirli in modo da utilizzare il gestore di servizi Linux semplificato. Questa conversione ti consente di eseguire questi container su cluster GKE Autopilot.
Per eseguire la conversione, modifica il Dockerfile e il file deployment_spec.yaml
creato quando hai eseguito la migrazione originale. Dopo la modifica, puoi eseguire il deployment
del carico di lavoro dei container su cluster Autopilot.
Informazioni sulla conversione dei carichi di lavoro dei container
La procedura per la conversione dei carichi di lavoro esistenti dipende dalla conversione di un carico di lavoro stateless o stateful.
Un carico di lavoro stateful conserva o archivia le informazioni sullo stato. Per i carichi di lavoro stateful, spesso monta volumi aggiuntivi utilizzando StatefulSet
in spec.containers.volumeMounts
.
Assicurati di conservare le definizioni di volumeMounts
e di rimuoverle anche per /sys/fs/cgroup
.
Per ulteriori informazioni, consulta la sezione Installazione di volumi esterni.
Il processo generale di conversione di un carico di lavoro esistente richiede la modifica di:
Dockerfile
- Imposta la versione Migrate to Containers su 1.15.0.
- Inserisci due comandi
ADD
per copiare il filelogs.yaml
nell'immagine container. - Inserisci un comando
RUN
per l'utilitàservicemanager_generate_config
.
deployment_spec.yaml
file in:- Elimina le definizioni di
hostPath
evolumeMounts
per/sys/fs/cgroup
. - Elimina la definizione di
securityContext
. - Elimina la definizione di
readinessProbe
. - Puoi lasciare le definizioni di
mountPath
econfigMap
perlogs-config
, tuttavia, al momento il logging non funziona con il gestore di servizi Linux semplificato.
- Elimina le definizioni di
Per informazioni sulla procedura di conversione specifica, consulta le sezioni seguenti:
Converti un carico di lavoro stateless
L'esempio seguente mostra come convertire un carico di lavoro di container stateless:
Individua la directory contenente gli artefatti di migrazione esistenti, incluso il file
deployment_spec.yaml
.Modifica il Dockerfile per impostare la versione del prodotto, copiare il file
logs.yaml
ed eseguire l'utilitàservicemanager_generate_config
:... # Set the product version to 1.15.0: FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.15.0 as migrate-for-anthos-runtime ... ADD blocklist.yaml /.m4a/blocklist.yaml # Insert the ADD commands to copy the `logs.yaml` file to the container image: ADD logs.yaml /code/config/logs/logsArtifact.yaml ADD logs.yaml /code/config/logs/logs.yaml # Insert the RUN command for servicemanager_generate_config: RUN /servicemanager_generate_config build-all -o /.m4a/ # Migrate to Containers image includes entrypoint ENTRYPOINT [ "/.v2k.go" ]
Apri il file
deployment_spec.yaml
in un editor. Ad esempio:vi deployment_spec.yaml
Individua la seguente sezione nel file ed elimina le righe indicate:
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null name: IMAGE_NAME … spec: containers: - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL name: IMAGE_NAME # Delete the following lines: readinessProbe: exec: command: - /code/ready.sh resources: {} securityContext: privileged: true volumeMounts: - mountPath: /sys/fs/cgroup name: cgroups - mountPath: /code/config/logs name: logs-config volumes: - hostPath: path: /sys/fs/cgroup type: Directory name: cgroups - configMap: name: suitecrm-crddefault-logs name: logs-config # Stop the delete here.
Aggiungi le righe seguenti per impostare la variabile di ambiente
HC_V2K_SERVICE_MANAGER
.spec: containers: - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL name: IMAGE_NAME # Add the following lines: env: - name: HC_V2K_SERVICE_MANAGER value: "true"
Salva il file.
Assicurati che il cluster di destinazione abbia accesso in lettura al registro di immagini Docker come descritto in Assicurati che il cluster di destinazione abbia accesso in lettura al registro di immagini Docker.
Crea l'immagine aggiornata ed esegui il push su Container Registry con un tag di versione aggiornato, assicurandoti di lasciare tempo sufficiente per il completamento della build. Nell'esempio seguente, l'immagine si trova nella directory attuale:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Esegui il deployment del container:
kubectl apply -f deployment_spec.yaml
Se applichi la specifica di deployment a un cluster Autopilot senza le modifiche necessarie in
deployment_spec.yaml
, viene visualizzato un messaggio di errore nel modulo:"Trying to run without root privileges is not possible. Did you try to use the new runtime? In that case please pass the environment variable HC_V2K_SERVICE_MANAGER=true to the pod"
Visualizza i pod di cui viene eseguito il deployment nel cluster.
kubectl get pods
Converti un carico di lavoro stateful
L'esempio seguente mostra come convertire un carico di lavoro di container stateful:
Individua la directory contenente gli artefatti di migrazione esistenti, incluso il file
deployment_spec.yaml
.Modifica il Dockerfile per impostare la versione del prodotto ed eseguire l'utilità
servicemanager_generate_config
:... # Set the product version to 1.15.0: FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.15.0 as migrate-for-anthos-runtime ... ADD blocklist.yaml /.m4a/blocklist.yaml # Insert the ADD commands to copy the `logs.yaml` file to the container image: ADD logs.yaml /code/config/logs/logsArtifact.yaml ADD logs.yaml /code/config/logs/logs.yaml # Insert the RUN command for servicemanager_generate_config: RUN /servicemanager_generate_config build-all -o /.m4a/ # Migrate to Containers image includes entrypoint ENTRYPOINT [ "/.v2k.go" ]
Apri il file
deployment_spec.yaml
in un editor. Ad esempio:vi deployment_spec.yaml
Individua le tre sezioni seguenti nel file ed elimina le righe indicate:
apiVersion: apps/v1 kind: StatefulSet ... spec: containers: - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL name: IMAGE_NAME # Delete the following lines: readinessProbe: exec: command: - /code/ready.sh resources: {} securityContext: privileged: true # Stop the delete here. volumeMounts: # Delete the following lines: - mountPath: /sys/fs/cgroup name: cgroups # Stop the delete here. - mountPath: /opt/suitecrm-7.10.5-0/mysql/data name: data-pvc-0-1b12-d0af-48b3-9f5e-6c25fa5 subPath: opt/suitecrm-7.10.5-0/mysql/data volumes: # Delete the following lines: - hostPath: path: /sys/fs/cgroup type: Directory name: cgroups # Stop the delete here. - name: data-pvc-2-d0af-48b3-9f5e09c25fa5 persistentVolumeClaim: claimName: data-pvc-0-1a2-d0af-48b3-9f5e-605fa5
Tieni presente che rimuovi solo le definizioni
volumeMounts
evolumes
percgroups
e lasci le definizioni rimanenti.Aggiungi le seguenti righe per impostare la variabile di ambiente
HC_V2K_SERVICE_MANAGER
:spec: containers: - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL name: IMAGE_NAME # Add the following lines: env: - name: HC_V2K_SERVICE_MANAGER value: "true" # Stop the add here. volumeMounts: - mountPath: /opt/suitecrm-7.10.5-0/mysql/data name: data-pvc-0-1b12-d0af-48b3-9f5e-6c25fa5 subPath: opt/suitecrm-7.10.5-0/mysql/data volumes: - name: data-pvc-2-d0af-48b3-9f5e09c25fa5 persistentVolumeClaim: claimName: data-pvc-0-1a2-d0af-48b3-9f5e-605fa5
Salva il file.
Assicurati che il cluster di destinazione abbia accesso in lettura al registro di immagini Docker come descritto in Assicurati che il cluster di destinazione abbia accesso in lettura al registro di immagini Docker.
Crea l'immagine aggiornata ed esegui il push su Container Registry con un tag di versione aggiornato, assicurandoti di lasciare tempo sufficiente per il completamento della build. Nell'esempio seguente, l'immagine si trova nella directory attuale:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Esegui il deployment del container:
kubectl apply -f deployment_spec.yaml
Se applichi la specifica di deployment a un cluster Autopilot senza le modifiche necessarie in
deployment_spec.yaml
, vedrai un messaggio di errore nel modulo:"Trying to run without root privileges is not possible. Did you try to use the new runtime? In that case please pass the environment variable HC_V2K_SERVICE_MANAGER=true to the pod"
Visualizza i pod di cui viene eseguito il deployment nel cluster.
kubectl get pods
Attività post conversione
Dopo aver convertito una migrazione esistente per utilizzare il gestore di servizi Linux semplificato, puoi modificarla in:
- Aggiorna i servizi utilizzati dal carico di lavoro di cui è stata eseguita la migrazione.
- Aggiungi nuovi servizi.
In entrambi gli scenari, devi modificare il Dockerfile, quindi ricreare l'immagine del container.
Aggiornamento servizi
In questa sezione modificherai il Dockerfile per aggiornare il file services-config.yaml
nel container in base alle modifiche apportate in /etc/systemd
al carico di lavoro di cui è stata eseguita la migrazione.
Per aggiornare l'immagine container in caso di modifica a un servizio esistente:
Aggiungi il comando
servicemanager_generate_config
nel Dockerfile:... FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.15.0 as migrate-for-anthos-runtime ... ADD blocklist.yaml /.m4a/blocklist.yaml # Use the update command for servicemanager_generate_config to update the configuration: RUN /servicemanager_generate_config update -u /.m4a/ # Migrate to Containers image includes entrypoint ENTRYPOINT [ "/.v2k.go" ]
Crea l'immagine aggiornata ed esegui il push su Container Registry con un tag di versione aggiornato, assicurandoti di lasciare tempo sufficiente per il completamento della build. Nell'esempio seguente, l'immagine si trova nella directory attuale:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Esegui il deployment dell'immagine appena creata:
kubectl set image deployment/myWorkload my-app=gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL --record
Aggiungi servizi
Per aggiungere un servizio all'immagine container:
Aggiungi il comando
servicemanager_generate_config
nel Dockerfile:... FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.15.0 as migrate-for-anthos-runtime ... ADD blocklist.yaml /.m4a/blocklist.yaml # This example adds the redis-server service. # Add the following lines to install redis-server. RUN apt-get update && apt-get -y install redis-server # Use the servicemanager_generate_config add command to add # redis-server to the configuration: RUN /servicemanager_generate_config add redis-server -u /.m4a/ # Migrate to Containers image includes entrypoint ENTRYPOINT [ "/.v2k.go" ]
Crea l'immagine aggiornata ed esegui il push su Container Registry con un tag di versione aggiornato, assicurandoti di lasciare tempo sufficiente per il completamento della build. Nell'esempio seguente, l'immagine si trova nella directory attuale:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Esegui il deployment dell'immagine appena creata:
kubectl set image deployment/myWorkload my-app=gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL --record
Sintassi servicemanager_generate_config
L'utilità servicemanager_generate_config
accetta le seguenti opzioni:
build-all -o /.m4a/
: ricostruisce la migrazione e scrive la configurazione nella directorym4a
. Non modificare il nome della directory.Utilizza questa forma di comando quando converti per la prima volta la migrazione per utilizzare il gestore di servizi Linux semplificato.
update -u /.m4a/
: aggiorna l'elenco dei servizi esistenti nella directorym4a
. Non modificare il nome della directory.add SERVICE_NAME -u /.m4a/
: aggiungi il nome del servizio alla migrazione e scrive la configurazione nella directorym4a
. Non modificare il nome della directory.Per aggiungere più servizi, aggiungi più comandi
RUN /servicemanager_generate_config
, uno per servizio.
Passaggi successivi
- Scopri di più sul nuovo runtime migliorato.