【问题标题】:How to enable DefaultStorageClass admission controllers on a GKE cluster?如何在 GKE 集群上启用 DefaultStorageClass 准入控制器?
【发布时间】:2020-08-19 08:50:26
【问题描述】:
【问题讨论】:
标签:
kubernetes
google-kubernetes-engine
【解决方案1】:
无法修改已启用的准入控制器,因为这需要修改 --enable-admission-plugins API 服务器配置选项,而这在 GKE 上是不可能的,目前也没有其他方法可以设置此选项。
现在,看看提到的每个单独的控制器:
-
DefaultStorageClass - 此准入控制器已在 GKE 中启用。您可以检查标准预先创建的存储类是否具有storageclass.kubernetes.io/is-default-class: "true" 注释。为了默认使用不同的 SC,请从标准存储类中删除此注释,并将其添加到您选择的 SC。
-
StorageObjectInUseProtection - 此准入控制器在 GKE 中启用,您可以观察到 kubernetes.io/pv-protection 和 kubernetes.io/pvc-protectionfinalizers 分别添加到 PV 中。 PVC 正在使用中,防止它们被删除。
-
PersistentVolumeClaimResize - 此准入控制器也在 GKE 中启用。您可以通过使用allowVolumeExpansion: false 注释1 创建一个存储类来验证这一点(注意标准SC 确实允许扩展),创建一个PVC 并尝试增加它的大小。您将收到如下错误:
error: persistentvolumeclaims "my-pvc" could not be patched: persistentvolumeclaims "my-pvc" is forbidden: only dynamically provisioned pvc can be resized and the storageclass that provisions the pvc must support resize
最后,如果您想要启用 GKE 上实际上未启用的控制器,您需要重新实现并将其作为独立服务部署到您的集群中,并使用 K8s 的 ValidatingWebhookConfiguration 或MutatingWebhookConfiguration 通过 webhook 2 连接 K8s API 你的服务。除了从头开始实施之外,还有许多项目可以提供帮助,OPA Gatekeeper 3 和 Metacontroller 4 列出了一些示例。