问题标签 [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.
https - 通过 istio 网关公开 kibana(eck 运算符) - https 问题(错误 503)
我想用 istio 网关公开 kibana,因为我使用了这个配置文件
我公开的所有其他应用程序使用相同的配置运行良好,但使用 kibana 我有 http 503,并显示此消息“上游连接错误或在标头之前断开/重置。重置原因:连接终止”
如果我从网关中删除 https 配置并且只保留 http ,它可以工作。 证书是从证书管理器生成的,它们适用于其他应用程序(现在我使用自签名证书进行测试)
你期待看到什么?
通过 https 暴露的 Kibana
你看到了什么?在什么情况下?
503 错误,此消息“上游连接错误或在标头之前断开/重置。重置原因:连接终止”
环境
ECK 版本:
https://download.elastic.co/downloads/eck/1.0.0-beta1/all-in-one.yaml
Istio 版本:=1.4.0
Kubernetes 信息:
云:EKS Kubernetes 客户端版本:version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.8", GitCommit:"211047e9a1922595eaa3a1127ed365e9299a6c23", GitTreeState:"clean", BuildDate:"2019-10- 15T12:11:03Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"windows/amd64"} 服务器版本:version.Info{Major:"1", Minor:"14+", GitVersion :“v1.14.9-eks-c0eccc”,GitCommit:“c0eccca51d7500bb03b2f163dd8d534ffeb2f7a2”,GitTreeState:“clean”,BuildDate:“2019-12-22T23:14:11Z”,GoVersion:“go1.12.12”,编译器:“gc” , 平台:"linux/amd64"}
go - 在协调功能中检测规格更新
我现在从 Kubernetes 和 Operator SDK 开始,我正在尝试构建我的第一个 Operator,我可能有一个简单的问题。
问题
如何在 reconcile 循环中检测自定义资源 yaml 中的配置更改并根据更改采取措施?
我在我的 CR 规范中指定了一些配置属性:
当我添加这种新的自定义资源时,我希望我的控制器创建一个新的 pod,其中运行我的应用程序图像(在网络服务器中)。当我的应用程序第一次启动并运行时,我想通过操作员的 HTTP 请求对其进行配置(以添加规范中的目录)。到目前为止还可以,但我还可以在我的应用程序启动并运行时更改这些目录。
例如,我想在规范中添加新目录(通过 kubectl 补丁)。我的操作员的协调方法将被调用,我如何理解规范已更改?我不确定对我的应用程序进行 HTTP 调用以获取所有目录并将它们与规范中的目录进行比较是一个好主意。这是理解变化的正确方法吗?
我正在考虑其他两种方法来发现某些内容已更新,但我不确定它们是否能正常工作,以及它们是否是最好的方法。
第一个想法是使用 client.Get(...) 请求 StoreApp 的实例,但据我了解,这将调用 API 服务器并获取 mystoreapp 的更新版本。我读到了一些本地索引,它就像这些对象的缓存一样,我可以检查缓存的对象和从 API 服务器返回的对象之间是否存在差异。但是我没有找到如何从这个本地索引中获取对象,所以我无法比较这两个对象。
创建地图,我在其中存储孔规范对象的哈希,并在每次使用 client.Get(...) 获得的对象的哈希时检查此哈希。我认为这会起作用,但应该有更好的方法来做到这一点。
我阅读了一些 K8s 的 Java 运算符,其中有一些方法,如 onAdd、onUpdate、onDelete。我在 Operatod SDK 中找不到类似的东西。Operator SDK 中有类似的东西吗?
每个答案都会有所帮助。先感谢您!
最好的问候, 赫斯蒂扬
kubernetes - 如何检查字段是否在自定义资源中显式设置
更新:
我发现我的代码确实有效。协调循环false
首先出现的原因是因为我的集群中存在另一个运算符并自动进行布尔翻转。删除该运算符后,我的代码按预期工作。
这个问题与 Kubernetes 和 Operator-SDK 有关。假设我有一个自定义资源,其规范显示如下:
最后一个字段open
是布尔类型,用于指示商店是否营业。在我的操作员的协调循环中,我想知道MyStore
类型的 CR 是否明确设置了open
字段值。例如:
- 如果值 CR 的
open
字段已显式设置为true
orfalse
,则协调循环应直接采用此值。 - 如果 CR 没有
open
明确设置字段,或者该字段不存在,则协调循环应考虑默认值open
astrue
。
目前我尝试了这种方式,将open
字段类型设置为我的结构中的布尔指针:
然后在协调循环中,我检查现有的open
字段,如下所示:
上面代码的思路是检查open
field的指针是否存在:如果指针为null,则设置true
为open
field。这个想法来自这个问题Go: How to check if a struct property was explicit set to a zero value?
但是上面的代码没有像我预期的那样工作:如果 open
CR 的字段不存在(没有明确设置值),则 valuestore.Spec.Open
将被解析为false
but not nil
。
还有其他方法可以进行字段值检查吗?
kubernetes - 如何正确连接 K8S 对象?
根据operator-sdk doc ,这是operator开发人员常犯的错误。
通过标签、OwnerRefs、状态等连接 Kubernetes 对象的方法可能与未来的更新不兼容或从长远来看过于限制。
那么正确的方法是什么?labels
如何在没有and的情况下连接相关对象OwnerRefs
?
kubernetes - 两个K8S控制器同时修改同一个资源可以吗?
我有几个 CRD,每个 CRD 都应该Container.Spec
在整个集群中进行编辑。像 ENV、标签等...
如果资源由多个控制器管理,可以吗?
这种方法可能存在哪些缺陷?
kubernetes - 为什么我不能在 kubernetes 运算符中更改 cr 的值
我有这样的操作员代码
clock_types.go
clock_controller.go
我的逻辑是如果值 rest == true,则将当前时间和日期重置为 1970-01-01。但事实证明这种方式行不通。
我的cr文件
和输出:
我期望的是如下所示。我不知道我的控制器代码出了什么问题。我的直接分配不起作用,例如 cr.Spec.CurrentDay = "1970-01-01"
kubernetes - 如何在 GCP Cloud Composer 上的 Apache Airflow 上使用带有“KubernetesPodOperator”的连接钩子作为环境变量
我想使用保存在airflow
使用 KubernetesPodOperator
.
在开发映像时,我使用环境变量将数据库连接信息传递给容器,但生产环境将数据库保存为连接挂钩。
提取数据库连接信息并将其传递给容器的最佳方法是什么?
elasticsearch - Elasticsearch 7.2.0:master 尚未被发现或选举,选举至少需要 X 个节点
我正在尝试自动化 kubernetes 集群中弹性搜索节点的水平扩展和缩减过程。
最初,我在 Kubernetes 集群上部署了一个弹性搜索集群(3 个主节点、3 个数据节点和 3 个摄取节点)。在哪里,cluster.initial_master_nodes
是:
然后,我进行了缩减操作,将主节点 3 的数量减少到 1 个(出乎意料,但出于测试目的)。在执行此操作时,我删除了master-c
,master-b
节点并master-a
使用以下设置重新启动了节点:
由于elasticsearch节点(即pods)使用持久化卷,重启节点后,会master-a
减慢以下日志:
似乎它正在尝试查找master-b
and master-c
。
问题:
- 如何覆盖集群设置以便
master-a
不会搜索这些已删除的节点?
kubernetes-operator - kubernetes 运算符,如何在描述中隐藏属性值
我正在编写一个 k8s 运算符。在我的 CR 文件中,我想获取密码并将其秘密存储。一切正常,除了当我描述我的对象时这个密码被打印在屏幕上kubectl describe myKind myObject
有没有办法从规范中隐藏特定属性或至少显示 *** 而不是实际值?就像秘密一样,它只显示字节而不是实际值。
在我的财产之前添加了一行// +kubebuilder:validation:Format=password
。此添加格式:CRD 文件中的密码,但当我描述 myObject 时,它仍会在控制台上打印所有 Spec 值。
编辑:所以更多地说明这一点:
我的 **_types.go 片段是:
所以我正在制作 k8s 的秘密,dbUser
我dbPassword
还有另一个选择要求用户创建一个秘密作为 pre-req,但我对这种方法不满意。
提前致谢。
docker - 没有operator-sdk直接构建operator镜像?
我在Operator SDK的帮助下创建了我的 Kubernetes 操作员 现在我想用我的 GitHub 存储库进行一些自动构建,所以当我将某些内容推送到主服务器以触发操作员映像的构建时。
我可以使用go build + docker build
(用于构建图像)而不是operator-sdk build
?
因为如果它在做同样的工作,我不想再依赖一种工具来构建图像。
我operator-sdk build
用--verbose
它运行,看起来它只做这两件事(go build + docker build),但我不确定。如果我不想存在这样的验证,我不想跳过它们,那么在这些命令之前可能会有一些验证和检查。
使用go
和docker
直接构建图像而不是一个坏主意operator-sdk
?因为我不想在构建过程中做一些特别的事情,所以如果可以避免的话,我只想在构建基础架构中不再依赖它。