首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在GKE上使用本地SSD在pod中进行快速临时存储吗?

问我可以在GKE上使用本地SSD在pod中进行快速临时存储吗?
EN

Stack Overflow用户
提问于 2018-11-30 10:16:13
回答 1查看 866关注 0票数 4

我们在GKE上部署了一个应用程序,该应用程序将受益于磁盘上的快速临时存储。

GKE的local SSD功能几乎是完美的,但是我们有多个pod副本,理想情况下,我们希望在同一节点上支持多个pod。使用hostPath挂载本地固态硬盘会很困难。

This 2016 SO question提到了将emptyDir挂载到本地固态硬盘上的想法,这将是完美的,但我知道这仍然不是一个选择。

有一个2017 mailing list thread也有同样的想法,但答案仍然不是肯定的。

GCP docs for local SSDs最近进行了更新,通过PersistentVolume抽象描述了它们的使用,这听起来很有希望。我能用它来实现我想要的东西吗?

这些示例似乎显示了将完整的本地固态硬盘挂载为PersistentVolume,而我的偏好是为每个pod使用它的一个独立部分。我们也不需要数据是持久化的--一旦pod被删除,我们也会很高兴数据被删除。

EN

回答 1

Stack Overflow用户

发布于 2018-12-07 09:31:31

Kubernetes1.11添加了一个名为Downward API support in volume subPath的alpha特性,它允许使用volumeMount API设置向下的子路径。

我通过创建GKE 1.11 alpha集群对此进行了测试:

代码语言:javascript
复制
gcloud container clusters create jh-test --enable-kubernetes-alpha
  --zone=asia-southeast1-a --cluster-version=1.11.3-gke.18
  --local-ssd-count=1 --machine-type=n1-standard-2 --num-nodes=2
  --image-type=cos --disk-type=pd-ssd --disk-size=20Gi
  --no-enable-basic-auth --no-issue-client-certificate
  --no-enable-autoupgrade --no-enable-autorepair

然后,我使用以下配置创建了一个双副本部署:

代码语言:javascript
复制
      env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
      volumeMounts:
        - name: scratch-space
          mountPath: /tmp/scratch
          subPath: $(POD_NAME)
  volumes:
    - name: scratch-space
      hostPath:
        path: "/mnt/disks/ssd0"

如果我对每个pod执行kubectl exec操作,就会得到一个隔离的、性能非常好的/tmp/scratch目录。

如果我通过SSHd连接到主机,那么我可以看到每个pod的一个目录:

代码语言:javascript
复制
$ ls -l /mnt/disks/ssd0/
drwx--x--x 14 root root 4096 Dec  1 01:49 foo-6dc57cb589-nwbjw
drwx--x--x 14 root root 4096 Dec  1 01:50 foo-857656f4-dzzzl

我还尝试将部署应用到非alpha GKE 1.11集群,但SSD内容最终如下所示:

代码语言:javascript
复制
$ ls -l /mnt/disks/ssd0/
drwxr-xr-x 2 root root 4096 Dec  1 04:51 '$(POD_NAME)'

不幸的是,在alpha集群上运行我们的工作负载是不现实的,所以这对我们来说还不是一个实用的解决方案。我们将不得不等待该功能达到测试版,并在标准GKE集群上可用。虽然will probably change slightly接口看起来像是slowly progressing。

对于Kubernetes1.14,volumeMounts的语法已更改为使用新的subPathExpr字段。该功能仍为alpha-only:

代码语言:javascript
复制
      env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
      volumeMounts:
        - name: scratch-space
          mountPath: /tmp/scratch
          subPathExpr: $(POD_NAME)
  volumes:
    - name: scratch-space
      hostPath:
        path: "/mnt/disks/ssd0"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53550287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档