通过Helm部署到Kubernetes的本地持久存储

时间:2017-07-08 03:37:07

标签: kubernetes kubernetes-helm

使用Kubernetes 1.7.0,这里的目的是能够部署MySQL / MongoDB / etc,并使用本地磁盘作为存储支持;而Webheads和处理盒可以由Kubernetes自动缩放。为了这些目标,我已经

  • 设置&部署Local Persistent Storage provisioner以自动将本地连接的磁盘设置为pods的Persitent Volume Claims。
  • 手动创建了持久卷声明,该声明成功,并附加了本地卷
  • 尝试通过

    通过helm部署MariaDB
      

    helm install --name mysql --set persistence.storageClass = default stable / mariadb

  • 这似乎成功了;但是通过转到仪表板,我得到了

  

卷“local-pv-8ef6e2af”的存储节点关联性检查失败:NodeSelectorTerm [{Key:kubernetes.io/hostname Operator:In Values:[kubemaster]}]与节点标签不匹配

我怀疑这可能是由于helm的图表不包括nodeaffinity。除了手动更新每个图表之外,有没有办法告诉helm部署到配置器有卷的同一个pod?

1 个答案:

答案 0 :(得分:1)

不幸的是,没有。您需要指定节点关联,以便Pod落在本地存储所在的节点上。请参阅docs on Node Affinity以了解添加到掌舵图表的内容。

我怀疑在你的情况下看起来会像以下那样。

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - kubemaster

顺便说一下,这不仅会在节点级别发生,而且会在AWS和GCP等云环境的区域级别发生。在这些环境中,永久磁盘是分区的,需要您设置NodeAffinity,以便在部署到多区域群集时,Pod与持久磁盘一起落在区域中。

另外,看起来你正在部署到Kubernetes大师?如果是这样,那可能是不可取的,因为MySQL可能会影响主人的操作。