【问题标题】:How to compare a Kubernetes custom resource spec with expected spec in a GO controller?如何将 Kubernetes 自定义资源规范与 GO 控制器中的预期规范进行比较?
【发布时间】:2020-07-20 11:52:15
【问题描述】:

我正在尝试实现我的第一个 Kubernetes 运算符。我希望操作员控制器能够将正在运行的 pod 中的配置与自定义资源定义中定义的预期配置进行比较。

例如:自定义资源

apiVersion: test.com/v1alpha1
kind: TEST
metadata::
  name: example-test
spec:
  replicas: 3
  version: 20:03
  config:
    valueA: true
    valueB: 123

上述自定义资源已部署,3 个 Pod 正在运行。进行了更改,使配置“valueA”更改为 false。

在 GO 控制器协调功能中,我可以获取 TEST 实例并查看配置的“新”版本:

instance := &testv1alpha1.TEST{}
log.Info("New value : " + instance.Spec.Config.valueA)

我想知道如何访问正在运行的 pod 中的“valueA”的值,以便我可以比较和重新创建已更改的 pod?

还有一个次要问题,我是否需要在 reconcile 函数中遍历所有正在运行的 pod 来检查每个 pod,或者我可以将其作为单个操作执行吗?

【问题讨论】:

    标签: go kubernetes operator-sdk


    【解决方案1】:

    这个配置到底是什么?如果是 Pod 的规范配置,我建议您更新的不是单个 Pod,而是 Deployment 中的规范,它会自动重新启动它的 Pod。如果它是此 pod 中应用程序的环境变量,我建议使用 ConfigMap 用于存储它们并更新它。回答你的第二个问题,在这两种情况下 - 这将是一个单一的操作。

    要获得 Deployment 或 ConfigMap,您需要拥有它的名称和命名空间,通常,对于自定义资源,它应该从它的名称派生而来。 Here is example如何获取部署实例并更新它。

    【讨论】:

    • 该配置用于在 pod 中运行的应用程序。所以也许我需要从自定义资源中提取配置并放入配置映射中。我来看看这个例子。感谢您的链接。
    猜你喜欢
    • 2011-07-11
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多