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

标签 docker kubernetes amazon-eks persistent-volumes persistent-volume-claims

我正在尝试创建一个新的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,似乎可以正常工作。

最佳答案

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

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

关于docker - Kubernetes-将持久卷挂载为根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60402681/

相关文章:

docker - 如何让我的 Docker compose "wait-for-it"脚本调用原始容器 ENTRYPOINT 或 CMD?

kubernetes - 在operator-SDK/client-go中按污点列出无法调度的kubernetes节点

kubernetes - 如何列出集群中的所有命名空间?

ssl - HTTPS 重定向不适用于 nginx-ingress-controller 的默认后端

docker - 如何在 Windows 上忽略 Boot2Docker 中的证书错误

azure - 如何将 `docker login` 发送到 OpenShift Docker 注册表

docker - 为什么在我使用Kubernetes时docker重新下载相同的镜像

kubernetes - 如何更改 GKE 管理的日志记录代理的 Fluentd 配置?

kubernetes - 多个K8S容器通过代理连接到Google Cloud SQL

amazon-web-services - AWS EKS - 集群没有可用于调度 Pod 的节点