问题标签 [kubernetes-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
496 浏览

kubernetes - Metacontroller:如何停止调用同步钩子和资源生成

我正在使用Metacontroller来实现 Kubernetes 运算符。

我的问题如下:

  1. Metacontroller 永远不会停止为我的控制器调用我的同步钩子(在这种情况下是复合控制器),并且
  2. 父资源status.observedGeneration字段不断更新(据我了解,这意味着资源已重新创建)。

复合控制器文档(特别是响应文档)建议,如果返回的父状态或子集合没有变化,元控制器应该停止调用同步钩子。

我还从复合控制器清单中删除了spec.resyncPeriodSecondsspec.parentResource.revisionHistory(由于计时器事件或对父status字段的更改,不会触发对同步挂钩的任何调用)。

可悲的是,这些都不起作用。如何告诉 Metacontroller 停止调用同步挂钩并停止创建资源?

0 投票
2 回答
1151 浏览

kubernetes - 强制 Kubernetes 自定义资源规范字段的不变性

我正在使用 Kubernetes golang 运算符 sdk 来实现一个管理 RabbitMQ 队列的运算符。我想知道 k8s 是否有办法在我的自定义资源上强制执行特定规范字段的不变性。我有以下 golang 结构,它代表一个 rabbitMQ 队列和一些参数来让它绑定到 rabbitMQ 交换:

我想要不变性的原因,特别是对于该VHost字段,是因为它是一个用于在 rabbitMQ 中命名队列的参数。如果对现有的已部署队列进行了更改,则 k8s 协调器将无法查询 rabbitMQ 的预期队列,因为它将使用不同的 vhost(实际上是不同的命名空间)进行查询,这可能会导致创建新队列或更新的错误队列。

我正在考虑一些替代方案,例如使用所需的 ObjectMeta.Name 字段来包含串联的 vhost 和队列名称,以确保它们对于已部署的队列是不可变的。或者以某种方式在操作员中缓存较旧的规范(还没有弄清楚如何做到这一点)并在协调器中比较旧规范和当前规范,如果VHost发生更改则返回错误。然而,这些方法似乎都不理想。理想情况下,如果操作员框架可以在字段上强制执行不变性VHost,那将是一种处理此问题的简单方法。

0 投票
2 回答
46 浏览

kubernetes - Kubernetes 管理员隔离

大多数 Kubernetes 操作员都需要能够创建集群角色、集群角色绑定和 crd。

我想要一个适当的 rbac 隔离,并且我想避免将部署服务帐户直接作为管理员。

但是如果我只给它集群角色编辑权限,似乎它允许它把自己放在最后。

处理这个问题的正确方法是什么?(如果有的话)。

0 投票
1 回答
405 浏览

kubernetes - 没有 CRD 的 Kubernetes 操作员

我正在寻找创建一个自定义 Kubernetes 控制器;在这种情况下,我的意思是控制器,因为我不想创建 CRD,因此,不是操作员。基本上,它类似于外部 DNS项目,因为它监视注释,并根据该注释的存在/不存在采取行动。

有这样的简单例子吗?我找到的大部分资源都是用于操作员和创建 CRD,但我的用例只涉及查看注释。

0 投票
0 回答
183 浏览

go - 如何在 Kubernetes Go Operator 中读取 YAML 以创建对象,而不是硬编码?

我正在使用 Golang 开发一个自定义 Kubernetes Operator,作为对基于现有 Helm Charts 生成的 Operator 的一种转变。据我了解,创建 Pod(或我将分享的示例中的 Job)的方式是这样的:

然后在 Reconcile 调用的其他地方,作业实际上是在 Kubernetes 上创建的:

这……很明显不是最优的。我看不到填充诸如“图像”之类的内容或允许覆盖“资源”等内容的好方法,而这仅次于它是一个巨大的硬编码 blob(我删除了识别信息和大约 120 行)上面的规范,诸如附加卷和其他容器之类的东西)。

我希望能够从清单中的现有 YAML 文件中提取(以前与 Helm 图表和 Helm 操作符一起使用的文件),并从诸如此类的方法以 Go 需要的格式返回该文件。

我一直在互联网上搜索类似的东西,但是那里还没有很多 Go 或 k8s Operators 资源,所以我想我会在这里问。

你们有什么想法或解决方案吗?

0 投票
1 回答
75 浏览

kubernetes - 如何使用 Horizo​​ntal Pod Autoscaler 根据子部署的资源利用率来扩展自定义资源 (CR)?

我有一个管理部署的自定义资源。我希望我的 HPA 能够根据部署 CPU 利用率来扩展 CR 副本计数,而不是直接扩展部署。如果它直接扩展部署,那么当触发协调器循环时,它会立即看到部署副本计数与 CR 中所述的所需副本计数之间的差异,并相应地更新部署。

我很接近。我的 CR 的规模端点正常运行,我的 HPA 甚至可以达到端点。它只是无法读取孩子的资源使用情况。

如果我让它直接扩展部署,我也让它工作,但正如我上面所说,它不是一个可行的解决方案。更多只是证明我的指标服务器运行正常并且可以获得资源利用率。

HPA YAML:

并证明 HPA 至少能够达到 CR 的规模端点:

可以看出,在检索资源利用率方面没有骰子......

0 投票
4 回答
1606 浏览

go - 使用 go 代码从 Kubernetes 连接到外部 Kubernetes 集群

我正在构建的操作员需要与其他 Kubernetes 集群通信,是否有任何最佳实践可以从在 Kubernetes 上运行的操作员中做到这一点?

使用k8s.io/client-go/tools/clientcmd包我可以调用BuildConfigFromFlags方法传递masterURL和 kubeconfig 位置。这在 Kubernetes 外部运行良好,但在 Kubernetes 内部,可以对 kubeconfig 位置做出任何假设吗?还是应该使用其他 API?

附带说明:我正在使用controller-runtimeClientAPI 与 Kubernetes 对话。

0 投票
1 回答
75 浏览

openshift - operator-sdk 不接受集群范围的关键字

我正在使用 operator-sdk 版本 v0.11.0。但是,当我尝试使用 --cluster-scope 选项创建新项目时,它无法识别该选项并以 unknown option 失败cluster-scope。我是运营商的新手。知道我错过了什么。

0 投票
1 回答
908 浏览

postgresql - Zalando postgres 操作员配置问题

Zalando Postgres 操作员遇到以下问题。默认清单应用于 Kubernetes 集群(托管在本地),如下所示: https ://github.com/zalando/postgres-operator/tree/4a099d698d641b80c5aeee5bee925921b7283489/manifests

验证操作员名称或配置映射或服务帐户定义中是否存在任何问题,但无法弄清楚。

这里有什么帮助吗?

0 投票
1 回答
116 浏览

kubernetes - Openshift 4.2 OLM - 操作员依赖

我有一个关于 openshift 4.2 运算符依赖性的问题。我有 2 个 CRD yaml 文件 - 1 个用于我自己的操作员,另一个用于弹性搜索。当我尝试安装自己的操作符并使用 Elastic search 操作符去除依赖项时(在集群中没有为之前的任何一个创建 CRD),openshift 可以自动解析依赖项并在安装之前先从 yaml 文件安装依赖的 CRD实际操作员?在这种情况下,如果我声明了对 Elasticsearch 的依赖,openshift 是否可以在安装我的算子之前自动安装 Elasticsearch 算子(假设集群中不存在 Elasticsearch CRD 资源)?或者依赖 CRD 是否应该存在于集群中以解决依赖关系?我可以在一个全新的集群上从头开始安装两个 CRD 吗?