在GKE集群中使用SSD或本地SSD

问题描述 投票:4回答:3

我想让Kubernetes在我的Google Kubernetes引擎集群中使用本地SSD而不使用alpha功能。有没有办法做到这一点?

提前感谢您的任何建议或帮助。

kubernetes google-cloud-platform google-kubernetes-engine
3个回答
0
投票

https://cloud.google.com/kubernetes-engine/docs/concepts/local-ssd解释了如何在Google Kubernetes Engine中的节点上使用本地SSD。基于gcloud命令,该功能似乎是beta(不是alpha),所以我认为你不需要依赖任何alpha功能来利用它。


0
投票

您可以将本地SSD与Kubernetes节点一起使用,如下面的documentation所述:

  • 访问GCP控制台中的Kubernetes Engine菜单。
  • 单击“创建群集”
  • 根据需要配置群集。然后,从Local SSD磁盘(每个节点)字段输入所需数量的SSD作为绝对编号。
  • 单击“创建”

要在现有集群中创建具有本地SSD磁盘的节点池:

访问GCP控制台中的Kubernetes Engine菜单。

  • 选择所需的群集。
  • 单击编辑。
  • 从“节点池”菜单中,单击“添加节点池”。根据需要配置节点池。然后,从Local SSD磁盘(每个节点)字段输入所需数量的SSD作为绝对编号。单击保存。

请注意Kubernetes中本地SSD存储的缺点/限制,如本documentation链接所述:

  • 由于本地SSD物理连接到节点的主机虚拟机实例,因此存储在其中的任何数据仅存在于该节点上。由于存储在磁盘上的数据是本地数据,因此应确保应用程序能够恢复此数据不可用。
  • 如果Pod从该节点重新调度,则写入本地SSD的Pod可能无法访问存储在磁盘上的数据。此外,升级节点会导致数据被删除。
  • 您无法将本地SSD添加到现有节点池。

如果您希望在Kubernetes部署中获得高可用性,则以上几点非常重要。

Kubernetes本地SSD存储是短暂的,并且在容器中运行时会给非平凡的应用程序带来一些问题。在Kubernetes中,当容器崩溃时,kubelet将重新启动它,但其中的文件将丢失,因为容器以干净状态启动。此外,当在Pod中一起运行容器时,通常需要这些容器共享文件。

您可以使用Kubernetes Volume抽象来解决上述问题,如下面的documentation所述。


0
投票

如果您希望在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提供的“Local SSD选项”。添加SSD的提供选项的原因并没有为我减少,是因为我的节点需要4TB的单个SSD,据我所知,本地ssd是固定大小的。

© www.soinside.com 2019 - 2024. All rights reserved.