始终运行一个 Kubernetes pod 实例

Posted

技术标签:

【中文标题】始终运行一个 Kubernetes pod 实例【英文标题】:Always run one instance of Kubernetes pod 【发布时间】:2020-01-25 00:13:49 【问题描述】:

如何将 Kubernetes 部署配置为始终只运行一个 pod 副本?我们可以在部署文件中将副本配置为 1,但这不会阻止有人使用 kubectl 扩展 pod。

【问题讨论】:

实现这个有什么运气吗?我们在托管集群上,无法创建变异 webhook 【参考方案1】:

您不能直接限制部署资源不允许多个副本。

但您可以创建一个自定义的ValidatingAdmissionWebhook 准入控制器,拒绝尝试修改此部署的replicas 字段的请求。

或者您可以创建一个自定义资源定义 (CRD),其行为与部署类似,但副本数固定为 1。

一般来说,如果您只想阻止某些用户扩展副本,您可以限制这些用户的 RBAC 权限以阻止他们更新部署对象。

【讨论】:

【参考方案2】:

您可以使用mutating webhook controller。

任何 pod 都可以通过这种方式限制为特定数量的副本。

对于你想要达到的目标来说可能有点矫枉过正,但它会奏效。

【讨论】:

使用验证钩子并拒绝不匹配的更改可能更好,Open Policy Agent 是一种简单的方法。嗯,很简单。

以上是关于始终运行一个 Kubernetes pod 实例的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes的几个概念

基于Kubernetes的hpa实现pod实例数量的自动伸缩

pod详解

Kubernetes之DaemonSet

基于Kubernetes的hpa实现pod实例数量的自动伸缩

Kubernetes 自定义部署