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