guía de uso incompleta de nerdctl (desarrolladores)

Tabla de contenido

fondo

Configuración del entorno

1. Compile el archivo ejecutable de golang

2. Cree rápidamente imágenes especulares


fondo

K8s adoptó containerd después de abandonar docker como tiempo de ejecución en la versión 1.22 Ha habido muchas herramientas o soluciones de integración de código abierto para el método de instalación de k8s usando containerd como tiempo de ejecución, así que no entraré en detalles aquí. Este artículo solo describe algunas habilidades del desarrollador después de reemplazar Docker.

Después de cambiar de docker a containerd, las herramientas de línea de comandos ctr y crictl no son muy fáciles de usar, por lo que existe nerdctl.
El uso de nerdctl es consistente con el de docker, y tiene la misma experiencia que docker, que se usa para reemplazar el cli de docker para operaciones push/pull/run.

Configuración del entorno

Clúster v1.25.0 k8s construido por tres hosts

Instalado con:

nerdctl (si no, descárguelo usted mismo y colóquelo en la ruta de la variable de entorno)

contenedor

Sin ubicación de golang

sin kit de construcción

1. Compile el archivo ejecutable de golang

El desarrollo y la depuración generalmente no requieren ci/cd para compilar y empaquetar la imagen de todo el enlace, lo que requiere mucho tiempo y puede requerir colaboración ascendente y descendente, lo que aumenta los costos de comunicación y tiempo. Especialmente en el campo del desarrollo de operación y mantenimiento, al realizar servicios sin estado o invocar algunos servicios del sistema, puede usar el clúster de prueba de desarrollo o la depuración local. La forma más sencilla es compilar el programa directamente en el servidor e iniciar el programa ejecutable arreglando el nodo y montando el volumen de datos, lo que ahorra el paso de empaquetar la imagen.

Y debido a razones bien conocidas, la velocidad de carga de programas ejecutables compilados localmente en el servidor de la nube es muy lenta.Es mejor sincronizar directamente el código en el servidor y completar la compilación directamente en el servidor.

El siguiente comando muestra cómo compilar rápidamente archivos de proyecto en el servidor a través de un contenedor con un entorno de compilación golang:

nerdctl run --rm -it  \
-v ${project_dir}:/app \ # 主机项目目录挂载进容器工作目录
-v ${GOPATH}:/go \ # 主机任一目录 用来存放 go pkg
-w /app \
-e CGO_ENABLED=0  \
-e GOPROXY=https://goproxy.cn \
golang:1.18-alpine3.16 \
go build -o build/prods prods.go

2. Cree rápidamente imágenes especulares

A veces, no solo es necesario ejecutar la carga de trabajo en k8s para iniciar el programa ejecutable, sino que también es posible que deba empaquetarse en una imagen de contenedor para realizar pruebas.Si lo empaqueta directamente en el servidor a través de nerdctl build, debe instalar el buildkitd programa de fondo para apoyarlo. La descripción oficial es la siguiente

Comandos:
  build Crea una imagen a partir de un Dockerfile. Necesita buildkitd para estar funcionando.

Dado que la pereza es nuestro propósito, simplemente lo construimos directamente en el contenedor, es decir, dind (docker en docker). Después de convertir de docker a containerd, debería llamarse cinc, que también es una posición común en la tubería ci/cd . Utilizo kaniko como herramienta de compilación en el contenedor. Podemos especificar la ruta del archivo docker y la ruta de salida (como docker hub, puerto) pasando variables de entorno para el contenedor. Para obtener más información, consulte la documentación oficial.

nerdctl run  --name myapp \
   -v /mnt/project/myapp/build:/workspace \ # 挂载编译的可执行文件和dockfile到工具目录
    aiotceo/kaniko-executor:v1.6.0 \ # 安装有kaniko的镜像
    --dockerfile /workspace/Dockerfile \
    --destination "192.168.0.152:5000/myapp:v1" \ # 输出到内网harbor
    --context dir:///workspace/

Supongo que te gusta

Origin blog.csdn.net/kingu_crimson/article/details/129361786
Recomendado
Clasificación