kubernetes 数据源驱动 - get_all 实现

launchpad 蓝图: https://blueprints.launchpad.net/vitrage/+spec/k8s-datasource

此蓝图描述了 kubernetes 数据源及其 get_all 节点(虚拟机)的实现。

问题描述

Kubernetes 节点应通过 Vitrage 数据源添加到 Vitrage 图中。 这需要为 kubernetes 编写一个数据源。

该数据源应支持 get_all:定期查询所有 kubernetes 节点。

提议的变更

Kubernetes 数据源将配置为

  • 轮询间隔(秒,默认:600)

每轮询间隔秒,Kubernetes 驱动程序将调用 kubernetes 客户端以检索所有节点。 这些节点将被转换为 Vitrage 数据源事件并传递到 Vitrage 图队列。

list_nodes() 的 kubernetes 客户端返回调用的示例

apiVersion: v1
items:
- apiVersion: v1
  kind: Node
  metadata:
    annotations:
      node.alpha.kubernetes.io/ttl: "0"
      volumes.kubernetes.io/controller-managed-attach-detach: "true"
    creationTimestamp: 2017-11-29T07:24:59Z
    labels:
      beta.kubernetes.io/arch: amd64
      beta.kubernetes.io/os: linux
      failure-domain.beta.kubernetes.io/region: regionOne
      failure-domain.beta.kubernetes.io/zone: zone0
      is_control: "true"
      kubernetes.io/hostname: bcmt-control-01
    name: bcmt-control-01
    namespace: ""
    resourceVersion: "10714282"
    selfLink: /api/v1/nodes/bcmt-control-01
    uid: 68011206-d4d6-11e7-9c63-fa163e2e2123
  spec:
    externalID: 41c40aab-80e9-4bb6-a280-27976bfc811f
    providerID: openstack:///41c40aab-80e9-4bb6-a280-27976bfc811f
    taints:
    - effect: NoExecute
      key: is_control
      timeAdded: null
      value: "true"
  status:
    addresses:
    - address: 172.16.1.12
      type: InternalIP
    - address: 10.5.138.49
      type: InternalIP
    - address: bcmt-control-01
      type: Hostname
    allocatable:
      cpu: "2"
      memory: 3779500Ki
      pods: "110"
    capacity:
      cpu: "2"
      memory: 3881900Ki
      pods: "110"
    conditions:
    - lastHeartbeatTime: 2018-02-15T12:08:58Z
      lastTransitionTime: 2018-02-14T13:39:53Z
      message: kubelet has sufficient disk space available
      reason: KubeletHasSufficientDisk
      status: "False"
      type: OutOfDisk
    - lastHeartbeatTime: 2018-02-15T12:08:58Z
      lastTransitionTime: 2018-02-14T13:39:53Z
      message: kubelet has sufficient memory available
      reason: KubeletHasSufficientMemory
      status: "False"
      type: MemoryPressure
    - lastHeartbeatTime: 2018-02-15T12:08:58Z
      lastTransitionTime: 2018-02-14T13:39:53Z
      message: kubelet has no disk pressure
      reason: KubeletHasNoDiskPressure
      status: "False"
      type: DiskPressure
    - lastHeartbeatTime: 2018-02-15T12:08:58Z
      lastTransitionTime: 2018-02-14T13:39:53Z
      message: kubelet is posting ready status
      reason: KubeletReady
      status: "True"
      type: Ready
    daemonEndpoints:
      kubeletEndpoint:
        Port: 10250
    images:
    - names:
      - 172.16.1.4:5000/gcr.io/google-containers/hyperkube-amd64
      - 172.16.1.4:5000/gcr.io/google-containers/hyperkube-amd64:v1.7.4
      sizeBytes: 615424570
    nodeInfo:
      architecture: amd64
      bootID: 883c98a9-17ea-40f9-af7d-a448ad817249
      containerRuntimeVersion: docker://1.12.6
      kernelVersion: 3.10.0-514.21.1.el7.x86_64
      kubeProxyVersion: v1.7.4
      kubeletVersion: v1.7.4
      machineID: 10783ea106f742728fede153a98b035d
      operatingSystem: linux
      osImage: Red Hat Enterprise Linux Server 7.3 (Maipo)
      systemUUID: 41C40AAB-80E9-4BB6-A280-27976BFC811F
将提取相关数据
  • 创建时间戳。

  • 名称。

  • 地址(IP 地址)

  • kubernetes ID (uid)

  • provider

  • providerID

备选方案

数据模型影响

将向实体图添加新的顶点。 这可能是重复的顶点。(来自 Nova 和 kubernetes 的虚拟机)。 建议的解决方案是资源等价性。(计划用于后续工作)

REST API 影响

版本影响

其他最终用户影响

部署者影响

应配置 Kubernetes 驱动程序。(获取对主节点的访问权限)

开发者影响

Horizon 影响

实现

负责人

主要负责人

Idan-kinory

工作项

依赖项

测试

此蓝图需要单元测试。

文档影响

数据源配置。

参考资料

数据源主蓝图: https://blueprints.launchpad.net/vitrage/+spec/k8s-datasource