如何在GKE群集上启用DefaultStorageClass准入控制器?

时间:2020-08-19 08:50:26

标签: kubernetes google-kubernetes-engine

有一些很棒的admission controllers,例如DefaultStorageClass,StorageObjectInUseProtection,PersistentVolumeClaimResize,它们可以为您提供一些k8最佳实践 集群。

要启用准入控制器,您必须具有对k8s api服务器的管理员访问权限,但在GKE上则没有。

那么我们如何在GKE中启用这些准入控制器?

注意:过去我很少提出相关问题,但没有像question3question4这样的答案。

1 个答案:

答案 0 :(得分:1)

无法修改启用的准入控制器,因为这将需要修改--enable-admission-plugins API服务器配置选项,而这在GKE上是不可能的,目前也没有任何其他方法来设置此选项。

现在,查看提到的每个单独的控制器:

  • DefaultStorageClass -在GKE中启用了此准入控制器。您可以检查标准的预先创建的存储类是否具有storageclass.kubernetes.io/is-default-class: "true"批注。为了默认使用其他SC,请将此注释从标准存储类中删除,然后将其添加到您选择的SC中。

  • StorageObjectInUseProtection -在GKE中启用了此准入控制器,您可以观察到kubernetes.io/pv-protectionkubernetes.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列出了一些示例。