kubernetes 中的 Dockershim 弃用 - Containerd 上的 DIND

Poo*_*rna 10 containers docker kubernetes amazon-eks

目前,我们正在 kuberenetes 上使用dind(我们没有从主机安装 docker.sock)来构建容器映像,并在容器内运行容器以运行单元测试。随着Kubernetes中 Dockershim 的弃用,我正在尝试分析 dind 是否仍然可以在没有 dockershim 且使用 Containerd 运行时的 Kubernetes 上运行。

我尝试在 gcp 和 aws eks 上运行 dind pod,并使用 kubernetes 1.21 版本的 containerd 容器运行时。它在特权模式下工作没有任何问题。但我很困惑它如何工作,因为dind是docker中的docker而不是containerd中的docker。我做了一些研究,但仍然无法弄清楚它是如何工作的以及它是否适用于 kubernetes 1.24 版本。有人可以帮忙吗?

我使用下面的规范使用 containerd 运行时在 kubernetes 上进行测试

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: dind
  name: dind
spec:
  containers:
  - image: docker:20.10.12-dind
    name: dind
    ports:
    - containerPort: 2375
    securityContext:
     privileged: true
    env:
    - name: DOCKER_TLS_CERTDIR
      value: ''
  - name: client
    image: ubuntu:latest
    command:
    - sleep
    - infinity
    env:
    - name: DOCKER_HOST
      value: tcp://localhost:2375
Run Code Online (Sandbox Code Playgroud)

有关 dockershim 弃用的 AWS 用户指南

gei*_*ger 2

尽管名称为 docker-in-docker,但它实际上是 docker-in-any-company-CRI-runtime。该条款证实了这一点(来源https://kubernetes.io/blog/2020/12/02/dockershim-faq/#will-my-existing-docker-images-still-work):

是的,从 docker build 生成的映像将适用于​​所有 CRI 实现。您现有的所有图像仍将完全相同。

所以如果你不使用/var/run/docker.sock你就很好。