EKS集群如何部署docker客户端工具

2022-08-11 13:40:56 浏览数 (3)

弹性容器服务(Elastic Kubernetes Service,EKS)是腾讯云容器服务推出的无须用户购买节点即可部署工作负载的服务模式。弹性容器服务 EKS 完全兼容原生 Kubernetes,支持使用原生方式购买及管理资源,按照容器真实使用的资源量计费。弹性容器服务 EKS 还扩展支持腾讯云的存储及网络等产品,同时确保用户容器的安全隔离,开箱即用。

现在很多业务都部署到了eks上,部署的过程中,会遇到一些部署的问题,比如pod因为镜像拉取失败起不来,但是eks是没有节点的,无法执行docker命令测试,那么我要怎么测试eks内拉取镜像呢? 很多人会想到,可以采用docker in docker的方式,但是这个方式是需要挂载节点的docker.sock的,eks没有节点,每个pod相当于一台精简的cvm,并且pod底层用的也不是docker,而是containerd,那是不是就没有办法用docker命令来测试拉取镜像? 其实这里我们可以在集群部署一个deploy,配置2个容器,一个容器作为docker服务端,然后另外一个容器作为docker客户端,这2个容器共享docker.sock文件,然后就可以在客户端容器执行docker命令了。

具体的部署可以参考下面yaml文件

代码语言:javascript复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: docker-in-containerd
    qcloud-app: docker-in-containerd
  name: docker-in-containerd
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: docker-in-containerd
      qcloud-app: docker-in-containerd
  template:
    metadata:
      annotations:
        eks.tke.cloud.tencent.com/root-cbs-size: "20"
      labels:
        k8s-app: docker-in-containerd
        qcloud-app: docker-in-containerd
    spec:
      affinity: {}
      containers:
      - command:
        - dockerd
        - --host=unix:///var/run/docker.sock
        - --host=tcp://0.0.0.0:8000
        image: docker:stable-dind
        imagePullPolicy: IfNotPresent
        name: docker-ci
        resources:
          limits:
            cpu: 500m
            memory: 1Gi
          requests:
            cpu: 250m
            memory: 256Mi
        securityContext:
          privileged: true
        volumeMounts:
        - mountPath: /var/run
          name: host
      - command:
        - sleep
        - 70d
        image: docker:stable
        imagePullPolicy: IfNotPresent
        name: client
        resources:
          limits:
            cpu: 500m
            memory: 1Gi
          requests:
            cpu: 250m
            memory: 256Mi
        securityContext:
          privileged: true
        volumeMounts:
        - mountPath: /var/run
          name: host
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: qcloudregistrykey
      restartPolicy: Always
      schedulerName: default-scheduler
      volumes:
      - emptyDir: {}
        name: host

yaml说明:

  • docker-ci容器作为docker服务端
  • client作为容器客户端
  • 通过emptyDir,2个容器共享/var/run/docker.sock文件
  • 2个容器都需要开启特权模式,不然docker服务端起不来

pod启动正常后,登陆client容器就可以执行docker命令了,下面我们测试下,用sh的方式登陆client容器

0 人点赞