问题标签 [kubebuilder]
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 - Golang dep 无法解决依赖关系
我正在使用kubebuilder创建 kubernetes operator 项目。运行快速入门指南中描述的项目 init 命令后
dep ensure
返回下面给出的错误日志。
kubernetes - kubebuilder/controller-runtime 是否仍在维护
我曾经使用 apiserver-builder 定义我的自定义资源,目前已弃用,建议改用 kubebuilder。
我尝试使用 kubebuilder 生成资源,但我发现sigs.k8s.io/controller-runtime
Gopkg.toml 中的版本是 v0.1.1,它基于 k8s 1.10.1。
然后我在controller-runtime存储库中搜索,最新版本是v0.1.7,它基于k8s 1.11.2。
我想知道 kubebuilder/controller-runtime 什么时候可以更新到 k8s 1.12.x?或者如果 kubebuilder 仍然维护?
unit-testing - 无法在kubebuilder的client.Client中获取K8S资源进行单元测试
我正在为使用 Kubebuilder 创建的示例 Kubernetes CRD 和控制器编写一些单元测试。控制器中的主要代码创建 Kubernetes 资源(命名空间和其中的 ResourceQuota)。在我的单元测试中,我想验证控制器是否实际创建了这些。我使用client.Client
使用默认对象创建的sigs.k8s.io/controller-runtime/pkg/manager
对象。
我知道主代码运行良好,因为我在真实的实时环境中对其进行了测试。我看到主要代码是从单元测试中调用的。但是,单元测试中的上述代码不起作用;即对 Get() 的调用会返回我期望的 ResourceQuota。我也尝试过 List() api,但这也没有返回任何东西。也没有错误。只是一个空洞的回应。
为了让 Kubebuilder 中的 K8S 控制平面运行单元测试,我是否必须做一些特殊/不同的事情?
go - 如何使用 kubebuilder 的 client.List 方法?
我正在使用 kubebuilder(版本 1.0.8)为自定义资源开发自定义控制器。我有一个场景,我需要获取自定义资源的所有实例的列表,以便与外部数据库同步。
我见过的所有关于 kubernetes 控制器的示例都使用 client-go 或直接通过 http 调用 api 服务器。但是,kubebuilder 也给了我这个 client.Client 对象来获取和列出资源。所以我正在尝试使用它。
在使用传入的 Manager 实例(即 do mgr.GetClient()
)创建客户端实例后,我尝试编写一些代码来获取我创建的所有 Environment 资源的列表。
List 方法的文档中的示例显示:
这甚至不编译。
我在客户端包中看到了一些方法来限制对特定标签的搜索,或者针对具有特定值的特定字段,但没有将结果限制为特定资源类型。
有没有办法通过Client
对象做到这一点?我应该完全做其他事情吗?
kubernetes - Kubernetes 自定义控制器 pod OOMKilled 观看 configmaps
我正在创建一个 k8s 自定义控制器。基本上,当创建自定义资源时,会创建一些额外的资源。其中包括配置映射、部署和服务。该项目是使用 kubebuilder 创建的。如果 controller.go 包含监视 configmap 的逻辑,则 Pod 将被终止为 OOMKilled,错误代码 137。监视其他类型的对象,例如部署、服务和 statefulset 工作正常。代码部分是
ltmv1beta1 是 CR。这与 kubebuilder 创建的示例代码几乎相同。还具有为角色授予的正确访问权限
无法弄清楚为什么这只发生在 configmap 上。谢谢。
kubernetes - Controller-runtime 客户端如何让 RESTClient 运行命令
我们已经通过 kubebuilder 2.0 成功构建了一个 operator。在这个操作符中,我们需要在使用 k8s.io/client-go/kubernetes.Clientset 之前在 pod 中运行一个 cmd,它会抓取 restconfig 并像这样运行
在控制器运行时世界中,我无法从控制器运行时的客户端找到任何 RESTClient 。
我想知道我们如何在操作员的 pod 中执行 cmd?
谢谢(编辑)
go - Kubebuilder 的 Rbac 规则
我的问题是我正在尝试使用该unstructured.Unstructured
类型来创建这样的部署:
我的理解是我已经指定了 rbac 规则,我的操作员应该能够创建所述部署,但我仍然收到错误:
我看到的所有示例都是基于使用实际部署类型的,我找不到任何地方有使用非结构化类型执行此操作的示例,我是否遗漏了什么?为了节省时间,我尝试过:
- 手动应用集群角色
- 给定操作员 cluster-admin
- 使用了 make run 和 make deploy (显然在运行 make manifests 等之后)
- 角色生成器正在工作
- 我已经开始了一个新项目,以确保我玩 env 不是原因
kubernetes - 为什么 client.Update(...) 会忽略非原始值?
我正在尝试将非拥有对象的规范修改为Reconcile
我的自定义资源的一部分,但它似乎忽略了任何不是原语的字段。我正在使用控制器运行时。
我想既然它只适用于原语,也许这是与 DeepCopy 相关的问题。但是,删除它并没有解决问题,我读到对象上的任何更新都必须在深层副本上,以避免弄乱缓存。
我也尝试了设置client.FieldOwner(...)
,因为它说这是在服务器端完成的更新所必需的。我不确定将它设置为什么,所以我做到了req.NamespacedName.String()
。那也没有用。
这是我的控制器的协调循环:
我的 CRD 的规范如下所示:
我希望当我kubectl apply
对 Port 和 CustomEnv 字段进行更改的新 CR 时,它会修改部署,如Reconcile
. 但是,只有端口被更新,而对容器的更改Env
被忽略。
kubernetes - 更新元数据注释
我正在使用 kubebuilder 创建一个 Kubernetes 运算符。当启动我的对象时,我必须解析规范并根据一些计算更新对象。
据我所知,我可以更新对象、元数据或托管字段的状态(我可能错了?)。看来sigs.k8s.io/controller-runtime/pkg/client
图书馆负责如何更新这些字段(我不完全确定)。我无法理解文档。
我有以下问题:
- 是否有关于在状态、元数据(标签或注释)和托管字段之间存储对象配置的最佳实践指南?
- 如何更新/修补对象的注释,类似于我
r.Status().Update(ctx, &thing);
用来更新状态的方式?
kubernetes - 如何使用 Kubernetes controller-gen 在外部结构中指定可选字段?
我正在实现一个 Kubernetes 控制器,并使用如下结构创建一个 API:
但是,由于Containers
字段 in是必需的,因此在使用controller-genPodSpec
生成相应的 CRD 时,该字段被标记为必需 - 但是我希望它在我的 CRD 中是可选的。containers
有没有办法在不复制整个结构或修补控制器生成的输出的情况下覆盖它?
作为参考,整个项目在这里。