Merge pull request #34332 from resouer/cri-versioncache
Automatic merge from submit-queue Add version cache for cri APIVersion ref https://github.com/kubernetes/kubernetes/issues/29478 1. Added a version cache for `APIVersion()` by using object cache., with ttl=1 min 2. Leaving `Version()` as it is today
This commit is contained in:
		@@ -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())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user