Kubernetes - 将持久卷挂载为根目录

Chr*_*ard 4 docker kubernetes persistent-volumes persistent-volume-claims amazon-eks

我正在尝试创建一个新的 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
Run Code Online (Sandbox Code Playgroud)

关于可能出什么问题的任何想法吗?我希望 /etc/ 中填充图像的内容。

编辑:

通过使用相同的映像,创建一个卷,docker volume create <name>然后将其安装为-v <name>:/etc.

Dav*_*aze 5

Kubernetes 不具备根据镜像内容填充卷的 Docker 功能。如果您创建一个新卷(无论是emptyDir卷还是基于 AWS EBS 或 EFS 等云存储的内容),它将开始为空,并隐藏容器中的所有内容。

\n\n

因此,您可以\xe2\x80\x99t 在容器的大部分区域挂载卷;它不会\xe2\x80\x99无法在应用程序\xe2\x80\x99s源树上安装卷,或者/etc如您所示。特别是对于文件/etc,更好的方法是使用 Kubernetes ConfigMap来保存要添加到该目录的特定文件。(将配置文件存储在源代码管理中,并将它们添加为部署序列的一部分;don\xe2\x80\x99t 尝试保留对已部署文件的未跟踪修改。)

\n