在 kubernetes 节点之间共享文件夹

Share Folder Between kubernetes Nodes

我有3个Kubernetes节点,其中一个是Master,其他是worker。我将 Laravel 应用程序部署到主节点并创建了指向该文件夹的卷和存储 class。 这些是我用于创建卷和持久卷声明的 YAML 文件

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: qsinav-pv-www-claim
spec:
    storageClassName: manual
    accessModes:
        - ReadWriteOnce
    resources:
        requests:
            storage: 5Gi

存储class

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: manual
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd

apiVersion: v1
kind: PersistentVolume
metadata:
  name: qsinav-pv-www
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    namespace: default
    name: qsinav-pv-www-claim
  hostPath:
    path: "/var/www/html/Test/qSinav-starter"

问题是每个节点中的 pods 尝试将文件夹装载到其父节点中。 因此,由于我是 运行 一个 Web 应用程序并且我在这些节点之间进行了负载平衡,如果我登录节点 1 并且下一个请求转到节点 2,它会将我重定向到登录页面,因为我没有会话那里。 所以我需要与所有工作节点共享一个主节点的 1 个文件夹。 我不知道我应该怎么做才能实现我的目标,所以请帮助我解决它 提前致谢

是的,在 hostPath 卷的文档中明确提及。

Pods with identical configuration (such as created from a PodTemplate) may behave differently on different nodes due to different files on the nodes

您需要使用类似 nfs 的东西,它可以在节点之间共享。您的 PV 定义最终看起来像这样(根据您的设置更改 IP 和路径):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: qsinav-pv-www
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    namespace: default
    name: qsinav-pv-www-claim
  nfs: 
    path: /tmp 
    server: 172.17.0.2

不要使用 hostPath 类型,因为这种类型的卷仅用于单节点集群, 它仅适用于单节点环境,因为如果将 pod 分配给另一个节点,则该 pod 无法获取所需的数据。

所以使用类型Local

它会记住哪个节点用于配置卷,从而确保重新启动的 POD 始终会找到重新启动前的数据存储。

Ps 1:一旦一个节点死亡,该节点的主机路径和本地持久卷的数据都会丢失。

ps 2:local 和 hostPath 类型不适用于动态配置

apiVersion: v1
kind: PersistentVolume
metadata:
  name: qsinav-pv-www
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    namespace: default
    name: qsinav-pv-www-claim
  local:
    path: "/var/www/html/Test/qSinav-starter"