mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #99088 from gavinfish/storage-resize
Storage: move filesystem resize code to kubernetes/mount-utils
This commit is contained in:
commit
ccf8a2ef4f
@ -36,7 +36,6 @@ filegroup(
|
|||||||
"//pkg/util/pod:all-srcs",
|
"//pkg/util/pod:all-srcs",
|
||||||
"//pkg/util/procfs:all-srcs",
|
"//pkg/util/procfs:all-srcs",
|
||||||
"//pkg/util/removeall:all-srcs",
|
"//pkg/util/removeall:all-srcs",
|
||||||
"//pkg/util/resizefs:all-srcs",
|
|
||||||
"//pkg/util/rlimit:all-srcs",
|
"//pkg/util/rlimit:all-srcs",
|
||||||
"//pkg/util/selinux:all-srcs",
|
"//pkg/util/selinux:all-srcs",
|
||||||
"//pkg/util/slice:all-srcs",
|
"//pkg/util/slice:all-srcs",
|
||||||
|
@ -1,75 +0,0 @@
|
|||||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
|
||||||
|
|
||||||
go_library(
|
|
||||||
name = "go_default_library",
|
|
||||||
srcs = [
|
|
||||||
"resizefs_linux.go",
|
|
||||||
"resizefs_unsupported.go",
|
|
||||||
],
|
|
||||||
importpath = "k8s.io/kubernetes/pkg/util/resizefs",
|
|
||||||
visibility = ["//visibility:public"],
|
|
||||||
deps = select({
|
|
||||||
"@io_bazel_rules_go//go/platform:aix": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:android": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
"//vendor/k8s.io/klog/v2:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:darwin": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:dragonfly": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:freebsd": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:illumos": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:ios": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:js": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:linux": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
"//vendor/k8s.io/klog/v2:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:nacl": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:netbsd": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:openbsd": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:plan9": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:solaris": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"@io_bazel_rules_go//go/platform:windows": [
|
|
||||||
"//staging/src/k8s.io/mount-utils:go_default_library",
|
|
||||||
],
|
|
||||||
"//conditions:default": [],
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "package-srcs",
|
|
||||||
srcs = glob(["**"]),
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "all-srcs",
|
|
||||||
srcs = [":package-srcs"],
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:public"],
|
|
||||||
)
|
|
@ -24,7 +24,6 @@ go_library(
|
|||||||
"//pkg/apis/core/v1/helper:go_default_library",
|
"//pkg/apis/core/v1/helper:go_default_library",
|
||||||
"//pkg/features:go_default_library",
|
"//pkg/features:go_default_library",
|
||||||
"//pkg/securitycontext:go_default_library",
|
"//pkg/securitycontext:go_default_library",
|
||||||
"//pkg/util/resizefs:go_default_library",
|
|
||||||
"//pkg/volume:go_default_library",
|
"//pkg/volume:go_default_library",
|
||||||
"//pkg/volume/util/types:go_default_library",
|
"//pkg/volume/util/types:go_default_library",
|
||||||
"//pkg/volume/util/volumepathhandler:go_default_library",
|
"//pkg/volume/util/volumepathhandler:go_default_library",
|
||||||
|
@ -21,8 +21,6 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/mount-utils"
|
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
@ -31,9 +29,9 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apimachinery/pkg/util/strategicpatch"
|
"k8s.io/apimachinery/pkg/util/strategicpatch"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/kubernetes/pkg/util/resizefs"
|
|
||||||
"k8s.io/kubernetes/pkg/volume"
|
"k8s.io/kubernetes/pkg/volume"
|
||||||
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
|
||||||
|
"k8s.io/mount-utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -266,11 +264,6 @@ func MergeResizeConditionOnPVC(
|
|||||||
|
|
||||||
// GenericResizeFS : call generic filesystem resizer for plugins that don't have any special filesystem resize requirements
|
// GenericResizeFS : call generic filesystem resizer for plugins that don't have any special filesystem resize requirements
|
||||||
func GenericResizeFS(host volume.VolumeHost, pluginName, devicePath, deviceMountPath string) (bool, error) {
|
func GenericResizeFS(host volume.VolumeHost, pluginName, devicePath, deviceMountPath string) (bool, error) {
|
||||||
mounter := host.GetMounter(pluginName)
|
resizer := mount.NewResizeFs(host.GetExec(pluginName))
|
||||||
diskFormatter := &mount.SafeFormatAndMount{
|
|
||||||
Interface: mounter,
|
|
||||||
Exec: host.GetExec(pluginName),
|
|
||||||
}
|
|
||||||
resizer := resizefs.NewResizeFs(diskFormatter)
|
|
||||||
return resizer.Resize(devicePath, deviceMountPath)
|
return resizer.Resize(devicePath, deviceMountPath)
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,8 @@ go_library(
|
|||||||
"mount_linux.go",
|
"mount_linux.go",
|
||||||
"mount_unsupported.go",
|
"mount_unsupported.go",
|
||||||
"mount_windows.go",
|
"mount_windows.go",
|
||||||
|
"resizefs_linux.go",
|
||||||
|
"resizefs_unsupported.go",
|
||||||
],
|
],
|
||||||
importmap = "k8s.io/kubernetes/vendor/k8s.io/mount-utils",
|
importmap = "k8s.io/kubernetes/vendor/k8s.io/mount-utils",
|
||||||
importpath = "k8s.io/mount-utils",
|
importpath = "k8s.io/mount-utils",
|
||||||
|
@ -441,11 +441,10 @@ func (mounter *SafeFormatAndMount) formatAndMountSensitive(source string, target
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDiskFormat uses 'blkid' to see if the given disk is unformatted
|
func getDiskFormat(exec utilexec.Interface, disk string) (string, error) {
|
||||||
func (mounter *SafeFormatAndMount) GetDiskFormat(disk string) (string, error) {
|
|
||||||
args := []string{"-p", "-s", "TYPE", "-s", "PTTYPE", "-o", "export", disk}
|
args := []string{"-p", "-s", "TYPE", "-s", "PTTYPE", "-o", "export", disk}
|
||||||
klog.V(4).Infof("Attempting to determine if disk %q is formatted using blkid with args: (%v)", disk, args)
|
klog.V(4).Infof("Attempting to determine if disk %q is formatted using blkid with args: (%v)", disk, args)
|
||||||
dataOut, err := mounter.Exec.Command("blkid", args...).CombinedOutput()
|
dataOut, err := exec.Command("blkid", args...).CombinedOutput()
|
||||||
output := string(dataOut)
|
output := string(dataOut)
|
||||||
klog.V(4).Infof("Output: %q", output)
|
klog.V(4).Infof("Output: %q", output)
|
||||||
|
|
||||||
@ -494,6 +493,11 @@ func (mounter *SafeFormatAndMount) GetDiskFormat(disk string) (string, error) {
|
|||||||
return fstype, nil
|
return fstype, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDiskFormat uses 'blkid' to see if the given disk is unformatted
|
||||||
|
func (mounter *SafeFormatAndMount) GetDiskFormat(disk string) (string, error) {
|
||||||
|
return getDiskFormat(mounter.Exec, disk)
|
||||||
|
}
|
||||||
|
|
||||||
// ListProcMounts is shared with NsEnterMounter
|
// ListProcMounts is shared with NsEnterMounter
|
||||||
func ListProcMounts(mountFilePath string) ([]MountPoint, error) {
|
func ListProcMounts(mountFilePath string) ([]MountPoint, error) {
|
||||||
content, err := utilio.ConsistentRead(mountFilePath, maxListTries)
|
content, err := utilio.ConsistentRead(mountFilePath, maxListTries)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// +build linux
|
// +build linux
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2017 The Kubernetes Authors.
|
Copyright 2021 The Kubernetes Authors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@ -16,28 +16,28 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package resizefs
|
package mount
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/mount-utils"
|
utilexec "k8s.io/utils/exec"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ResizeFs Provides support for resizing file systems
|
// ResizeFs Provides support for resizing file systems
|
||||||
type ResizeFs struct {
|
type ResizeFs struct {
|
||||||
mounter *mount.SafeFormatAndMount
|
exec utilexec.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewResizeFs returns new instance of resizer
|
// NewResizeFs returns new instance of resizer
|
||||||
func NewResizeFs(mounter *mount.SafeFormatAndMount) *ResizeFs {
|
func NewResizeFs(exec utilexec.Interface) *ResizeFs {
|
||||||
return &ResizeFs{mounter: mounter}
|
return &ResizeFs{exec: exec}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resize perform resize of file system
|
// Resize perform resize of file system
|
||||||
func (resizefs *ResizeFs) Resize(devicePath string, deviceMountPath string) (bool, error) {
|
func (resizefs *ResizeFs) Resize(devicePath string, deviceMountPath string) (bool, error) {
|
||||||
format, err := resizefs.mounter.GetDiskFormat(devicePath)
|
format, err := getDiskFormat(resizefs.exec, devicePath)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
formatErr := fmt.Errorf("ResizeFS.Resize - error checking format for device %s: %v", devicePath, err)
|
formatErr := fmt.Errorf("ResizeFS.Resize - error checking format for device %s: %v", devicePath, err)
|
||||||
@ -61,7 +61,7 @@ func (resizefs *ResizeFs) Resize(devicePath string, deviceMountPath string) (boo
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (resizefs *ResizeFs) extResize(devicePath string) (bool, error) {
|
func (resizefs *ResizeFs) extResize(devicePath string) (bool, error) {
|
||||||
output, err := resizefs.mounter.Exec.Command("resize2fs", devicePath).CombinedOutput()
|
output, err := resizefs.exec.Command("resize2fs", devicePath).CombinedOutput()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
klog.V(2).Infof("Device %s resized successfully", devicePath)
|
klog.V(2).Infof("Device %s resized successfully", devicePath)
|
||||||
return true, nil
|
return true, nil
|
||||||
@ -74,7 +74,7 @@ func (resizefs *ResizeFs) extResize(devicePath string) (bool, error) {
|
|||||||
|
|
||||||
func (resizefs *ResizeFs) xfsResize(deviceMountPath string) (bool, error) {
|
func (resizefs *ResizeFs) xfsResize(deviceMountPath string) (bool, error) {
|
||||||
args := []string{"-d", deviceMountPath}
|
args := []string{"-d", deviceMountPath}
|
||||||
output, err := resizefs.mounter.Exec.Command("xfs_growfs", args...).CombinedOutput()
|
output, err := resizefs.exec.Command("xfs_growfs", args...).CombinedOutput()
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
klog.V(2).Infof("Device %s resized successfully", deviceMountPath)
|
klog.V(2).Infof("Device %s resized successfully", deviceMountPath)
|
@ -1,7 +1,7 @@
|
|||||||
// +build !linux
|
// +build !linux
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2017 The Kubernetes Authors.
|
Copyright 2021 The Kubernetes Authors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@ -16,22 +16,22 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package resizefs
|
package mount
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/mount-utils"
|
utilexec "k8s.io/utils/exec"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ResizeFs Provides support for resizing file systems
|
// ResizeFs Provides support for resizing file systems
|
||||||
type ResizeFs struct {
|
type ResizeFs struct {
|
||||||
mounter *mount.SafeFormatAndMount
|
exec utilexec.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewResizeFs returns new instance of resizer
|
// NewResizeFs returns new instance of resizer
|
||||||
func NewResizeFs(mounter *mount.SafeFormatAndMount) *ResizeFs {
|
func NewResizeFs(exec utilexec.Interface) *ResizeFs {
|
||||||
return &ResizeFs{mounter: mounter}
|
return &ResizeFs{exec: exec}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resize perform resize of file system
|
// Resize perform resize of file system
|
Loading…
Reference in New Issue
Block a user