0

我正在尝试创建一个新的 Kubernetes 部署,它允许我在重新启动或关闭 pod 时保持其状态。仅就某些背景而言,Kubernetes 实例是一个托管的 Amazon EKS 集群,我正在尝试合并一个安装到 pod 的由 Amazon EFS 支持的持久卷。

不幸的是,正如我现在所拥有的那样,PV 可以/etc/根据需要安装,但内容几乎是空的,除了一些在引导期间修改的文件。

部署 yaml 如下所示:

kind: Deployment
apiVersion: apps/v1

spec:
  replicas: 1
  selector:
    matchLabels:
      app: testpod
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: testpod
    spec:
      volumes:
        - name: efs
          persistentVolumeClaim:
            claimName: efs
      containers:
        - name: testpod
          image: 'xxxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/testpod:latest'
          args:
            - /bin/init
          ports:
            - containerPort: 443
              protocol: TCP
          resources: {}
          volumeMounts:
            - name: efs
              mountPath: /etc
              subPath: etc
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
          securityContext:
            capabilities:
              add:
                - ALL
      restartPolicy: Always
      terminationGracePeriodSeconds: 60
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler

有什么想法可能会出错吗?我希望 /etc/ 填充图像的内容。

编辑:

通过使用相同的图像,这似乎在 Docker 中运行良好,创建一个卷,docker volume create <name>然后将其挂载为-v <name>:/etc.

4

3 回答 3

3

Kubernetes 没有基于映像内容填充卷的 Docker 功能。如果您创建一个新卷(无论是emptyDir卷还是基于 AWS EBS 或 EFS 等云存储的东西),它将一开始是空的,并隐藏容器中的任何内容。

因此,您不能在容器的大部分区域上安装卷;将卷安装在应用程序的源代码树上或/etc如您显示的那样上是行不通的。特别是对于文件/etc,更好的方法是使用 Kubernetes ConfigMap来保存要添加到该目录的特定文件。(将您的配置文件存储在源代码管理中,并将它们作为部署序列的一部分添加;不要尝试将未跟踪的修改保留到已部署的文件中。)

于 2020-02-25T21:57:43.940 回答
1

我的猜测是容器中的挂载与操作系统中的挂载完全一样/etc。空文件夹

我尝试了您在 docker 中尝试的方法,并且(令我惊讶)它按照您描述的方式工作。这可能是因为 docker 卷在技术上只是 kubernetes 卷声明(特别是由 EFS 支持)之外的东西,这解释了它:Docker mount to folder overriding内容 tldr:如果 docker 卷为空文件将被镜像

我个人认为使用 k8s 和 EFS 无法实现您想要的目标

于 2020-02-25T21:14:03.980 回答
0

我认为您可能对“nsfdsuds”感兴趣:它为 Kubernetes 容器建立了一个覆盖文件,其中覆盖文件的可写顶层可以位于您选择的 PersistentVolume 上。

https://github.com/Sha0/nsfdsuds

于 2021-03-21T04:33:06.943 回答