问题标签 [operator-sdk]

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 回答
155 浏览

kubernetes - 具有 2 个控制器的 Kubernetes 操作员

我有一个操作员,里面有 2 个控制器。控制器 A 监视 CRD_A,如果它找到 A 类型的 CR(我们在集群中只能有一个这种类型的 CR),控制器会创建一个 podA 并将 CR 设置为 podA 的所有者。控制器 B 监视 CRD_B,如果找到 B 类型的 CR,控制器会检查 podA 是否存在,并通过使用来自 CR 的信息向 podA 发送 HTTP 请求来设置 pod。这是对操作员工作的简单概述。

问题是当 podA 被删除(由我或 Kubernetes 想要重新调度它)时,会触发 controllerA 的协调,因为 CR_A 是 podA 的所有者,它会创建一个新的 podA。但我也希望控制器 B 能够协调,因为它必须设置 podA,因为现在它没有协调,因为 podA 和控制器 B 之间没有连接。

发生此类事件时,触发控制器 B 协调的正确方法是什么?我不能将两个 CR 设置为 pod 的所有者。我认为控制器A应该以某种方式向控制器B发送协调事件,但我不知道这怎么会发生,这是正确的方法吗?

0 投票
1 回答
67 浏览

kubernetes - 为 kubernetes operator 提供 kubectl 的自定义命令行选项

我有一个 Kubernetes 操作员(例如:)kubectl get oracle_ctrl。现在我想为 kubectl 命令提供自定义参数。前任:kubectl apply oracle_ctrl --auto-discover=true --name=vcn1

我可以再写一个控制器来做同样的工作。但我不想再写一个控制器并利用现有的控制器。

是否可以使用 operator-sdk 为 kubectl 提供自定义参数?

0 投票
2 回答
76 浏览

kubernetes - 更新规范时如何同步自定义资源

在一个基于 operator-sdk 的 Kubernetes 算子中,你知道如何在 CR 规范更新时编写代码来同步 CR 资源kubectl apply吗?您能否提供一些代码示例?

0 投票
1 回答
600 浏览

kubernetes - 如何使用分数格式(即 X/Y)为自定义资源显示 kubectl 列

在 Kubernetes 中,是否可以使用 CRD 的“additionalPrinterColumns”字段以分数格式(即 X/Y)显示列?

更准确地说,我想kubectl使用与下面的 READY 字段相同的格式来显示 CR 字段的描述:

您能否提供“additionalPrinterColumns”部分的内容?

0 投票
1 回答
387 浏览

kubernetes - Kubernetes Ansible 操作员:修补现有部署失败

我最近开始学习 kubernetes 和 ansible。

我有以下 kubernetes 命令来进行回滚

kubectl 补丁部署 -n my-namespace mydeployment --type='json' -p='[ {"op": "replace", "path": "/spec/template/spec/containers/0/image", "值":"127.0.0.1:5050/mydeployment:image_version"} ]

有什么方法可以在 kubernetes ansible 命令中引入 json 数组并修补我的部署?

我尝试过的是我的剧本中的以下内容

由于容器是一个数组,patch 命令会失败。我收到以下错误

NewReplicaSetAvailable\\\\\\",\\\\\\"message\\\\\\":\\\\\\"ReplicaSet \\\\\\\\\\\\\\"my- operator-66ff64c9f4\\\\\\\\\\\\\\" 进展顺利。\\\\\\"}]}}\\": v1.Deployment.Spec: v1.DeploymentSpec.Template: v1 .PodTemplateSpec.Spec: v1.PodSpec.Containers: []v1.Container: decode slice: expect [ or n, but found {, error found in #10 byte of ...|tainers\\":{\\"new -opera|...,更大的上下文 ...|t\\":\\"2021-03-24T22:26:02Z\\"}},\\"spec\\":{\\"containers\ \":{\\"my-operator\\":\\"image:\\\\\\"27.0.0.1:5050/my-ope|...","field":"patch"}] },"code":422}\n'", "reason": "Unprocessable Entity", "status": 422}

有什么方法可以进行调试或打印实际发送到 kubernetes 服务器的命令?

0 投票
0 回答
133 浏览

go - 将命名空间排除在操作员的管理之外

operator-sdk文档的这一章中:https ://sdk.operatorframework.io/docs/building-operators/golang/operator-scope/#watching-resources-in-a-set-of-namespaces ,下面的句子我不清楚: '重要提示:请注意,这不是用于排除命名空间,最好通过谓词来完成。

您能否提供一个将命名空间排除在运营商管理之外的示例?

0 投票
0 回答
212 浏览

kubernetes - 测试使用 operator-sdk 搭建的操作员时,Scheme 为 Nil

我正在研究一个运算符的早期迭代,我使用 operator-sdk 搭建了它。我已尽力遵循Operator SDK Golang TutorialKubebuilder book中的示例。我发现我可以将我的操作员部署并运行到本地集群,但我无法运行测试套件。我的测试总是产生 a panic: runtime error: invalid memory address or nil pointer dereference,我已经追查到Scheme它总是 Nil 的事实。但到目前为止,我还无法弄清楚为什么会这样。

理论上,我可以跳过测试,只在我的本地集群中测试操作符,但从长远来看,这将是非常脆弱的。我希望能够进行 TDD,更重要的是,我希望有一个测试套件与操作员一起使用,以帮助在维护模式下保持质量。

这是我的suite_test.go,我从脚手架版本中尽可能少地对其进行了修改(我所做的更改来自Kubebuilder Book):

这是导致它失败的测试块。我有第二个Describe块(此处未显示),它测试函数之外的一些业务逻辑Reconcile,并且工作正常。

我在这里遗漏了什么阻止Scheme正确初始化的东西吗?我不得不承认,我并不太了解Scheme. 如果有帮助,我很乐意展示其他代码。

0 投票
1 回答
377 浏览

kubernetes - 如何为某个资源 Kubernetes Go Operator 生成事件

我正在用 Go 编写一个 Kubernetes Operator,我想以与 Pod 相同的方式生成事件,即在协调的每个点我想编写一个可以使用kubectl describe myresource.

我找到了可以让我这样做的包,但我不明白如何使用它:https ://github.com/kubernetes/client-go/blob/master/tools/record/event.go

示例骨架代码:

0 投票
2 回答
258 浏览

operator-sdk - 无法使用“go.kubebuilder.io/v3”创建 API

为什么创建失败?虽然告诉我不能自定义,但是还是没能使用k8s的组【batch】,怎么办

0 投票
1 回答
1004 浏览

kubernetes - CRD状态有什么用?

我目前正在使用operator-sdk. 该运算符创建了 twoStatefulSet和 two Service,并带有一些业务逻辑。

我想知道 CRD 状态是什么?在我的协调方法中,我使用默认客户端(即r.List(ctx, &setList, opts...))从集群中获取数据,我是否应该将数据存储在状态中以供以后使用?如果是这样,这个状态有多可靠?我的意思是它持续存在吗?如果控制平面死了,它仍然可用吗?灾难恢复怎么办,如果持久化的数据消失了怎么办?这种情况不会使 CRD 状态的使用无效吗?