mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 09:49:50 +00:00
Add version cache for cri
This commit is contained in:
parent
4dc418c5ee
commit
411b906d4d
@ -21,6 +21,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/coreos/go-semver/semver"
|
"github.com/coreos/go-semver/semver"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
@ -39,6 +40,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/network"
|
"k8s.io/kubernetes/pkg/kubelet/network"
|
||||||
proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results"
|
proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/types"
|
"k8s.io/kubernetes/pkg/kubelet/types"
|
||||||
|
"k8s.io/kubernetes/pkg/kubelet/util/cache"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/util/format"
|
"k8s.io/kubernetes/pkg/kubelet/util/format"
|
||||||
kubetypes "k8s.io/kubernetes/pkg/types"
|
kubetypes "k8s.io/kubernetes/pkg/types"
|
||||||
"k8s.io/kubernetes/pkg/util/flowcontrol"
|
"k8s.io/kubernetes/pkg/util/flowcontrol"
|
||||||
@ -52,6 +54,9 @@ const (
|
|||||||
podLogsRootDirectory = "/var/log/pods"
|
podLogsRootDirectory = "/var/log/pods"
|
||||||
// A minimal shutdown window for avoiding unnecessary SIGKILLs
|
// A minimal shutdown window for avoiding unnecessary SIGKILLs
|
||||||
minimumGracePeriodInSeconds = 2
|
minimumGracePeriodInSeconds = 2
|
||||||
|
|
||||||
|
// The expiration time of version cache.
|
||||||
|
versionCacheTTL = 60 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -100,6 +105,9 @@ type kubeGenericRuntimeManager struct {
|
|||||||
// gRPC service clients
|
// gRPC service clients
|
||||||
runtimeService internalApi.RuntimeService
|
runtimeService internalApi.RuntimeService
|
||||||
imageService internalApi.ImageManagerService
|
imageService internalApi.ImageManagerService
|
||||||
|
|
||||||
|
// The version cache of runtime daemon.
|
||||||
|
versionCache *cache.ObjectCache
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewKubeGenericRuntimeManager creates a new kubeGenericRuntimeManager
|
// NewKubeGenericRuntimeManager creates a new kubeGenericRuntimeManager
|
||||||
@ -175,6 +183,13 @@ func NewKubeGenericRuntimeManager(
|
|||||||
kubeRuntimeManager.runner = lifecycle.NewHandlerRunner(httpClient, kubeRuntimeManager, kubeRuntimeManager)
|
kubeRuntimeManager.runner = lifecycle.NewHandlerRunner(httpClient, kubeRuntimeManager, kubeRuntimeManager)
|
||||||
kubeRuntimeManager.containerGC = NewContainerGC(runtimeService, podGetter, kubeRuntimeManager)
|
kubeRuntimeManager.containerGC = NewContainerGC(runtimeService, podGetter, kubeRuntimeManager)
|
||||||
|
|
||||||
|
kubeRuntimeManager.versionCache = cache.NewObjectCache(
|
||||||
|
func() (interface{}, error) {
|
||||||
|
return kubeRuntimeManager.getTypedVersion()
|
||||||
|
},
|
||||||
|
versionCacheTTL,
|
||||||
|
)
|
||||||
|
|
||||||
return kubeRuntimeManager, nil
|
return kubeRuntimeManager, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,6 +227,15 @@ func (r runtimeVersion) Compare(other string) (int, error) {
|
|||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *kubeGenericRuntimeManager) getTypedVersion() (*runtimeApi.VersionResponse, error) {
|
||||||
|
typedVersion, err := m.runtimeService.Version(kubeRuntimeAPIVersion)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Get remote runtime typed version failed: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return typedVersion, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Version returns the version information of the container runtime.
|
// Version returns the version information of the container runtime.
|
||||||
func (m *kubeGenericRuntimeManager) Version() (kubecontainer.Version, error) {
|
func (m *kubeGenericRuntimeManager) Version() (kubecontainer.Version, error) {
|
||||||
typedVersion, err := m.runtimeService.Version(kubeRuntimeAPIVersion)
|
typedVersion, err := m.runtimeService.Version(kubeRuntimeAPIVersion)
|
||||||
@ -227,11 +251,11 @@ func (m *kubeGenericRuntimeManager) Version() (kubecontainer.Version, error) {
|
|||||||
// runtime. Implementation is expected to update this cache periodically.
|
// runtime. Implementation is expected to update this cache periodically.
|
||||||
// This may be different from the runtime engine's version.
|
// This may be different from the runtime engine's version.
|
||||||
func (m *kubeGenericRuntimeManager) APIVersion() (kubecontainer.Version, error) {
|
func (m *kubeGenericRuntimeManager) APIVersion() (kubecontainer.Version, error) {
|
||||||
typedVersion, err := m.runtimeService.Version(kubeRuntimeAPIVersion)
|
versionObject, err := m.versionCache.Get(m.machineInfo.MachineID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Get remote runtime version failed: %v", err)
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
typedVersion := versionObject.(*runtimeApi.VersionResponse)
|
||||||
|
|
||||||
return newRuntimeVersion(typedVersion.GetRuntimeApiVersion())
|
return newRuntimeVersion(typedVersion.GetRuntimeApiVersion())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user