mirror of https://github.com/k3s-io/k3s
Merge pull request #64732 from jingxu97/June/attachVolumeLimit
Automatic merge from submit-queue. 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>. Set GCE PD attachable volume limit based on machineType This PR implements the function to return attachable volume limit based on machineType for GCE PD. This is part of the design in kubernetes/community#2051/pull/8/head
commit
ad9722c453
|
@ -17,10 +17,12 @@ limitations under the License.
|
|||
package gce_pd
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/api/core/v1"
|
||||
|
@ -56,6 +58,18 @@ const (
|
|||
gcePersistentDiskPluginName = "kubernetes.io/gce-pd"
|
||||
)
|
||||
|
||||
// The constants are used to map from the machine type (number of CPUs) to the limit of
|
||||
// persistent disks that can be attached to an instance. Please refer to gcloud doc
|
||||
// https://cloud.google.com/compute/docs/disks/#increased_persistent_disk_limits
|
||||
const (
|
||||
OneCPU = 1
|
||||
EightCPUs = 8
|
||||
VolumeLimit16 = 16
|
||||
VolumeLimit32 = 32
|
||||
VolumeLimit64 = 64
|
||||
VolumeLimit128 = 128
|
||||
)
|
||||
|
||||
func getPath(uid types.UID, volName string, host volume.VolumeHost) string {
|
||||
return host.GetPodVolumeDir(uid, kstrings.EscapeQualifiedNameForDisk(gcePersistentDiskPluginName), volName)
|
||||
}
|
||||
|
@ -104,7 +118,7 @@ func (plugin *gcePersistentDiskPlugin) GetAccessModes() []v1.PersistentVolumeAcc
|
|||
|
||||
func (plugin *gcePersistentDiskPlugin) GetVolumeLimits() (map[string]int64, error) {
|
||||
volumeLimits := map[string]int64{
|
||||
util.GCEVolumeLimitKey: 16,
|
||||
util.GCEVolumeLimitKey: VolumeLimit16,
|
||||
}
|
||||
cloud := plugin.host.GetCloudProvider()
|
||||
|
||||
|
@ -120,6 +134,33 @@ func (plugin *gcePersistentDiskPlugin) GetVolumeLimits() (map[string]int64, erro
|
|||
return nil, fmt.Errorf("Expected gce cloud got %s", cloud.ProviderName())
|
||||
}
|
||||
|
||||
instances, ok := cloud.Instances()
|
||||
if !ok {
|
||||
glog.Warning("Failed to get instances from cloud provider")
|
||||
return volumeLimits, nil
|
||||
}
|
||||
|
||||
instanceType, err := instances.InstanceType(context.TODO(), plugin.host.GetNodeName())
|
||||
if err != nil {
|
||||
glog.Errorf("Failed to get instance type from GCE cloud provider")
|
||||
return volumeLimits, nil
|
||||
}
|
||||
if strings.HasPrefix(instanceType, "n1-") {
|
||||
splits := strings.Split(instanceType, "-")
|
||||
if len(splits) < 3 {
|
||||
return volumeLimits, nil
|
||||
}
|
||||
last := splits[2]
|
||||
if num, err := strconv.Atoi(last); err == nil {
|
||||
if num == OneCPU {
|
||||
volumeLimits[util.GCEVolumeLimitKey] = VolumeLimit32
|
||||
} else if num < EightCPUs {
|
||||
volumeLimits[util.GCEVolumeLimitKey] = VolumeLimit64
|
||||
} else {
|
||||
volumeLimits[util.GCEVolumeLimitKey] = VolumeLimit128
|
||||
}
|
||||
}
|
||||
}
|
||||
return volumeLimits, nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue