将持久卷声明添加到Container中的现有文件

问题描述 投票:1回答:2

在我的docker镜像中,我有一个目录/opt/myapp/etc,它有一些文件和目录。我想为我的应用创建statefulset。在那个有状态的情况下,我正在创建持续的音量声明并附加到/opt/myapp/etc。有状态的yaml附在下面。在这种情况下,有谁能告诉我如何将容量连接到容器?

apiVersion: apps/v1
kind: StatefulSet
metadata:
 name: statefulset
labels:
 app: myapp
spec:
  serviceName: myapp
 replicas: 1
selector:
matchLabels:
  app: myapp
template:
metadata:
  labels:
    app: myapp
spec:
  containers:
  - image: 10.1.23.5:5000/redis
    name: redis
    ports:
    - containerPort: 6379
      name: redis-port
  - image: 10.1.23.5:5000/myapp:18.1
    name: myapp
    ports:
    - containerPort: 8181
      name: port
    volumeMounts:
    - name: data
      mountPath: /opt/myapp/etc
volumeClaimTemplates:
- metadata:
  name: data
  spec:
   accessModes: [ "ReadWriteOnce" ]
  storageClassName: standard
  resources:
    requests:
        storage: 5Gi

这是describe pod的输出

   Events:
  Type     Reason                  Age              From                     Message
  ----     ------                  ----             ----                     -------
  Warning  FailedScheduling        3m (x4 over 3m)  default-scheduler        pod has unbound PersistentVolumeClaims
  Normal   Scheduled               3m               default-scheduler        Successfully assigned controller-statefulset-0 to dev-k8s-2
  Normal   SuccessfulMountVolume   3m               kubelet, dev-k8s-2       MountVolume.SetUp succeeded for volume "default-token-xpskd"
  Normal   SuccessfulAttachVolume  3m               attachdetach-controller  AttachVolume.Attach succeeded for volume "pvc-77d2cef8-a674-11e8-9358-fa163e3294c1"
  Normal   SuccessfulMountVolume   3m               kubelet, dev-k8s-2       MountVolume.SetUp succeeded for volume "pvc-77d2cef8-a674-11e8-9358-fa163e3294c1"
  Normal   Pulling                 2m               kubelet, dev-k8s-2       pulling image "10.1.23.5:5000/redis"
  Normal   Pulled                  2m               kubelet, dev-k8s-2       Successfully pulled image "10.1.23.5:5000/redis"
  Normal   Created                 2m               kubelet, dev-k8s-2       Created container
  Normal   Started                 2m               kubelet, dev-k8s-2       Started container
  Normal   Pulled                  1m (x4 over 2m)  kubelet, dev-k8s-2       Container image "10.1.23.5:5000/myapp:18.1" already present on machine
  Normal   Created                 1m (x4 over 2m)  kubelet, dev-k8s-2       Created container
  Normal   Started                 1m (x4 over 2m)  kubelet, dev-k8s-2       Started container
  Warning  BackOff                 1m (x7 over 2m)  kubelet, dev-k8s-2       Back-off restarting failed container

存储类定义

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
 name: standard
 namespace: controller
provisioner: kubernetes.io/cinder
reclaimPolicy: Retain
parameters:
 availability: nova
docker kubernetes docker-volume kubernetes-pvc kubernetes-statefulset
2个回答
2
投票

检查您的群集中是否定义了存储类。 kubectl get storageclass 如果您使用默认存储类作为主机路径(如果是minikube),那么您不需要在模板中包含存储类。

volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 5Gi 通过指定没有存储类k8s将继续并安排具有默认存储类的持久卷,如果是minikube,则为host-path,同时确保在将要调度pod的节点上存在/opt/myapp/etc


0
投票

Kubernetes不允许将2个卷安装到同一目录。第二个mount将覆盖第一个创建的文件。在我的情况下,docker镜像在etc目录中有一些文件,这些文件在安装卷后被删除。使用子路径解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.