Skip to content

Commit

Permalink
Improve startup performance of IPAM by optimizing kube client creation (
Browse files Browse the repository at this point in the history
aws#1855)

* fix: improve startup performance of kube clients

* fix: improve startup performance of kube clients

* fix: improve startup performance of kube clients

* fix: improve startup performance of kube clients

* fix compile failure in cni-metrics-helper

Co-authored-by: M00nF1sh <yyyng@amazon.com>
  • Loading branch information
2 people authored and sushrk committed Jun 17, 2022
1 parent 0313a8f commit 494c5ab
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 9 deletions.
10 changes: 8 additions & 2 deletions cmd/aws-k8s-agent/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,19 @@ func _main() int {
return 1
}

rawK8SClient, err := k8sapi.CreateKubeClient()
mapper, err := k8sapi.InitializeRestMapper()
if err != nil {
log.Errorf("Failed to initialize kube client mapper: %s", err)
return 1
}

rawK8SClient, err := k8sapi.CreateKubeClient(mapper)
if err != nil {
log.Errorf("Failed to create kube client: %s", err)
return 1
}

cacheK8SClient, err := k8sapi.CreateCachedKubeClient(rawK8SClient)
cacheK8SClient, err := k8sapi.CreateCachedKubeClient(rawK8SClient, mapper)
if err != nil {
log.Errorf("Failed to create cached kube client: %s", err)
return 1
Expand Down
10 changes: 8 additions & 2 deletions cmd/cni-metrics-helper/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,18 @@ func main() {
os.Exit(1)
}

rawK8SClient, err := k8sapi.CreateKubeClient()
mapper, err := k8sapi.InitializeRestMapper()
if err != nil {
log.Errorf("Failed to initialize kube client mapper: %s", err)
os.Exit(1)
}

rawK8SClient, err := k8sapi.CreateKubeClient(mapper)
if err != nil {
log.Fatalf("Error creating Kubernetes Client: %s", err)
os.Exit(1)
}
k8sClient, err := k8sapi.CreateCachedKubeClient(rawK8SClient)
k8sClient, err := k8sapi.CreateCachedKubeClient(rawK8SClient, mapper)
if err != nil {
log.Fatalf("Error creating Cached Kubernetes Client: %s", err)
os.Exit(1)
Expand Down
29 changes: 24 additions & 5 deletions pkg/k8sapi/k8sutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@ import (
"os"
"time"

"k8s.io/apimachinery/pkg/api/meta"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"

eniconfigscheme "github.com/aws/amazon-vpc-cni-k8s/pkg/apis/crd/v1alpha1"
"github.com/aws/amazon-vpc-cni-k8s/pkg/utils/logger"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/kubernetes"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/cache"
Expand All @@ -19,8 +22,21 @@ import (

var log = logger.Get()

func InitializeRestMapper() (meta.RESTMapper, error) {
restCfg, err := ctrl.GetConfig()
restCfg.Burst = 200
if err != nil {
return nil, err
}
mapper, err := apiutil.NewDynamicRESTMapper(restCfg)
if err != nil {
return nil, err
}
return mapper, nil
}

// CreateKubeClient creates a k8s client
func CreateKubeClient() (client.Client, error) {
func CreateKubeClient(mapper meta.RESTMapper) (client.Client, error) {
restCfg, err := ctrl.GetConfig()
if err != nil {
return nil, err
Expand All @@ -29,7 +45,8 @@ func CreateKubeClient() (client.Client, error) {
clientgoscheme.AddToScheme(vpcCniScheme)
eniconfigscheme.AddToScheme(vpcCniScheme)

rawK8SClient, err := client.New(restCfg, client.Options{Scheme: vpcCniScheme})
rawK8SClient, err := client.New(restCfg, client.Options{Scheme: vpcCniScheme, Mapper: mapper})

if err != nil {
return nil, err
}
Expand All @@ -38,8 +55,10 @@ func CreateKubeClient() (client.Client, error) {
}

// CreateKubeClient creates a k8s client
func CreateCachedKubeClient(rawK8SClient client.Client) (client.Client, error) {
func CreateCachedKubeClient(rawK8SClient client.Client, mapper meta.RESTMapper) (client.Client, error) {
restCfg, err := ctrl.GetConfig()
restCfg.Burst = 100

if err != nil {
return nil, err
}
Expand All @@ -48,7 +67,7 @@ func CreateCachedKubeClient(rawK8SClient client.Client) (client.Client, error) {
eniconfigscheme.AddToScheme(vpcCniScheme)

stopChan := ctrl.SetupSignalHandler()
cache, err := cache.New(restCfg, cache.Options{Scheme: vpcCniScheme})
cache, err := cache.New(restCfg, cache.Options{Scheme: vpcCniScheme, Mapper: mapper})
if err != nil {
return nil, err
}
Expand Down

0 comments on commit 494c5ab

Please sign in to comment.