本页面介绍如何在 Google Kubernetes Engine (GKE) 集群和节点池中自定义节点启动磁盘。
概览
创建 GKE 集群或节点池时,可以为每个节点选择永久性磁盘类型来安装 Kubernetes 节点文件系统。默认情况下,GKE 使用 1.24 版或更高版本中的平衡永久性磁盘。您还可以指定其他永久性磁盘类型,例如标准磁盘或固态硬盘。如需了解详情,请参阅存储选项。
平衡永久性磁盘和 SSD 永久性磁盘的磁盘配额与标准永久性磁盘配额不同。如果您要从标准永久性磁盘切换到平衡永久性磁盘,则可能需要申请增加配额。如需了解详情,请参阅资源配额。
使用 SSD 启动磁盘的优势
使用 SSD 永久性磁盘作为节点的启动磁盘可提供以下性能优势:
- 节点的启动时间更短。
- 通过容器将二进制文件和其他文件更快地提供给节点。 这可以提高 I/O 密集型工作负载的性能,例如托管静态文件的网络服务应用或短期运行的 I/O 密集型批处理作业。
- 将文件存储在节点的本地介质上(通过
hostPath
或emptyDir
卷公开),可以提升 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 控制台创建集群时选择启动磁盘,请执行以下步骤:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
根据需要配置集群。
在导航菜单中,展开 default-pool,然后点击节点。
在启动磁盘类型下拉列表中,选择永久性磁盘类型。
点击创建。
如需为现有集群创建具有自定义启动磁盘的节点池,请执行以下操作:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要修改的集群的名称。
点击 add_box 添加节点池。
根据需要配置节点池。
在导航菜单中,点击节点。
在启动磁盘类型下拉列表中,选择永久性磁盘类型。
点击创建。
保护节点启动磁盘
默认情况下,节点启动磁盘存储您的容器映像、某些系统进程日志、Pod 日志和可写入容器层。
如果您的工作负载使用 configMap
、emptyDir
或 hostPath
卷,您的 Pod 可能会向节点启动磁盘写入额外的数据。您可以将 emptyDir
配置为由 tmpfs 提供支持,以停止此操作。如需了解具体方法,请参阅 Kubernetes 文档。
由于 secret
、downwardAPI
和 projected
卷由 tmpfs 提供支持,使用这些卷的 Pod 不会向节点启动磁盘写入数据。
默认情况下,Google Cloud 会加密静态的客户内容(包括您的节点启动磁盘),GKE 会为您管理此默认加密,您无需进行任何其他操作。
但是,在使用向节点启动磁盘写入数据的卷时,您可能希望更严密地控制在 GKE 中保护您的工作负载数据的方式。您可以阻止 Pod 向节点启动磁盘写入数据,也可以使用客户管理的加密密钥 (CMEK) 创建节点启动磁盘。
阻止 Pod 向启动磁盘写入数据
如需阻止 Pod 将数据直接写入节点启动磁盘,请使用以下方法之一。
Policy Controller
Policy Controller 是 GKE Enterprise 的一项功能,可让您在舰队中的 GKE 集群中大规模声明和强制执行自定义政策。
- 安装 Policy Controller。
- 使用
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 的一个限制是,在创建节点池后无法更改它。也就是说:
- 如果节点池是使用客户管理的加密创建的,则您随后无法在启动磁盘上停用加密。
- 如果节点池是在没有客户管理的加密情况下创建的,则您随后无法在启动磁盘上启用加密。不过,您可以创建启用客户管理的加密的新节点池,并删除之前的节点池。
限制
在配置自定义启动磁盘之前,请考虑以下限制: