Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: core erda k8s labels #6323

Open
wants to merge 37 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
2bc8509
feat: new deployment labels
CeerDecy Mar 21, 2024
c648369
feat: set core/erda labels when apply or update deployment and service
CeerDecy Mar 21, 2024
b118db8
feat: merge daemon labels when update
CeerDecy Mar 25, 2024
eedb7ee
polish: remove useless code
CeerDecy Mar 26, 2024
699fc3a
Merge branch 'master' into feature/k8s-labels
CeerDecy Mar 27, 2024
78943b9
polish: maintaining labels constants
CeerDecy Mar 27, 2024
50e2f46
polish: warp merge labels
CeerDecy Mar 27, 2024
cbc1268
feat: pass monkey patch
CeerDecy Mar 27, 2024
0c8dc4c
feat: pass monkey patch
CeerDecy Mar 27, 2024
c44d8e6
Merge branch 'master' into feature/k8s-labels
CeerDecy May 31, 2024
64594b9
extract labels to labels.go
CeerDecy May 31, 2024
a09b3e7
feat: add service group id for service
CeerDecy May 31, 2024
201b63e
polish: improve unit testing
CeerDecy May 31, 2024
c4a0c68
polish: add license
CeerDecy May 31, 2024
f707585
polish: pass test action
CeerDecy Jun 4, 2024
93fcd91
polish: pass test action
CeerDecy Jun 4, 2024
e501e98
Merge branch 'master' into feature/k8s-labels
CeerDecy Jun 4, 2024
8b2cc71
polish: move the labels.go to the orchestrator directory
CeerDecy Jun 11, 2024
9181e05
polish: move the labels.go to the orchestrator directory
CeerDecy Jun 11, 2024
af8dd17
feat: adding new labels to the base addon
CeerDecy Jun 11, 2024
58cee3b
feat: adding new labels to the cluster addons
CeerDecy Jun 11, 2024
a9d27c6
Merge branch 'master' into feature/k8s-labels
CeerDecy Jun 11, 2024
42bca21
polish: solve circular references
CeerDecy Jun 11, 2024
c367c1e
feat: set tenant-id label for addons
CeerDecy Jun 11, 2024
440eeec
polish: remove useless code
CeerDecy Jun 11, 2024
793082d
feat: setting tenant-id for manually added Addons
CeerDecy Jun 12, 2024
a2c159a
feat: addon 'type' and 'version' labels
CeerDecy Jun 24, 2024
994efc4
fix: tenantResp.Data may be nil
CeerDecy Jul 1, 2024
76c506f
polish: remove useless code
CeerDecy Jul 1, 2024
f901870
polish: move 'GenerateTenantID' to the utils package
CeerDecy Jul 1, 2024
b565620
feat: patch QueryTenantByProjectIDAndWorkspace method to pass test
CeerDecy Jul 1, 2024
58ca797
fix: cluster addon sharescope label
CeerDecy Jul 5, 2024
1fc13c1
Merge branch 'master' into feature/k8s-labels
CeerDecy Aug 23, 2024
541063d
feat: merge tenantId
CeerDecy Aug 23, 2024
1dc74de
feat: erda label setter
CeerDecy Aug 27, 2024
470db8c
feat: sort imports
CeerDecy Aug 27, 2024
f6fb151
feat: pass test
CeerDecy Aug 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,35 @@ func (k *Kubernetes) updateDaemonSet(ctx context.Context, ds *appsv1.DaemonSet,
return errors.New(reason)
}
}
err = k.mergeDaemonLabels(ds)
CeerDecy marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
logrus.Errorf("failed to merge daemonset labels, name: %s, (%v)", service.Name, err)
return errors.Errorf("failed to merge daemonset labels, name: %s, (%v)", service.Name, err)
}
return k.ds.Update(ds)
}

func (k *Kubernetes) mergeDaemonLabels(ds *appsv1.DaemonSet) error {
oldDaemon, err := k.getDaemonSet(ds.Namespace, ds.Name)
if err != nil {
return err
}
for key, value := range oldDaemon.Labels {
if _, ok := ds.Labels[key]; ok {
continue
}
ds.Labels[key] = value
}

for key, value := range oldDaemon.Spec.Template.Labels {
if _, ok := ds.Spec.Template.Labels[key]; ok {
continue
}
ds.Spec.Template.Labels[key] = value
}
return nil
}

func (k *Kubernetes) getDaemonSetDeltaResource(ctx context.Context, ds *appsv1.DaemonSet) (deltaCPU, deltaMemory int64, err error) {
oldDs, err := k.k8sClient.ClientSet.AppsV1().DaemonSets(ds.Namespace).Get(ctx, ds.Name, metav1.GetOptions{})
if err != nil {
Expand Down Expand Up @@ -244,13 +270,6 @@ func (k *Kubernetes) newDaemonSet(service *apistructs.Service, sg *apistructs.Se
}
podAnnotations(service, daemonset.Spec.Template.Annotations)

// inherit Labels from service.Labels and service.DeploymentLabels
err = inheritDaemonsetLabels(service, daemonset)
if err != nil {
logrus.Errorf("failed to set labels for service %s for Pod with error: %v\n", service.Name, err)
return nil, err
}

// set pod Annotations from service.Labels and service.DeploymentLabels
setPodAnnotationsFromLabels(service, daemonset.Spec.Template.Annotations)

Expand Down Expand Up @@ -289,6 +308,17 @@ func (k *Kubernetes) newDaemonSet(service *apistructs.Service, sg *apistructs.Se

SetPodAnnotationsBaseContainerEnvs(daemonset.Spec.Template.Spec.Containers[0], daemonset.Spec.Template.Annotations)

err = setCoreErdaLabels(sg, service, daemonset.Labels)
if err != nil {
logrus.Errorf("daemonset can't set core/erda labels, err: %v", err)
return nil, err
}
err = setCoreErdaLabels(sg, service, daemonset.Spec.Template.Labels)
if err != nil {
logrus.Errorf("daemonset template can't set core/erda labels, err: %v", err)
return nil, err
}

secrets, err := k.CopyErdaSecrets("secret", service.Namespace)
if err != nil {
logrus.Errorf("failed to copy secret: %v", err)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,11 @@ func (k *Kubernetes) putDeployment(ctx context.Context, deployment *appsv1.Deplo
}
}

err = k.mergeDeployLabels(deployment)
if err != nil {
return errors.Errorf("failed to merge deployment labels, name: %s, (%v)", service.Name, err)
}

err = k.deploy.Put(deployment)
if err != nil {
return errors.Errorf("failed to update deployment, name: %s, (%v)", service.Name, err)
Expand All @@ -178,6 +183,27 @@ func (k *Kubernetes) putDeployment(ctx context.Context, deployment *appsv1.Deplo
return nil
}

func (k *Kubernetes) mergeDeployLabels(deployment *appsv1.Deployment) error {
oldDeploy, err := k.deploy.Get(deployment.Namespace, deployment.Name)
if err != nil {
return err
}
for key, value := range oldDeploy.Labels {
if _, ok := deployment.Labels[key]; ok {
continue
}
deployment.Labels[key] = value
}

for key, value := range oldDeploy.Spec.Template.Labels {
if _, ok := deployment.Spec.Template.Labels[key]; ok {
continue
}
deployment.Spec.Template.Labels[key] = value
}
return nil
}

func (k *Kubernetes) getDeploymentDeltaResource(ctx context.Context, deploy *appsv1.Deployment) (deltaCPU, deltaMemory int64, err error) {
oldDeploy, err := k.k8sClient.ClientSet.AppsV1().Deployments(deploy.Namespace).Get(ctx, deploy.Name, metav1.GetOptions{})
if err != nil {
Expand Down Expand Up @@ -616,13 +642,6 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap
}
podAnnotations(service, deployment.Spec.Template.Annotations)

// inherit Labels from service.Labels and service.DeploymentLabels
err = inheritDeploymentLabels(service, deployment)
if err != nil {
logrus.Errorf("failed to set labels for service %s for Pod with error: %v\n", service.Name, err)
return nil, err
}

// set pod Annotations from service.Labels and service.DeploymentLabels
setPodAnnotationsFromLabels(service, deployment.Spec.Template.Annotations)

Expand Down Expand Up @@ -660,6 +679,17 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap

SetPodAnnotationsBaseContainerEnvs(deployment.Spec.Template.Spec.Containers[0], deployment.Spec.Template.Annotations)

err = setCoreErdaLabels(serviceGroup, service, deployment.Labels)
CeerDecy marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
logrus.Errorf("deployment can't set core/erda labels, err: %v", err)
return nil, err
}
err = setCoreErdaLabels(serviceGroup, service, deployment.Spec.Template.Labels)
if err != nil {
logrus.Errorf("deployment template can't set core/erda labels, err: %v", err)
return nil, err
}

// TODO: Delete this logic
//Mobil temporary demand:
// Inject the secret under the "secret" namespace into the business container
Expand Down Expand Up @@ -691,6 +721,36 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap
return deployment, nil
}

func setCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error {
if labels == nil {
return nil
}
if service != nil {
labels["core.erda.cloud/cluster-name"] = service.Labels["DICE_CLUSTER_NAME"]
CeerDecy marked this conversation as resolved.
Show resolved Hide resolved
labels["core.erda.cloud/org-id"] = service.Labels["DICE_ORG_ID"]
labels["core.erda.cloud/org-name"] = service.Labels["DICE_ORG_NAME"]
labels["core.erda.cloud/app-id"] = service.Labels["DICE_APPLICATION_ID"]
labels["core.erda.cloud/app-name"] = service.Labels["DICE_APPLICATION_NAME"]
labels["core.erda.cloud/project-id"] = service.Labels["DICE_PROJECT_ID"]
labels["core.erda.cloud/project-name"] = service.Labels["DICE_PROJECT_NAME"]
labels["core.erda.cloud/runtime-id"] = service.Labels["DICE_RUNTIME_ID"]
labels["core.erda.cloud/service-name"] = service.Labels["DICE_SERVICE_NAME"]
labels["core.erda.cloud/workspace"] = service.Labels["DICE_WORKSPACE"]
labels["core.erda.cloud/service-type"] = service.Labels["SERVICE_TYPE"]
publicHost := make(map[string]string)
err := json.Unmarshal([]byte(service.Env["PUBLIC_HOST"]), &publicHost)
if err != nil {
return err
}
labels["monitor.erda.cloud/tenant-id"] = publicHost["terminusKey"]
}

if sg != nil {
labels["core.erda.cloud/servicegroup-id"] = sg.ID
}
return nil
}

func (k *Kubernetes) generateInitContainer(initcontainers map[string]diceyml.InitContainer) []corev1.Container {
containers := []corev1.Container{}
if initcontainers == nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,6 @@ func newService(service *apistructs.Service, selectors map[string]string) *apiv1
if len(service.Ports) == 0 {
return nil
}

k8sService := &apiv1.Service{
TypeMeta: metav1.TypeMeta{
APIVersion: "v1",
Expand Down Expand Up @@ -153,6 +152,12 @@ func newService(service *apistructs.Service, selectors map[string]string) *apiv1
}
}

err := setCoreErdaLabels(nil, service, k8sService.Labels)
CeerDecy marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
logrus.Error(err)
return k8sService
}

for i, port := range service.Ports {
k8sService.Spec.Ports = append(k8sService.Spec.Ports, apiv1.ServicePort{
// TODO: name?
Expand Down Expand Up @@ -341,7 +346,10 @@ func (k *Kubernetes) UpdateK8sService(k8sService *apiv1.Service, service *apistr

setServiceLabelSelector(k8sService, selectors)
k8sService.Spec.Ports = newPorts

err := setCoreErdaLabels(nil, service, k8sService.Labels)
if err != nil {
return fmt.Errorf("can't set erda labels")
}
if err := k.PutService(k8sService); err != nil {
errMsg := fmt.Sprintf("update service err %v", err)
logrus.Error(errMsg)
Expand Down
Loading