问题标签 [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.
kubernetes - Metacontroller:如何停止调用同步钩子和资源生成
我正在使用Metacontroller来实现 Kubernetes 运算符。
我的问题如下:
- Metacontroller 永远不会停止为我的控制器调用我的同步钩子(在这种情况下是复合控制器),并且
- 父资源
status.observedGeneration
字段不断更新(据我了解,这意味着资源已重新创建)。
复合控制器文档(特别是响应文档)建议,如果返回的父状态或子集合没有变化,元控制器应该停止调用同步钩子。
我还从复合控制器清单中删除了spec.resyncPeriodSeconds
和spec.parentResource.revisionHistory
(由于计时器事件或对父status
字段的更改,不会触发对同步挂钩的任何调用)。
可悲的是,这些都不起作用。如何告诉 Metacontroller 停止调用同步挂钩并停止创建资源?
kubernetes - 强制 Kubernetes 自定义资源规范字段的不变性
我正在使用 Kubernetes golang 运算符 sdk 来实现一个管理 RabbitMQ 队列的运算符。我想知道 k8s 是否有办法在我的自定义资源上强制执行特定规范字段的不变性。我有以下 golang 结构,它代表一个 rabbitMQ 队列和一些参数来让它绑定到 rabbitMQ 交换:
我想要不变性的原因,特别是对于该VHost
字段,是因为它是一个用于在 rabbitMQ 中命名队列的参数。如果对现有的已部署队列进行了更改,则 k8s 协调器将无法查询 rabbitMQ 的预期队列,因为它将使用不同的 vhost(实际上是不同的命名空间)进行查询,这可能会导致创建新队列或更新的错误队列。
我正在考虑一些替代方案,例如使用所需的 ObjectMeta.Name 字段来包含串联的 vhost 和队列名称,以确保它们对于已部署的队列是不可变的。或者以某种方式在操作员中缓存较旧的规范(还没有弄清楚如何做到这一点)并在协调器中比较旧规范和当前规范,如果VHost
发生更改则返回错误。然而,这些方法似乎都不理想。理想情况下,如果操作员框架可以在字段上强制执行不变性VHost
,那将是一种处理此问题的简单方法。
kubernetes - Kubernetes 管理员隔离
大多数 Kubernetes 操作员都需要能够创建集群角色、集群角色绑定和 crd。
我想要一个适当的 rbac 隔离,并且我想避免将部署服务帐户直接作为管理员。
但是如果我只给它集群角色编辑权限,似乎它允许它把自己放在最后。
处理这个问题的正确方法是什么?(如果有的话)。
kubernetes - 没有 CRD 的 Kubernetes 操作员
我正在寻找创建一个自定义 Kubernetes 控制器;在这种情况下,我的意思是控制器,因为我不想创建 CRD,因此,不是操作员。基本上,它类似于外部 DNS项目,因为它监视注释,并根据该注释的存在/不存在采取行动。
有这样的简单例子吗?我找到的大部分资源都是用于操作员和创建 CRD,但我的用例只涉及查看注释。
go - 如何在 Kubernetes Go Operator 中读取 YAML 以创建对象,而不是硬编码?
我正在使用 Golang 开发一个自定义 Kubernetes Operator,作为对基于现有 Helm Charts 生成的 Operator 的一种转变。据我了解,创建 Pod(或我将分享的示例中的 Job)的方式是这样的:
然后在 Reconcile 调用的其他地方,作业实际上是在 Kubernetes 上创建的:
这……很明显不是最优的。我看不到填充诸如“图像”之类的内容或允许覆盖“资源”等内容的好方法,而这仅次于它是一个巨大的硬编码 blob(我删除了识别信息和大约 120 行)上面的规范,诸如附加卷和其他容器之类的东西)。
我希望能够从清单中的现有 YAML 文件中提取(以前与 Helm 图表和 Helm 操作符一起使用的文件),并从诸如此类的方法以 Go 需要的格式返回该文件。
我一直在互联网上搜索类似的东西,但是那里还没有很多 Go 或 k8s Operators 资源,所以我想我会在这里问。
你们有什么想法或解决方案吗?
kubernetes - 如何使用 Horizontal Pod Autoscaler 根据子部署的资源利用率来扩展自定义资源 (CR)?
我有一个管理部署的自定义资源。我希望我的 HPA 能够根据部署 CPU 利用率来扩展 CR 副本计数,而不是直接扩展部署。如果它直接扩展部署,那么当触发协调器循环时,它会立即看到部署副本计数与 CR 中所述的所需副本计数之间的差异,并相应地更新部署。
我很接近。我的 CR 的规模端点正常运行,我的 HPA 甚至可以达到端点。它只是无法读取孩子的资源使用情况。
如果我让它直接扩展部署,我也让它工作,但正如我上面所说,它不是一个可行的解决方案。更多只是证明我的指标服务器运行正常并且可以获得资源利用率。
HPA YAML:
并证明 HPA 至少能够达到 CR 的规模端点:
可以看出,在检索资源利用率方面没有骰子......
go - 使用 go 代码从 Kubernetes 连接到外部 Kubernetes 集群
我正在构建的操作员需要与其他 Kubernetes 集群通信,是否有任何最佳实践可以从在 Kubernetes 上运行的操作员中做到这一点?
使用k8s.io/client-go/tools/clientcmd
包我可以调用BuildConfigFromFlags
方法传递masterURL
和 kubeconfig 位置。这在 Kubernetes 外部运行良好,但在 Kubernetes 内部,可以对 kubeconfig 位置做出任何假设吗?还是应该使用其他 API?
附带说明:我正在使用controller-runtime
的Client
API 与 Kubernetes 对话。
openshift - operator-sdk 不接受集群范围的关键字
我正在使用 operator-sdk 版本 v0.11.0。但是,当我尝试使用 --cluster-scope 选项创建新项目时,它无法识别该选项并以 unknown option 失败cluster-scope
。我是运营商的新手。知道我错过了什么。
postgresql - Zalando postgres 操作员配置问题
Zalando Postgres 操作员遇到以下问题。默认清单应用于 Kubernetes 集群(托管在本地),如下所示: https ://github.com/zalando/postgres-operator/tree/4a099d698d641b80c5aeee5bee925921b7283489/manifests
验证操作员名称或配置映射或服务帐户定义中是否存在任何问题,但无法弄清楚。
这里有什么帮助吗?
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 吗?