问题标签 [kubernetes-custom-resources]

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 投票
0 回答
16 浏览

apache-spark - Spark Operator:crds 的变化

每当 SparkApplication 的状态发生变化时,我都会尝试添加通知功能。为此,我正在关注 developer_guide。我在 pkg/apis/sparkoperator.k8s.io/v1betav2/types.go 中进行了更改,并在下面添加了邮件字段行

和 mailTo 在 Spec 中列出

Mail []string json:"mail,omitempty"

我在 main.go 和 controller.go 中添加了相关代码

但是,运行后

manifest/crds/ 不包含 crds 中的 mail 字段。是否必须手动创建。我可以在 zz_generated.deepcopy.go 中看到我的对象

0 投票
0 回答
29 浏览

kubernetes - k8s - CRD 中的多个 ownerref

假设我有以下 CRD:

当我运行时kubectl apply -f some.yamlsome.yaml 如下

我希望将 ownerrefs 合并如下:

那可能吗?目前kubectl apply只会简单地将现有的 ownerReferences 替换为aaabbb同时它将合并 ownerReferencesaaabbb用于 Pod 等本机类型。

如果我理解正确,默认情况下 CRD 不支持战略合并,但从 1.16/1.17 开始,我们可以在 CRD 的架构中定义合并策略(k8s doc)。理想情况下,我们可以metadata.ownerReferences在 someCRD 的模式中定义合并策略,这样可以解决这里的问题,但metadata属于 apiserver,不能在 CRD 中重新定义。感觉就像metadata是陷入了某种不幸的状态,它是 k8s 原生类型,但在 CRD 中被视为非结构化字段。

有什么方法可以完成这项工作还是我错过了什么?

提前致谢!:)

0 投票
1 回答
35 浏览

kubernetes - Kubernetes:扩展状态子资源是否需要新的 API 版本?

我打算将其他错误消息字段添加到自定义资源状态。字段标记为

添加这些字段是否需要新的 API 版本,或者只更改管理运算符以用值填充这些字段是否安全?

0 投票
1 回答
165 浏览

kubernetes - 使用 Kubectl 时如何打印 Kubebuilder 中定义的状态字段以显示

如何指定注释,例如+kubebuilder:printcolumn在命令的输出中添加列kubectl get my-crd.my-group.my-domain.com

我有一个 CRD(自定义资源定义),struct其规格和状态通常为 s(类似于此处的 Kubebuilder 教程https://book.kubebuilder.io/cronjob-tutorial/new-api.html#添加新的 api)。

我有这样的状态 struct

其中有几个问题:

时间场

  • 我已经尝试将其设为类型metav1.Time(方便的格式,如他们在https://book.kubebuilder.io/cronjob-tutorial/api-design.html?highlight=metav1.Time#designing-an-api中所述),但是然后此注释// +kubebuilder:printcolumn:name="Last Deploy",type="date",JSONPath=.status.lastDeployTime`` 在 .status.lastDeployTime 的输出中显示为空kubectl
  • 所以我将类型更改为string(然后在控制器中执行oess.Status.LastDeployTime = fmt.Sprintf("%s", metav1.Time{Time: time.Now().UTC()})),然后添加注释+kubebuilder:printcolumn:name="Last Deploy",type=string,JSONPath=.status.lastDeployTime`` 但该字段在 .status.lastDeployTime 的输出中仍然显示为空kubectl

切片字段[]string和地图字段map[string]string

  • 我该如何配置这些?这里没有提及(点击“显示详细参数帮助”时):https ://book.kubebuilder.io/reference/markers/crd.html
  • 如果这些不是在使用时出现格式问题的“简单类型” kubectl,这是否意味着我唯一的选择是string用某种方式制作它们fmt.Sprintf(...)
  • 还有其他选择吗?
0 投票
0 回答
82 浏览

kubernetes - 如何在 Go SDK 忽略 Env Var 源的情况下检索 Kubernetes 环境变量值?

有没有办法在不知道其来源并避免浏览所有可能来源的情况下获取环境变量的值?

假设在 YAML 领域,我们可以拥有:

或者:

但甚至还有许多其他来源。

现在,当使用 Kubernetes 的 Go SDK 时,在这里https://pkg.go.dev/k8s.io/api/core/v1#EnvVar我看到我可以这样做:

是否可以Value在 Go 中检索它而忽略 type 实例中的内容corev1.EnvVar?某种方便的代码为我们进行迭代?

作为替代方法,如何corev1.EnvVar在 Go 中检索来自 ConfigMap 的值?

0 投票
1 回答
91 浏览

kubernetes - Kubernetes 自定义资源的嵌套字段中缺少默认值

我有一个自定义资源定义,其中包含具有默认值的嵌套字段(为简洁起见,省略了一些样板):

shouldDefault每当我在不指定对象的情况下创建此类资源时:

资源为d.shouldDefault.nestedThing时不显示默认值:describe

如果我使用此清单更新资源:

describe然后在d时填充嵌套字段默认值:

我可以在 CRD 中做些什么来消除对shouldDefault: {}资源清单中的行的需求,并在嵌套字段中填充默认值吗?

我的集群在 Kubernetes 版本 1.19 上。

0 投票
1 回答
154 浏览

kubernetes - Kubernetes CRD:在附加打印机列中显示持续时间

在 Kubernetes CustomResourceDefinitions(CRD) 中,我们可以指定additionalPrinterColumns,(例如)kubectl get与 CRD 一起使用。列的值通常使用 . 从 CRD 的状态中提取jsonPath。从Kubernetes 文档中,我们还可以看到时间戳以用户友好的方式呈现(例如,5m2h,表示从该时间戳到现在的持续时间):

Kubernetes Job资源是资源的一个示例,它不仅显示了它何时存在,而且还显示了它的运行时间:

我正在寻找为我的 CRD 构建类似的东西,即:以相同的方式显示两个时间戳之间的持续时间。更具体地说,我想获得两个状态字段之间的持续时间,例如由 Kubernetes 评估和格式化.status.startTimestamp.status.completitionTimestamp

由于在Job资源中完成了完全相同的事情,我想知道这是否可能,或者这是否是内置的特殊行为kubectl

0 投票
1 回答
123 浏览

kubernetes - Kubernetes Operators:Informers vs. reconcile loop

我最近开始构建Kubernetes operator。我正在使用Fabric8 Java Kubernetes 客户端,但我认为我的问题更笼统,也适用于其他编程语言和库。

在阅读解释运算符模式的博客文章、文档或教科书时,我发现设计运算符似乎有两种选择:

  1. 使用无限协调循环,其中所有相应的 Kubernetes 对象都从 API 中检索,然后执行一些操作。
  2. 使用通知者,只要观察到的Kubernetes资源发生变化,就会调用它们。

但是,我没有找到任何源讨论在这种情况下应该使用哪个选项。有没有最佳实践?

0 投票
0 回答
18 浏览

kubernetes - 是否有像 SwaggerHub 这样的工具来管理来自 Kubernetes 世界的 CustomResourceDefinition (CRD)?

我们管理多个 CRD,就像外部生态系统中的 REST API 一样。SwaggerHub 是一个很好的工具,可以集中管理、版本、检查 swagger 文件。鉴于 CRD 也有标准的 OpenAPI 格式,因此无法找到 CRD 的等效工具。

Smartbear(SwaggerHub 的母公司)今天似乎不支持同样的,也不在其路线图上。

有什么建议么?

0 投票
0 回答
21 浏览

kubernetes - kubectl get AzureAssignedIdentities -A -o yaml 为空

我正在尝试使用以下模板部署 api 版本:

当我跑

我得到如下空响应。

谁能告诉这里有什么问题。

提前致谢!