kubernetes 在容器中使用Docker镜像

wkyowqbh  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(120)

我有一个Docker镜像,我通过执行docker save -o flaskapp.tar flaskapp:v1将它导入到containerd
现在我使用ctr images import flaskapp.tar以下的命令将其导入到containerd中
之后ctr images list显示所需的图像

root@test:/home/test/demo-flask-app# ctr images ls
REF                           TYPE                                                 DIGEST                                                                  SIZE      PLATFORMS   LABELS
docker.io/library/flaskapp:v1 application/vnd.docker.distribution.manifest.v2+json sha256:eecf6ae069cb7ec4bc6126a0fbe5e7ef1b136ac42e3466ee7e029342630f5321 530.4 MiB linux/amd64 -
root@test:/home/test/demo-flask-app#

部署yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-proj-deployment
  namespace: default
  labels:
    app: flask-proj
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flask-proj
  template:
    metadata:
      labels:
        app: flask-proj
    spec:
      containers:
      - name: flask-proj
        image: docker.io/library/flaskapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5001

当我在k8s部署YAML中使用docker.io/library/flaskapp:v1时,k8s无法提取映像。这是怎么回事?

hof1towb

hof1towb1#

containerd容器是命名空间的,它们在Kubernetes的k8s.io命名空间中运行。因此,图像需要存在于k8s.io containerd命名空间中才能工作。您可以尝试以下操作进行确认:

$ ctr -n k8s.io images ls
# if image is not found, import it
$ ctr -n k8s.io images import flaskapp.tar

如果你不想在每个命令中都传递命名空间,你可以用CONTAINERD_NAMESPACE覆盖它:

export CONTAINERD_NAMESPACE=k8s.io

相关问题