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

时间:2018-01-08 15:56:05

标签: kubernetes google-cloud-platform google-kubernetes-engine

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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中所述。

答案 2 :(得分: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提供的“本地SSD选项”。提供添加SSD的选项没有为我减少的原因是,我的节点需要一个4TB的SSD,据我所知,本地ssd是固定大小。