mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-10 04:27:54 +00:00
kubelet: get cgroup driver config from CRI
This patch modifies kubelet to get the cgroup driver setting from the CRI runtime using the newly added RuntimeConfig rpc. The new code path only takes place if the KubeletCgroupDriverFromCRI feature gate is enabled. If the runtime returns a not-implemented error kubelet falls back to using the cgroupDriver configuration option, with a log message instructing the user to upgrade to w newer container runtime. Other rpc errors cause kubelet to exit as is the case if the runtime returns an unknown cgroup driver.
This commit is contained in:
parent
fd434003f3
commit
d7797fbc61
@ -35,6 +35,8 @@ import (
|
||||
"github.com/coreos/go-systemd/v22/daemon"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/mount-utils"
|
||||
|
||||
@ -76,6 +78,7 @@ import (
|
||||
"k8s.io/component-base/version"
|
||||
"k8s.io/component-base/version/verflag"
|
||||
nodeutil "k8s.io/component-helpers/node/util"
|
||||
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
|
||||
kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1"
|
||||
"k8s.io/kubernetes/cmd/kubelet/app/options"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
@ -629,6 +632,13 @@ func run(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Depend
|
||||
return err
|
||||
}
|
||||
|
||||
// Get cgroup driver setting from CRI
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.KubeletCgroupDriverFromCRI) {
|
||||
if err := getCgroupDriverFromCRI(ctx, s, kubeDeps); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
var cgroupRoots []string
|
||||
nodeAllocatableRoot := cm.NodeAllocatableRoot(s.CgroupRoot, s.CgroupsPerQOS, s.CgroupDriver)
|
||||
cgroupRoots = append(cgroupRoots, nodeAllocatableRoot)
|
||||
@ -1281,3 +1291,28 @@ func newTracerProvider(s *options.KubeletServer) (oteltrace.TracerProvider, erro
|
||||
}
|
||||
return tp, nil
|
||||
}
|
||||
|
||||
func getCgroupDriverFromCRI(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Dependencies) error {
|
||||
klog.V(4).InfoS("Getting CRI runtime configuration information")
|
||||
runtimeConfig, err := kubeDeps.RemoteRuntimeService.RuntimeConfig(ctx)
|
||||
if err != nil {
|
||||
s, ok := status.FromError(err)
|
||||
if !ok || s.Code() != codes.Unimplemented {
|
||||
return err
|
||||
}
|
||||
// CRI implementation doesn't support RuntimeConfig, fallback
|
||||
klog.InfoS("CRI implementation should be updated to support RuntimeConfig when KubeletCgroupDriverFromCRI feature gate has been enabled. Falling back to using cgroupDriver from kubelet config.")
|
||||
return nil
|
||||
}
|
||||
|
||||
switch d := runtimeConfig.GetLinux().GetCgroupDriver(); d {
|
||||
case runtimeapi.CgroupDriver_SYSTEMD:
|
||||
s.CgroupDriver = "systemd"
|
||||
case runtimeapi.CgroupDriver_CGROUPFS:
|
||||
s.CgroupDriver = "cgroupfs"
|
||||
default:
|
||||
return fmt.Errorf("runtime returned an unknown cgroup driver %d", d)
|
||||
}
|
||||
klog.InfoS("Using cgroup driver setting received from the CRI runtime", "cgroupDriver", s.CgroupDriver)
|
||||
return nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user