Unverified Commit d9632f66 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #59328 from vmware/vSphereVolumeMetricsProvider

Automatic merge from submit-queue (batch tested with PRs 58317, 58687, 57872, 59063, 59328). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Volume metrics support for vSphere Cloud Provider **What this PR does / why we need it**: This PR adds Volume metrics support for vSphere Cloud Provider. With this we can monitor the available space, capacity and used space on volumes created using vSphere. **Which issue(s) this PR fixes** Fixes # https://github.com/kubernetes/kubernetes/issues/43527 Fixes # https://github.com/vmware/kubernetes/issues/208 **Special notes for your reviewer**: Performed following steps to ensure metrics are reported correctly for vSphere Volumes. - Created Dynamic PV using the PV claim of size 1Gi. ``` $ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE thinclaim Bound pvc-bbc18f6a-0a04-11e8-bb1c-0050569c126b 1Gi RWO thin 5m ``` - Created Pod using this claim. - Verified volume stats metrics. ``` / # df -h | grep /dev/sdb Filesystem Size Used Available Use% Mounted on /dev/sdb 975.9M 1.3M 923.4M 0% /mnt/volume1 ``` ``` # HELP kubelet_volume_stats_available_bytes Number of available bytes in the volume # TYPE kubelet_volume_stats_available_bytes gauge kubelet_volume_stats_available_bytes{namespace="default",persistentvolumeclaim="thinclaim"} 9.68261632e+08 # HELP kubelet_volume_stats_capacity_bytes Capacity in bytes of the volume # TYPE kubelet_volume_stats_capacity_bytes gauge kubelet_volume_stats_capacity_bytes{namespace="default",persistentvolumeclaim="thinclaim"} 1.02330368e+09 # HELP kubelet_volume_stats_used_bytes Number of used bytes in the volume # TYPE kubelet_volume_stats_used_bytes gauge kubelet_volume_stats_used_bytes{namespace="default",persistentvolumeclaim="thinclaim"} 1.355776e+06 ``` - Download 512MB file in the Pod on attached volume and Verified volume stats metrics is updated successfully. ``` /mnt/volume1 # df -h | grep /dev/sdb Filesystem Size Used Available Use% Mounted on /dev/sdb 975.9M 513.8M 410.9M 56% /mnt/volume1 ``` ``` # HELP kubelet_volume_stats_available_bytes Number of available bytes in the volume # TYPE kubelet_volume_stats_available_bytes gauge kubelet_volume_stats_available_bytes{namespace="default",persistentvolumeclaim="thinclaim"} 4.30862336e+08 # HELP kubelet_volume_stats_capacity_bytes Capacity in bytes of the volume # TYPE kubelet_volume_stats_capacity_bytes gauge kubelet_volume_stats_capacity_bytes{namespace="default",persistentvolumeclaim="thinclaim"} 1.02330368e+09 # HELP kubelet_volume_stats_used_bytes Number of used bytes in the volume # TYPE kubelet_volume_stats_used_bytes gauge kubelet_volume_stats_used_bytes{namespace="default",persistentvolumeclaim="thinclaim"} 5.38755072e+08 ``` **Release note**: ```release-note Volume metrics support for vSphere Cloud Provider ```
parents cf66442e 46edaa72
...@@ -52,6 +52,10 @@ const ( ...@@ -52,6 +52,10 @@ const (
vsphereVolumePluginName = "kubernetes.io/vsphere-volume" vsphereVolumePluginName = "kubernetes.io/vsphere-volume"
) )
func getPath(uid types.UID, volName string, host volume.VolumeHost) string {
return host.GetPodVolumeDir(uid, utilstrings.EscapeQualifiedNameForDisk(vsphereVolumePluginName), volName)
}
// vSphere Volume Plugin // vSphere Volume Plugin
func (plugin *vsphereVolumePlugin) Init(host volume.VolumeHost) error { func (plugin *vsphereVolumePlugin) Init(host volume.VolumeHost) error {
plugin.host = host plugin.host = host
...@@ -107,12 +111,13 @@ func (plugin *vsphereVolumePlugin) newMounterInternal(spec *volume.Spec, podUID ...@@ -107,12 +111,13 @@ func (plugin *vsphereVolumePlugin) newMounterInternal(spec *volume.Spec, podUID
return &vsphereVolumeMounter{ return &vsphereVolumeMounter{
vsphereVolume: &vsphereVolume{ vsphereVolume: &vsphereVolume{
podUID: podUID, podUID: podUID,
volName: spec.Name(), volName: spec.Name(),
volPath: volPath, volPath: volPath,
manager: manager, manager: manager,
mounter: mounter, mounter: mounter,
plugin: plugin, plugin: plugin,
MetricsProvider: volume.NewMetricsStatFS(getPath(podUID, spec.Name(), plugin.host)),
}, },
fsType: fsType, fsType: fsType,
diskMounter: volumehelper.NewSafeFormatAndMountFromHost(plugin.GetPluginName(), plugin.host)}, nil diskMounter: volumehelper.NewSafeFormatAndMountFromHost(plugin.GetPluginName(), plugin.host)}, nil
...@@ -121,11 +126,12 @@ func (plugin *vsphereVolumePlugin) newMounterInternal(spec *volume.Spec, podUID ...@@ -121,11 +126,12 @@ func (plugin *vsphereVolumePlugin) newMounterInternal(spec *volume.Spec, podUID
func (plugin *vsphereVolumePlugin) newUnmounterInternal(volName string, podUID types.UID, manager vdManager, mounter mount.Interface) (volume.Unmounter, error) { func (plugin *vsphereVolumePlugin) newUnmounterInternal(volName string, podUID types.UID, manager vdManager, mounter mount.Interface) (volume.Unmounter, error) {
return &vsphereVolumeUnmounter{ return &vsphereVolumeUnmounter{
&vsphereVolume{ &vsphereVolume{
podUID: podUID, podUID: podUID,
volName: volName, volName: volName,
manager: manager, manager: manager,
mounter: mounter, mounter: mounter,
plugin: plugin, plugin: plugin,
MetricsProvider: volume.NewMetricsStatFS(getPath(podUID, volName, plugin.host)),
}}, nil }}, nil
} }
...@@ -174,7 +180,7 @@ type vsphereVolume struct { ...@@ -174,7 +180,7 @@ type vsphereVolume struct {
// diskMounter provides the interface that is used to mount the actual block device. // diskMounter provides the interface that is used to mount the actual block device.
diskMounter mount.Interface diskMounter mount.Interface
plugin *vsphereVolumePlugin plugin *vsphereVolumePlugin
volume.MetricsNil volume.MetricsProvider
} }
var _ volume.Mounter = &vsphereVolumeMounter{} var _ volume.Mounter = &vsphereVolumeMounter{}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment