From 7f4914c76a8b3407a004839e997babd90e109563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Martins?= Date: Tue, 24 Mar 2020 01:18:32 +0100 Subject: [PATCH 1/2] pkg/k8s: only update CRD if io.cilium.k8s.crd.schema.version is set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since only CNP and CCNP have io.cilium.k8s.crd.schema.version set, it does not make sense to check if other CRDs, for example CiliumNode and CiliumEndpoint, require an update of its CRD. This commit reduces the number of unnecessary updates of the CRD by 2 requests each time cilium-agent is created. Signed-off-by: André Martins --- pkg/k8s/apis/cilium.io/v2/register.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/k8s/apis/cilium.io/v2/register.go b/pkg/k8s/apis/cilium.io/v2/register.go index 7d777aa60e68..df9bd3df630a 100644 --- a/pkg/k8s/apis/cilium.io/v2/register.go +++ b/pkg/k8s/apis/cilium.io/v2/register.go @@ -533,7 +533,9 @@ func createUpdateCRD(clientset apiextensionsclient.Interface, CRDName string, cr } scopedLog.Debug("Checking if CRD (CustomResourceDefinition) needs update...") - if needsUpdate(clusterCRD) { + if crd.Spec.Validation != nil && + clusterCRD.Labels[CustomResourceDefinitionSchemaVersionKey] != "" && + needsUpdate(clusterCRD) { scopedLog.Info("Updating CRD (CustomResourceDefinition)...") // Update the CRD with the validation schema. err = wait.Poll(500*time.Millisecond, 60*time.Second, func() (bool, error) { From 34e370ec0252f425e7482ea1971dc527520a243f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Martins?= Date: Tue, 24 Mar 2020 01:21:14 +0100 Subject: [PATCH 2/2] pkg/k8s: to CRD get after checking for CRD status condition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We already have a CRD object in memory so we don't need to re-fetch it again, only in case the CRD Status condition is not Established that we need to refetch the CRD object to verify its status. Doing this reduced the number of unnecessary CRD GETs by 2 each time the cilium-agent is restarted. Signed-off-by: André Martins --- pkg/k8s/apis/cilium.io/v2/register.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/k8s/apis/cilium.io/v2/register.go b/pkg/k8s/apis/cilium.io/v2/register.go index df9bd3df630a..2458c67e1fc3 100644 --- a/pkg/k8s/apis/cilium.io/v2/register.go +++ b/pkg/k8s/apis/cilium.io/v2/register.go @@ -572,11 +572,7 @@ func createUpdateCRD(clientset apiextensionsclient.Interface, CRDName string, cr // wait for the CRD to be established scopedLog.Debug("Waiting for CRD (CustomResourceDefinition) to be available...") err = wait.Poll(500*time.Millisecond, 60*time.Second, func() (bool, error) { - crd, err := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Get(context.TODO(), crd.ObjectMeta.Name, metav1.GetOptions{}) - if err != nil { - return false, err - } - for _, cond := range crd.Status.Conditions { + for _, cond := range clusterCRD.Status.Conditions { switch cond.Type { case apiextensionsv1beta1.Established: if cond.Status == apiextensionsv1beta1.ConditionTrue { @@ -589,6 +585,10 @@ func createUpdateCRD(clientset apiextensionsclient.Interface, CRDName string, cr } } } + clusterCRD, err = clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Get(context.TODO(), crd.ObjectMeta.Name, metav1.GetOptions{}) + if err != nil { + return false, err + } return false, err }) if err != nil {