写点什么

ceph-csi 源码分析(7)-rbd driver-IdentityServer 分析

用户头像
良凯尔
关注
发布于: 2021 年 05 月 15 日
ceph-csi源码分析(7)-rbd driver-IdentityServer分析

kubernetes ceph-csi 分析 - 目录导航:

https://xie.infoq.cn/article/4b1d3e32f124307a49cd9c1e3


当 ceph-csi 组件启动时指定的 driver type 为 rbd 时,会启动 rbd driver 相关的服务。然后再根据controllerservernodeserver的参数配置,决定启动ControllerServerIdentityServer,或NodeServerIdentityServer


基于 tag v3.0.0


https://github.com/ceph/ceph-csi/releases/tag/v3.0.0


rbd driver 分析将分为 4 个部分,分别是服务入口分析、controllerserver 分析、nodeserver 分析与 IdentityServer 分析。



这节进行 IdentityServer 分析,IdentityServer 主要包括了 GetPluginInfo(获取 driver 信息)、Probe(探测接口)、GetPluginCapabilities(获取 driver 能力)三个方法,将一一进行分析。

IdentityServer 分析

(1)GetPluginInfo

简介

GetPluginInfo 主要用于获取该 ceph-csi driver 的信息,如 driver 名称、版本等。


GetPluginInfo returns plugin information.

GetPluginInfo
// internal/csi-common/identityserver-default.go
// GetPluginInfo returns plugin information.func (ids *DefaultIdentityServer) GetPluginInfo(ctx context.Context, req *csi.GetPluginInfoRequest) (*csi.GetPluginInfoResponse, error) { util.TraceLog(ctx, "Using default GetPluginInfo")
if ids.Driver.name == "" { return nil, status.Error(codes.Unavailable, "Driver name not configured") }
if ids.Driver.version == "" { return nil, status.Error(codes.Unavailable, "Driver is missing version") }
return &csi.GetPluginInfoResponse{ Name: ids.Driver.name, VendorVersion: ids.Driver.version, }, nil}
复制代码

(2)Probe

简介

Probe 是一个探测接口,用于探测该 driver 是否启动/存活。


Probe returns empty response.


Probe 方法由 liveness driver 调用,liveness driver 定时调用该方法,探测 csi driver 的存活,然后统计到 prometheus metrics 中。(liveness driver 的相关代码相对简单,不再单独展开分析)


liveness driver 调用 Probe 的有关代码位于internal/liveness/liveness.go-getLiveness()

Probe
// internal/csi-common/identityserver-default.go
// Probe returns empty response.func (ids *DefaultIdentityServer) Probe(ctx context.Context, req *csi.ProbeRequest) (*csi.ProbeResponse, error) { return &csi.ProbeResponse{}, nil}
复制代码


被 sidecar 容器 liveness 调用,探测 csi 组件健康存活情况。

(3)GetPluginCapabilities

简介

GetPluginCapabilities 用于获取 driver 的能力。


GetPluginCapabilities returns available capabilities of the rbd driver.

GetPluginCapabilities
// internal/rbd/identityserver.go
// GetPluginCapabilities returns available capabilities of the rbd driver.func (is *IdentityServer) GetPluginCapabilities(ctx context.Context, req *csi.GetPluginCapabilitiesRequest) (*csi.GetPluginCapabilitiesResponse, error) { return &csi.GetPluginCapabilitiesResponse{ Capabilities: []*csi.PluginCapability{ { Type: &csi.PluginCapability_Service_{ Service: &csi.PluginCapability_Service{ Type: csi.PluginCapability_Service_CONTROLLER_SERVICE, }, }, }, { Type: &csi.PluginCapability_VolumeExpansion_{ VolumeExpansion: &csi.PluginCapability_VolumeExpansion{ Type: csi.PluginCapability_VolumeExpansion_ONLINE, }, }, }, { Type: &csi.PluginCapability_Service_{ Service: &csi.PluginCapability_Service{ Type: csi.PluginCapability_Service_VOLUME_ACCESSIBILITY_CONSTRAINTS, }, }, }, }, }, nil}
复制代码

总结

这节分析了GetPluginInfoProbeGetPluginCapabilities方法,作用分别如下:


GetPluginInfo:用于获取该 ceph-csi driver 的信息,如 driver 名称、版本等。


Probe:一个探测接口,用于探测该 driver 是否启动。


GetPluginCapabilities:用于获取 driver 的能力。

发布于: 2021 年 05 月 15 日阅读数: 12
用户头像

良凯尔

关注

热爱的力量 2020.01.10 加入

kubernetes开发者

评论

发布
暂无评论
ceph-csi源码分析(7)-rbd driver-IdentityServer分析