Skip to content

Commit 25094ad

Browse files
TomatoAresCui Shuaijie
and
Cui Shuaijie
authored
fix(addon): decouple addon with provider (#1552)
Co-authored-by: Cui Shuaijie <[email protected]>
1 parent ee6eafd commit 25094ad

File tree

8 files changed

+228
-132
lines changed

8 files changed

+228
-132
lines changed

Diff for: pkg/logagent/util/cluster.go

+3-60
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,14 @@ import (
3131

3232
"k8s.io/apimachinery/pkg/api/errors"
3333
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
34-
"k8s.io/apimachinery/pkg/fields"
3534
"k8s.io/apiserver/pkg/endpoints/request"
3635
"k8s.io/client-go/kubernetes"
3736

3837
platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1"
39-
"tkestack.io/tke/api/platform"
4038
platformv1 "tkestack.io/tke/api/platform/v1"
4139
v1platform "tkestack.io/tke/api/platform/v1"
4240
"tkestack.io/tke/pkg/platform/util"
41+
"tkestack.io/tke/pkg/platform/util/addon"
4342
"tkestack.io/tke/pkg/util/log"
4443
)
4544

@@ -60,7 +59,7 @@ func GetClusterClient(ctx context.Context, clusterName string, platformClient pl
6059
ClusterNameToClient.Delete(clusterName)
6160
}
6261

63-
kubeClient, err := BuildExternalClientSetWithName(ctx, platformClient, clusterName)
62+
kubeClient, err := addon.BuildExternalClientSetWithName(ctx, platformClient, clusterName)
6463
if err != nil {
6564
return nil, err
6665
}
@@ -84,7 +83,7 @@ func APIServerLocationByCluster(ctx context.Context, clusterName string, platfor
8483
if cluster.Status.Phase != v1platform.ClusterRunning {
8584
return nil, nil, "", errors.NewServiceUnavailable(fmt.Sprintf("cluster %s status is abnormal", cluster.ObjectMeta.Name))
8685
}
87-
credential, err := GetClusterCredentialV1(ctx, platformClient, cluster)
86+
credential, err := addon.GetClusterCredentialV1(ctx, platformClient, cluster)
8887
if err != nil {
8988
log.Errorf("unable to get credential %v", err)
9089
return nil, nil, "", err
@@ -174,59 +173,3 @@ func rootCertPool(caData []byte) *x509.CertPool {
174173
certPool.AppendCertsFromPEM(caData)
175174
return certPool
176175
}
177-
178-
// BuildExternalClientSetWithName creates the clientset of kubernetes by given cluster
179-
// name and returns it.
180-
func BuildExternalClientSetWithName(ctx context.Context, platformClient platformversionedclient.PlatformV1Interface, name string) (*kubernetes.Clientset, error) {
181-
cluster, err := platformClient.Clusters().Get(ctx, name, metav1.GetOptions{})
182-
if err != nil {
183-
return nil, err
184-
}
185-
clientset, err := BuildExternalClientSet(ctx, cluster, platformClient)
186-
if err != nil {
187-
return nil, err
188-
}
189-
return clientset, nil
190-
}
191-
192-
// BuildExternalClientSet creates the clientset of kubernetes by given cluster object and returns it.
193-
func BuildExternalClientSet(ctx context.Context, cluster *platformv1.Cluster, client platformversionedclient.PlatformV1Interface) (*kubernetes.Clientset, error) {
194-
credential, err := GetClusterCredentialV1(ctx, client, cluster)
195-
if err != nil {
196-
return nil, err
197-
}
198-
199-
if cluster.Status.Locked != nil && *cluster.Status.Locked {
200-
return nil, fmt.Errorf("cluster %s has been locked", cluster.ObjectMeta.Name)
201-
}
202-
203-
return util.BuildVersionedClientSet(cluster, credential)
204-
}
205-
206-
// GetClusterCredentialV1 returns the versioned cluster's credential
207-
func GetClusterCredentialV1(ctx context.Context, client platformversionedclient.PlatformV1Interface, cluster *platformv1.Cluster) (*platformv1.ClusterCredential, error) {
208-
var (
209-
credential *platformv1.ClusterCredential
210-
err error
211-
)
212-
213-
if cluster.Spec.ClusterCredentialRef != nil {
214-
credential, err = client.ClusterCredentials().Get(ctx, cluster.Spec.ClusterCredentialRef.Name, metav1.GetOptions{})
215-
if err != nil && !errors.IsNotFound(err) {
216-
return nil, err
217-
}
218-
} else {
219-
clusterName := cluster.Name
220-
fieldSelector := fields.OneTermEqualSelector("clusterName", clusterName).String()
221-
clusterCredentials, err := client.ClusterCredentials().List(ctx, metav1.ListOptions{FieldSelector: fieldSelector})
222-
if err != nil {
223-
return nil, err
224-
}
225-
if len(clusterCredentials.Items) == 0 {
226-
return nil, errors.NewNotFound(platform.Resource("ClusterCredential"), clusterName)
227-
}
228-
credential = &clusterCredentials.Items[0]
229-
}
230-
231-
return credential, nil
232-
}

Diff for: pkg/monitor/controller/prometheus/controller.go

+15-18
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"strings"
2828
"sync"
2929
"time"
30+
"tkestack.io/tke/pkg/platform/util/addon"
3031

3132
"github.com/coreos/prometheus-operator/pkg/apis/monitoring"
3233
monitoringv1 "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1"
@@ -49,6 +50,7 @@ import (
4950
"k8s.io/client-go/tools/cache"
5051
"k8s.io/client-go/util/workqueue"
5152
apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
53+
5254
clientset "tkestack.io/tke/api/client/clientset/versioned"
5355
platformv1client "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1"
5456
monitorv1informer "tkestack.io/tke/api/client/informers/externalversions/monitor/v1"
@@ -60,8 +62,6 @@ import (
6062
"tkestack.io/tke/pkg/monitor/controller/prometheus/images"
6163
esutil "tkestack.io/tke/pkg/monitor/storage/es/client"
6264
monitorutil "tkestack.io/tke/pkg/monitor/util"
63-
clusterprovider "tkestack.io/tke/pkg/platform/provider/cluster"
64-
platformutil "tkestack.io/tke/pkg/platform/util"
6565
"tkestack.io/tke/pkg/util/apiclient"
6666
containerregistryutil "tkestack.io/tke/pkg/util/containerregistry"
6767
utilhttp "tkestack.io/tke/pkg/util/http"
@@ -601,22 +601,22 @@ func (c *Controller) installPrometheus(ctx context.Context, prometheus *v1.Prome
601601
if err != nil {
602602
return fmt.Errorf("get cluster failed: %v", err)
603603
}
604-
kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient)
604+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient)
605605
if err != nil {
606606
return fmt.Errorf("get kubeClient failed: %v", err)
607607
}
608608

609-
crdClient, err := platformutil.BuildExternalExtensionClientSet(ctx, cluster, c.platformClient)
609+
crdClient, err := addon.BuildExternalExtensionClientSet(ctx, cluster, c.platformClient)
610610
if err != nil {
611611
return fmt.Errorf("get crdClient failed: %v", err)
612612
}
613613

614-
kaClient, err := platformutil.BuildKubeAggregatorClientSet(ctx, cluster, c.platformClient)
614+
kaClient, err := addon.BuildKubeAggregatorClientSet(ctx, cluster, c.platformClient)
615615
if err != nil {
616616
return fmt.Errorf("get kaClient failed: %v", err)
617617
}
618618

619-
mclient, err := platformutil.BuildExternalMonitoringClientSet(ctx, cluster, c.platformClient)
619+
mclient, err := addon.BuildExternalMonitoringClientSet(ctx, cluster, c.platformClient)
620620
if err != nil {
621621
return fmt.Errorf("get mclient failed: %v", err)
622622
}
@@ -737,12 +737,9 @@ func (c *Controller) installPrometheus(ctx context.Context, prometheus *v1.Prome
737737
prometheus.Status.SubVersion[AlertManagerService] = components.AlertManagerService.Tag
738738

739739
log.Infof("Start to create prometheus")
740-
provider, err := clusterprovider.GetProvider(cluster.Spec.Type)
741-
if err != nil {
742-
return fmt.Errorf("get provider failed: %v", err)
743-
}
740+
744741
// Secret for prometheus-etcd
745-
credential, err := provider.GetClusterCredentialV1(ctx, c.platformClient, cluster, clusterprovider.AdminUsername)
742+
credential, err := addon.GetClusterCredentialV1(ctx, c.platformClient, cluster)
746743
if err != nil {
747744
return fmt.Errorf("get credential failed: %v", err)
748745
}
@@ -2613,22 +2610,22 @@ func (c *Controller) uninstallPrometheus(ctx context.Context, prometheus *v1.Pro
26132610
if err != nil {
26142611
return err
26152612
}
2616-
kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient)
2613+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient)
26172614
if err != nil {
26182615
return err
26192616
}
26202617

2621-
kaClient, err := platformutil.BuildKubeAggregatorClientSet(ctx, cluster, c.platformClient)
2618+
kaClient, err := addon.BuildKubeAggregatorClientSet(ctx, cluster, c.platformClient)
26222619
if err != nil {
26232620
return fmt.Errorf("get kaClient failed: %v", err)
26242621
}
26252622

2626-
crdClient, err := platformutil.BuildExternalExtensionClientSet(ctx, cluster, c.platformClient)
2623+
crdClient, err := addon.BuildExternalExtensionClientSet(ctx, cluster, c.platformClient)
26272624
if err != nil {
26282625
return err
26292626
}
26302627

2631-
mclient, err := platformutil.BuildExternalMonitoringClientSet(ctx, cluster, c.platformClient)
2628+
mclient, err := addon.BuildExternalMonitoringClientSet(ctx, cluster, c.platformClient)
26322629
if err != nil {
26332630
return err
26342631
}
@@ -2919,7 +2916,7 @@ func (c *Controller) watchPrometheusHealth(ctx context.Context, key string) func
29192916
log.Info("Prometheus health check over", log.String("prome", key))
29202917
return true, nil
29212918
}
2922-
kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient)
2919+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient)
29232920
if err != nil {
29242921
return false, err
29252922
}
@@ -2952,7 +2949,7 @@ func (c *Controller) checkPrometheusStatus(ctx context.Context, prometheus *v1.P
29522949
log.Info("Prometheus status checking over", log.String("prome", key))
29532950
return true, nil
29542951
}
2955-
kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient)
2952+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient)
29562953
if err != nil {
29572954
return false, err
29582955
}
@@ -2999,7 +2996,7 @@ func (c *Controller) checkPrometheusUpgrade(ctx context.Context, prometheus *v1.
29992996
log.Info("Prometheus upgrade over", log.String("prome", key))
30002997
return true, nil
30012998
}
3002-
kubeClient, err := platformutil.BuildExternalClientSet(ctx, cluster, c.platformClient)
2999+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.platformClient)
30033000
if err != nil {
30043001
return false, err
30053002
}

Diff for: pkg/monitor/util/cache/cache.go

+10-14
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,21 @@ import (
2626
"sync/atomic"
2727
"time"
2828

29+
corev1 "k8s.io/api/core/v1"
30+
"k8s.io/apimachinery/pkg/api/errors"
31+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
32+
"k8s.io/apimachinery/pkg/runtime/schema"
33+
"k8s.io/client-go/kubernetes"
34+
metricsv "k8s.io/metrics/pkg/client/clientset/versioned"
35+
2936
businessversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/business/v1"
3037
platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1"
3138
"tkestack.io/tke/api/monitor"
3239
platformv1 "tkestack.io/tke/api/platform/v1"
3340
"tkestack.io/tke/pkg/monitor/util"
34-
clusterprovider "tkestack.io/tke/pkg/platform/provider/cluster"
3541
platformutil "tkestack.io/tke/pkg/platform/util"
42+
"tkestack.io/tke/pkg/platform/util/addon"
3643
"tkestack.io/tke/pkg/util/log"
37-
38-
corev1 "k8s.io/api/core/v1"
39-
"k8s.io/apimachinery/pkg/api/errors"
40-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
41-
"k8s.io/apimachinery/pkg/runtime/schema"
42-
"k8s.io/client-go/kubernetes"
43-
metricsv "k8s.io/metrics/pkg/client/clientset/versioned"
4444
)
4545

4646
type updateComponent func(componentStatus *corev1.ComponentStatus, health *util.ComponentHealth)
@@ -170,7 +170,7 @@ func (c *cacher) getClusters(ctx context.Context) {
170170
})
171171
return
172172
}
173-
clientSet, err := platformutil.BuildExternalClientSet(ctx, &cls, c.platformClient)
173+
clientSet, err := addon.BuildExternalClientSet(ctx, &cls, c.platformClient)
174174
if err != nil {
175175
log.Error("create clientSet of cluster failed",
176176
log.Any("cluster", clusterID), log.Err(err))
@@ -281,11 +281,7 @@ func (c *cacher) getClusters(ctx context.Context) {
281281
}
282282

283283
func (c *cacher) getMetricServerClientSet(ctx context.Context, cls *platformv1.Cluster) (*metricsv.Clientset, error) {
284-
provider, err := clusterprovider.GetProvider(cls.Spec.Type)
285-
if err != nil {
286-
return nil, err
287-
}
288-
cc, err := provider.GetClusterCredentialV1(ctx, c.platformClient, cls, clusterprovider.AdminUsername)
284+
cc, err := addon.GetClusterCredentialV1(ctx, c.platformClient, cls)
289285
if err != nil {
290286
log.Error("query cluster credential failed", log.Any("cluster", cls.GetName()), log.Err(err))
291287
return nil, err

Diff for: pkg/monitor/util/cluster.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,11 @@ import (
2929
influxclient "github.com/influxdata/influxdb1-client/v2"
3030
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3131
"k8s.io/client-go/kubernetes"
32+
3233
platformversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/platform/v1"
3334
esclient "tkestack.io/tke/pkg/monitor/storage/es/client"
3435
"tkestack.io/tke/pkg/platform/util"
36+
"tkestack.io/tke/pkg/platform/util/addon"
3537
)
3638

3739
const (
@@ -83,7 +85,7 @@ func GetMonitoringClient(ctx context.Context, clusterName string, platformClient
8385
ClusterNameToClient.Delete(clusterName)
8486
}
8587

86-
monitoringClient, err := util.BuildExternalMonitoringClientSetWithName(ctx, platformClient, clusterName)
88+
monitoringClient, err := addon.BuildExternalMonitoringClientSetWithName(ctx, platformClient, clusterName)
8789
if err != nil {
8890
return nil, err
8991
}

Diff for: pkg/platform/controller/addon/logcollector/controller.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ import (
3030
platformv1informer "tkestack.io/tke/api/client/informers/externalversions/platform/v1"
3131
platformv1lister "tkestack.io/tke/api/client/listers/platform/v1"
3232
controllerutil "tkestack.io/tke/pkg/controller"
33-
"tkestack.io/tke/pkg/logagent/util"
3433
"tkestack.io/tke/pkg/platform/controller/addon/logcollector/images"
34+
"tkestack.io/tke/pkg/platform/util/addon"
3535
"tkestack.io/tke/pkg/util/metrics"
3636

3737
appsv1 "k8s.io/api/apps/v1"
@@ -423,7 +423,7 @@ func (c *Controller) installLogCollector(ctx context.Context, LogCollector *v1.L
423423
if err != nil {
424424
return err
425425
}
426-
kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
426+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
427427
if err != nil {
428428
return err
429429
}
@@ -653,7 +653,7 @@ func (c *Controller) uninstallLogCollector(ctx context.Context, LogCollector *v1
653653
if err != nil {
654654
return err
655655
}
656-
kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
656+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
657657
if err != nil {
658658
return err
659659
}
@@ -722,7 +722,7 @@ func (c *Controller) watchLogCollectorHealth(ctx context.Context, key string) fu
722722
return true, nil
723723
}
724724

725-
kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
725+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
726726
if err != nil {
727727
return false, err
728728
}
@@ -763,7 +763,7 @@ func (c *Controller) checkLogCollectorStatus(
763763
return true, nil
764764
}
765765

766-
kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
766+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
767767
if err != nil {
768768
return false, err
769769
}
@@ -818,7 +818,7 @@ func (c *Controller) upgradeLogCollector(
818818
return true, nil
819819
}
820820

821-
kubeClient, err := util.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
821+
kubeClient, err := addon.BuildExternalClientSet(ctx, cluster, c.client.PlatformV1())
822822
if err != nil {
823823
return false, err
824824
}

0 commit comments

Comments
 (0)