【发布时间】:2018-01-08 15:56:05
【问题描述】:
我想让 Kubernetes 在我的 Google Kubernetes 引擎集群中使用本地 SSD,而不使用 alpha 功能。有没有办法做到这一点?
提前感谢您的任何建议或帮助。
【问题讨论】:
标签: kubernetes google-cloud-platform google-kubernetes-engine
我想让 Kubernetes 在我的 Google Kubernetes 引擎集群中使用本地 SSD,而不使用 alpha 功能。有没有办法做到这一点?
提前感谢您的任何建议或帮助。
【问题讨论】:
标签: kubernetes google-cloud-platform google-kubernetes-engine
https://cloud.google.com/kubernetes-engine/docs/concepts/local-ssd 解释了如何在 Google Kubernetes Engine 的节点上使用本地 SSD。根据 gcloud 命令,该功能似乎是 beta(不是 alpha),所以我认为您不需要依赖任何 alpha 功能来利用它。
【讨论】:
您可以将本地 SSD 与您的 Kubernetes 节点一起使用,如下文documentation 所述:
在 GCP Console 中访问 Kubernetes Engine 菜单。
点击创建集群。
根据需要配置您的集群。然后,从本地 SSD 磁盘(每个节点)字段中,输入所需的 SSD 数量作为绝对数。
点击创建。
在现有集群中使用本地 SSD 磁盘创建节点池:
访问 GCP Console 中的 Kubernetes Engine 菜单。
选择所需的集群。
点击编辑。
从节点池菜单中,单击添加节点池。 根据需要配置节点池。然后,从本地 SSD 磁盘(每个节点)字段中,输入所需的 SSD 数量作为绝对数。 点击保存。
如documentation 链接中所述,请注意 Kubernetes 中本地 SSD 存储的缺点/限制:
由于本地 SSD 物理连接到节点的主机虚拟机实例,因此存储在其中的任何数据仅存在于该节点上。由于存储在磁盘上的数据是本地的,因此您应该确保您的应用程序能够灵活应对这些数据不可用的情况。
如果将 Pod 重新安排离开该节点,写入本地 SSD 的 Pod 可能无法访问存储在磁盘上的数据。此外,升级节点会导致数据被擦除。
您无法将本地 SSD 添加到现有节点池。
如果您想在 Kubernetes 部署中实现高可用性,以上几点非常重要。
Kubernetes 本地 SSD 存储是短暂的,在容器中运行时会给非平凡的应用程序带来一些问题。 在 Kubernetes 中,当容器崩溃时,kubelet 会重新启动它,但其中的文件会丢失,因为容器以干净的状态启动。 此外,当在 Pod 中一起运行容器时,这些容器通常需要共享文件。
您可以使用 Kubernetes 卷抽象来解决上述问题,如下面的documentation 所述。
【讨论】:
如果您希望在 Kubernetes 集群中的 SSD 上运行整个 Docker,这就是我在节点池(ubuntu 节点)上的做法:
在您的服务器上:
# stop docker
sudo service docker stop
# format and mount disk
sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
rm -fr /var/lib/docker
sudo mkdir -p /var/lib/docker
sudo mount -o discard,defaults /dev/sdb /var/lib/docker
sudo chmod 711 /var/lib/docker
# backup and edit fstab
sudo cp /etc/fstab /etc/fstab.backup
echo UUID=`sudo blkid -s UUID -o value /dev/sdb` /var/lib/docker ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab
# start docker
sudo service docker start
正如其他人所提到的,您可能需要先查看 GKE 提供的“本地 SSD 选项”。提供的添加 SSD 的选项对我来说没有用的原因是,我的节点需要一个 4TB 的 SSD,而且据我所知,本地 ssd 的大小是固定的。
【讨论】: