配置自定义启动磁盘


本页面介绍如何在 Google Kubernetes Engine (GKE) 集群节点池中自定义节点启动磁盘。

概览

创建 GKE 集群或节点池时,可以为每个节点选择永久性磁盘类型来安装 Kubernetes 节点文件系统。默认情况下,GKE 使用 1.24 版或更高版本中的平衡永久性磁盘。您还可以指定其他永久性磁盘类型,例如标准磁盘或固态硬盘。如需了解详情,请参阅存储选项

平衡永久性磁盘和 SSD 永久性磁盘的磁盘配额与标准永久性磁盘配额不同。如果您要从标准永久性磁盘切换到平衡永久性磁盘,则可能需要申请增加配额。如需了解详情,请参阅资源配额

使用 SSD 启动磁盘的优势

使用 SSD 永久性磁盘作为节点的启动磁盘可提供以下性能优势:

  • 节点的启动时间更短。
  • 通过容器将二进制文件和其他文件更快地提供给节点。 这可以提高 I/O 密集型工作负载的性能,例如托管静态文件的网络服务应用或短期运行的 I/O 密集型批处理作业
  • 将文件存储在节点的本地介质上(通过 hostPathemptyDir 卷公开),可以提升 I/O 性能。

指定节点启动磁盘类型

您可以在创建集群或节点池时指定启动磁盘类型。

gcloud

要使用自定义启动磁盘创建集群,请运行以下命令。

[DISK-TYPE] 可以是下列值之一:

  • pd-balanced(1.24 版或更高版本中的默认设置)
  • pd-standard(1.23 版或更早版本中的默认设置)
  • pd-ssd
  • hyperdisk-balanced

如需详细了解此选择,请参阅永久性磁盘类型

gcloud container clusters create [CLUSTER_NAME] --disk-type [DISK_TYPE]

如需在现有集群中创建节点池,请运行以下命令:

gcloud container node-pools create [POOL_NAME] --disk-type [DISK_TYPE]

例如,以下命令会创建集群 example-cluster,它使用类型为 pd-ssd 的 SSD 永久性磁盘:

gcloud container clusters create example-cluster --disk-type pd-ssd

控制台

如需在使用 Google Cloud 控制台创建集群时选择启动磁盘,请执行以下步骤:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 根据需要配置集群。

  4. 在导航菜单中,展开 default-pool,然后点击节点

  5. 启动磁盘类型下拉列表中,选择永久性磁盘类型。

  6. 点击创建

如需为现有集群创建具有自定义启动磁盘的节点池,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 点击 添加节点池

  4. 根据需要配置节点池。

  5. 在导航菜单中,点击节点

  6. 启动磁盘类型下拉列表中,选择永久性磁盘类型。

  7. 点击创建

保护节点启动磁盘

默认情况下,节点启动磁盘存储您的容器映像、某些系统进程日志、Pod 日志和可写入容器层。

如果您的工作负载使用 configMapemptyDirhostPath 卷,您的 Pod 可能会向节点启动磁盘写入额外的数据。您可以将 emptyDir 配置为由 tmpfs 提供支持,以停止此操作。如需了解具体方法,请参阅 Kubernetes 文档。 由于 secretdownwardAPIprojected 卷由 tmpfs 提供支持,使用这些卷的 Pod 不会向节点启动磁盘写入数据。

默认情况下,Google Cloud 会加密静态的客户内容(包括您的节点启动磁盘),GKE 会为您管理此默认加密,您无需进行任何其他操作。

但是,在使用向节点启动磁盘写入数据的卷时,您可能希望更严密地控制在 GKE 中保护您的工作负载数据的方式。您可以阻止 Pod 向节点启动磁盘写入数据,也可以使用客户管理的加密密钥 (CMEK) 创建节点启动磁盘

阻止 Pod 向启动磁盘写入数据

如需阻止 Pod 将数据直接写入节点启动磁盘,请使用以下方法之一。

Policy Controller

Policy Controller 是 GKE Enterprise 的一项功能,可让您在舰队中的 GKE 集群中大规模声明和强制执行自定义政策。

  1. 安装 Policy Controller
  2. 使用 k8sPspVolumeTypes 限制条件模板定义限制以下卷类型的限制条件:
    • configMap
    • emptyDir(如果并非由 tmpfs 支持)
    • hostPath 请参阅 Policy Controller 文档中的使用限制条件模板库了解相关说明。

以下示例限制条件会在集群内的所有 Pod 中限制这些卷类型:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPVolumeTypes
metadata:
  name: deny-boot-disk-writes
spec:
  match:
    kinds:
    - apiGroups: [""]
      kinds: ["Pod"]
  parameters:
    volumes:
    - configMap
    - emptyDir
    - hostPath

PodSecurity 准入控制器

内置的 Kubernetes PodSecurity 准入控制器可让您在特定命名空间或集群中强制执行不同级别的 Pod 安全标准。受限政策可阻止 Pod 向节点启动磁盘写入数据。

如需使用 PodSecurity 准入控制器,请参阅使用 PodSecurity 应用预定义的 Pod 级层安全政策

客户管理的加密

如果您希望自行控制和管理加密密钥轮替,则可以使用 CMEK。这些密钥用于对加密您的数据的数据加密密钥进行加密。如需了解如何将 CMEK 用于节点启动磁盘,请参阅使用客户管理的加密密钥

节点启动磁盘的 CMEK 的一个限制是,在创建节点池后无法更改它。也就是说:

  • 如果节点池是使用客户管理的加密创建的,则您随后无法在启动磁盘上停用加密。
  • 如果节点池是在没有客户管理的加密情况下创建的,则您随后无法在启动磁盘上启用加密。不过,您可以创建启用客户管理的加密的新节点池,并删除之前的节点池。

限制

在配置自定义启动磁盘之前,请考虑以下限制:

后续步骤