问题标签 [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 - Kubernetes Operators:Informers vs. reconcile loop
我最近开始构建Kubernetes operator。我正在使用Fabric8 Java Kubernetes 客户端,但我认为我的问题更笼统,也适用于其他编程语言和库。
在阅读解释运算符模式的博客文章、文档或教科书时,我发现设计运算符似乎有两种选择:
- 使用无限协调循环,其中所有相应的 Kubernetes 对象都从 API 中检索,然后执行一些操作。
- 使用通知者,只要观察到的Kubernetes资源发生变化,就会调用它们。
但是,我没有找到任何源讨论在这种情况下应该使用哪个选项。有没有最佳实践?
kubernetes - 在 Kubebuilder 验证 webhook 中管理不可变字段
根据Kubebuilder 文档,可以为给定的 CRD 实现不可变字段:
我们将 ValidateCreate 从 ValidateUpdate 中分离出来,以允许诸如使某些字段不可变的行为,以便它们只能在创建时设置。
你们中的一些人会有一些关于实现这一点的示例或代码示例吗?
kubernetes - 如何在 Kubebuilder 中将 RBAC 角色添加到控制器以获取不同类型的资源
我正在使用 Kubebuilder 创建一个新的 Operator 来部署 Kubernetes 控制器来管理新的 CRD 自定义资源定义。
这个新的 CRD(假设被称为MyNewResource
)需要列出/创建/删除 CronJobs。
因此,在定义该方法的 Controller Go 代码中,Reconcile(...)
我添加了一个新的 RBAC 注释以允许对 CronJobs 进行协调(请参见此处):
然而,在构建推送和部署 Docker/Kubernetes 控制器(repo myrepo
、make manifests
、 then make install
、 then make docker-build docker-push
、 then make deploy
)之后,我仍然在日志中看到:
我还看到有关缓存的问题,但它们可能不相关(不确定):
如何让我的新 Operator 处理 CronJobs 资源?
目前,当我通过调用为我的 CRD 的新实例提供一些 YAML 时,基本上我无法以编程方式(Go 代码)创建新的 CronJobs:
kubernetes - 禁用持久化在 kubernetes 上的 redis 企业集群中不起作用
ITNOA
我尝试使用 redis 运算符创建redis 企业集群。
为了声明我的集群,我写了如下内容
但我的问题是即使我将 presistentSpec 设置为 false,我看到kubectl describe pvc redis-enterprise-storage-harbor-cluster-0
show redis 尝试声明 pv 并且我的 pod 引导失败。
如果我运行kubectl get pods
你可以看到harbor-cluster-0
没有准备好(因为 redis pod 的引导失败)
我的问题是如何解决它?
kubernetes - 升级 CustomResourceDefinition 后升级 Controller
在 Kubernetes 1.22 中,用于 的 beta APICustomResourceDefinition
apiextensions.k8s.io/v1beta1
被删除并替换为apiextensions.k8s.io/v1
. 在更改 CRD 时,我意识到即使我已将 CRD 更改v1alpha1
为.apiextensions.k8s.io/v1alpha1
apiextensions.k8s.io/v1
我已经阅读了这个来源,它指出为了部署,我应该更改 API 版本,但我的情况是对此的扩展,因为我没有新 API 的控制器。
我是否需要为新的 API 版本编写新的控制器?
kubernetes - Kubernetes Cassandra Datacenter 在删除 Datacenter 时删除 PVC
我安装了 cassandra 操作员,并设置了具有 3 个节点的 cassandra 数据中心/集群。我已经创建了示例键空间、表并插入了数据。我看到它在我的存储部分创建了 3 个 PVC。当我删除数据中心时,它也删除了关联的 PVC,所以当我设置相同的配置数据中心/集群时,它是全新的,没有更早的键空间或表。我怎样才能让它们持久化以备将来使用?我正在使用下面的示例 yaml https://github.com/datastax/cass-operator/tree/master/operator/example-cassdc-yaml/cassandra-3.11.x
我没有在其中找到任何持久性VolumeClaim 配置,它具有 storageConfig: cassandraDataVolumeClaimSpec: 有人遇到过这种情况吗?
编辑:存储类详细信息:
这是 Cassandra 集群 YAML:
编辑:光伏详情:
go - 观察命名空间中的所有对象种类
我正在开发一个项目,该项目监视命名空间中所有对象种类的资源,并执行相同的操作作为对所述资源状态变化的响应。资源种类包括 CRD,并且可能因一个命名空间而异,具体取决于命名空间中创建的资源。
是否存在为命名空间中存在的所有对象种类动态创建控制器的已知模式?
我希望实现的一个密切示例是一个观察者,它观察命名空间中的所有资源,并在所述资源发生变化时向接收者发送消息。
以这个场景为例,这个 watcher 在启动时会执行以下操作:
- 对于每个带有注释的命名空间,
watch-namespace: true
请执行以下操作: - 将命名空间中每个资源的清单发送给接收者
- 当资源改变时,将新的清单发送给接收者
观察者必须能够观察命名空间中当前存在的或将来创建的所有种类。同样重要的是要注意,这个观察者不会改变或协调它正在观察的资源的状态。
kubernetes - 控制器是否应该清理它正在删除的资源?
我是 Kubernetes Operators 的新手。我有一个关于如何在删除点进行清理的一般性问题。
假设控制器正在管理一个资源,该资源由部署等组成。此部署写入一些外部数据库。我希望在删除资源时删除数据库中的项目(但不是在简单地重新启动其 Pod 时 - 因此它不会作为应用程序关闭逻辑的一部分发生)。
似乎数据库清除必须在控制器中发生?但这让我有点不安,因为关于值如何存储的知识似乎是被管理资源的知识,而不是控制器的知识。让控制器向底层应用程序发送消息以执行其自己的清理是唯一的其他好选择吗?
处理这类事情的一般方法是什么?
kubernetes - 当我需要运行迁移脚本时如何发布自定义 k8s 运算符?
我将我的软件抽象为 k8s 运算符。当我想发布我的软件时,有两种解决方案,哪一种更好?
- 创建一个新的服务来检测版本变化是否需要运行迁移脚本然后执行迁移。
- 在 Operator 中编写是否运行迁移脚本的逻辑。使用 Operator 自动检测版本更改。