Kubernetes中hostPath的缺点

时间:2019-06-21 07:35:41

标签: kubernetes

我从kubespray安装了Kubernetes集群-ansible脚本。 现在,我创建了一个带有卷的部署,该卷将作为spec.template.spec.volumes中的hostPath挂载。我已经通过nfs文件系统在所有节点上安装了该卷。 现在,我在k8s文档中阅读了它的不好做法,但需要了解hostPath的危害。 以下是示例yaml文件。

spec:
  containers:
  - image: test:latest
    imagePullPolicy: Always
    name: test1
    ports:
    - containerPort: 4006
      protocol: TCP
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - name : test-data
      mountPath : /RIC/
    - name : test-config
      mountPath : /xyz/abc.config
      subPath : abc.config
  volumes:
  - name : test-data
    hostPath :
      path : /nfs-mount/RIC/
  - name : test-config
    configMap :
      name : test-config

3 个答案:

答案 0 :(得分:1)

如果pod崩溃了,那么kubernetes会启动新的pod。新的Pod可能会安排在群集中的其他节点上。在这种情况下,数据将丢失。为了解决此问题,您可能必须向特定节点添加标签。并始终将Pod调度到该标签节点,这样就可以将本地主机路径卷安装到Pod。 在最坏的情况下,如果节点崩溃,那么您将丢失数据。

答案 1 :(得分:1)

每次添加新部署时,首先需要添加一个NFS卷并将其安装在每个节点上。

如果您可以将NFS存储系统添加为存储提供程序,那么Kubernetes将接管大部分任务。如果添加KubernetesPersistence卷对象并将该卷安装到计划了Pod的节点上,则Kubernetes会在存储系统中创建一个卷。

答案 2 :(得分:1)

有一些原因:

  1. 从安全的角度来看,在生产集群上允许HostPaths并不是一个好主意,如果您的Pod被黑客入侵,并且某人可以访问您的主机,因为他可以写hostPath,那么整个集群就被黑客入侵了...

  2. 使用hostPaths不是可移植的,如果要部署一些有状态集(例如Elasticsearch或某些数据库等),则可以使用kubernetes本地卷提供程序使用相同的路径。

  3. 使用本地卷提供程序对其他部署没有用,例如,如果某个节点发生故障,则需要将Pod安排在其他本地可用的卷将不可用的节点上。

  4. 因此,直接从kubernetes使用NFS共享,而不是将其用作hosthpath或本地卷。例如:

volumes:
      - name: test-data
        nfs:
          path: /projects/test/dev/data
          server: 192.168.1.11



这样,您不必允许hostPaths,也不必自己管理主机上的nfs挂载,也不必管理本地卷等。