Atualize as cargas de trabalho do contentor para um tempo de execução melhorado
Se tiver cargas de trabalho de contentores existentes criadas com as versões 1.7.x e 1.8.x do Migrate to Containers, pode convertê-las para usar o gestor de serviços Linux simplificado. Esta conversão permite-lhe executar estes contentores em clusters do GKE Autopilot.
Para fazer a conversão, edite o Dockerfile e o ficheiro deployment_spec.yaml
criado quando fez a migração original. Depois de editado, pode
implementar a carga de trabalho do contentor em clusters do Autopilot.
Acerca da conversão de cargas de trabalho de contentores
O procedimento para converter cargas de trabalho existentes depende de estar a converter uma carga de trabalho sem estado ou uma carga de trabalho com estado.
Uma carga de trabalho com estado é aquela que mantém ou armazena informações de estado. Para cargas de trabalho com estado,
monta frequentemente volumes adicionais através de StatefulSet
em spec.containers.volumeMounts
.
Certifique-se de que mantém as volumeMounts
definições e as remove para /sys/fs/cgroup
.
Consulte o artigo Montar volumes externos para mais informações.
O processo geral de conversão de uma carga de trabalho existente requer que edite o seguinte:
Ficheiro Docker
- Defina a versão do Migrate to Containers como 1.15.0.
- Insira dois comandos
ADD
para copiar o ficheirologs.yaml
para a imagem do contentor. - Insira um comando
RUN
para o utilitárioservicemanager_generate_config
.
deployment_spec.yaml
ficheiro para:- Eliminar as definições de
hostPath
evolumeMounts
para/sys/fs/cgroup
. - Elimine a definição
securityContext
. - Elimine a definição
readinessProbe
. - Pode deixar as definições
mountPath
econfigMap
paralogs-config
. No entanto, o registo não funciona atualmente com o gestor de serviços Linux simplificado.
- Eliminar as definições de
Para o processo de conversão específico, consulte as secções abaixo:
Converta uma carga de trabalho sem estado
O exemplo seguinte mostra como converter uma carga de trabalho de contentor sem estado:
Localize o diretório que contém os artefactos de migração existentes, incluindo o ficheiro
deployment_spec.yaml
.Edite o Dockerfile para definir a versão do produto, copiar o ficheiro
logs.yaml
e executar o utilitárioservicemanager_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" ]
Abra o ficheiro
deployment_spec.yaml
num editor. Por exemplo:vi deployment_spec.yaml
Localize a seguinte secção no ficheiro e elimine as linhas indicadas:
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.
Adicione as linhas abaixo para definir a variável de 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"
Guarde o ficheiro.
Certifique-se de que o cluster de destino tem acesso de leitura ao registo de imagens de Docker, conforme descrito em Certifique-se de que o cluster de destino tem acesso de leitura ao registo de imagens de Docker.
Crie a imagem atualizada e envie-a para o Container Registry com uma etiqueta de versão atualizada, garantindo que permite tempo suficiente para a criação terminar. No exemplo seguinte, a imagem está no diretório atual:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Implemente o contentor:
kubectl apply -f deployment_spec.yaml
Se aplicar a especificação de implementação a um cluster do Autopilot sem as alterações necessárias em
deployment_spec.yaml
, é apresentada uma mensagem de erro no seguinte formato:"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"
Veja os pods que estão a ser implementados no cluster.
kubectl get pods
Converta uma carga de trabalho com estado
O exemplo seguinte mostra como converter uma carga de trabalho de contentor com estado:
Localize o diretório que contém os artefactos de migração existentes, incluindo o ficheiro
deployment_spec.yaml
.Edite o Dockerfile para definir a versão do produto e executar o utilitário
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" ]
Abra o ficheiro
deployment_spec.yaml
num editor. Por exemplo:vi deployment_spec.yaml
Localize as três secções seguintes no ficheiro e elimine as linhas indicadas:
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
Repare que remove apenas as definições
volumeMounts
evolumes
paracgroups
e deixa as restantes definições.Adicione as seguintes linhas para definir a variável de 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
Guarde o ficheiro.
Certifique-se de que o cluster de destino tem acesso de leitura ao registo de imagens de Docker, conforme descrito em Certifique-se de que o cluster de destino tem acesso de leitura ao registo de imagens de Docker.
Crie a imagem atualizada e envie-a para o Container Registry com uma etiqueta de versão atualizada, garantindo que permite tempo suficiente para a criação terminar. No exemplo seguinte, a imagem está no diretório atual:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Implemente o contentor:
kubectl apply -f deployment_spec.yaml
Se aplicar a especificação de implementação a um cluster do Autopilot sem as alterações necessárias em
deployment_spec.yaml
, é apresentada uma mensagem de erro no seguinte formato:"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"
Veja os pods que estão a ser implementados no cluster.
kubectl get pods
Tarefas pós-conversão
Depois de converter uma migração existente para usar o gestor de serviços Linux simplificado, pode querer modificá-la para:
- Atualize os serviços usados pela carga de trabalho migrada.
- Adicionar novos serviços.
Em ambos os cenários, tem de editar o Dockerfile e, em seguida, reconstruir a imagem do contentor.
Atualize os serviços
Nesta secção, edita o Dockerfile para atualizar o ficheiro services-config.yaml
no contentor com base nas alterações feitas em /etc/systemd
na carga de trabalho migrada.
Para atualizar a imagem do contentor para uma alteração a um serviço existente:
Adicione o comando
servicemanager_generate_config
no 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" ]
Crie a imagem atualizada e envie-a para o Container Registry com uma etiqueta de versão atualizada, garantindo que permite tempo suficiente para a criação terminar. No exemplo seguinte, a imagem está no diretório atual:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Implemente a imagem criada recentemente:
kubectl set image deployment/myWorkload my-app=gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL --record
Adicionar serviços
Para adicionar um serviço à imagem do contentor:
Adicione o comando
servicemanager_generate_config
no 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" ]
Crie a imagem atualizada e envie-a para o Container Registry com uma etiqueta de versão atualizada, garantindo que permite tempo suficiente para a criação terminar. No exemplo seguinte, a imagem está no diretório atual:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Implemente a imagem criada recentemente:
kubectl set image deployment/myWorkload my-app=gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL --record
Sintaxe de servicemanager_generate_config
O utilitário servicemanager_generate_config
aceita as seguintes opções:
build-all -o /.m4a/
: recompila a migração e escreve a configuração no diretóriom4a
. Não altere o nome do diretório.Use esta forma do comando quando converter inicialmente a migração para usar o gestor de serviços do Linux simplificado.
update -u /.m4a/
: atualize a lista de serviços existentes no diretóriom4a
. Não altere o nome do diretório.add SERVICE_NAME -u /.m4a/
: adiciona o nome do serviço à migração e escreve a configuração no diretóriom4a
. Não altere o nome do diretório.Para adicionar vários serviços, adicione vários comandos
RUN /servicemanager_generate_config
, um por serviço.
O que se segue?
- Saiba mais sobre o novo tempo de execução melhorado.