diff --git a/apis/core/v1alpha2/core_workload_types.go b/apis/core/v1alpha2/core_workload_types.go index 9e4c3bf..857155b 100644 --- a/apis/core/v1alpha2/core_workload_types.go +++ b/apis/core/v1alpha2/core_workload_types.go @@ -426,6 +426,8 @@ type ContainerizedWorkloadSpec struct { // More info: https://kubernetes.io/docs/concepts/services-networking/service/ // +optional ServiceType corev1.ServiceType `json:"serviceType,omitempty"` + + ServiceAnnotation map[string]string `json:"serviceAnnotation,omitempty"` } type Dependency struct { diff --git a/apis/core/v1alpha2/zz_generated.deepcopy.go b/apis/core/v1alpha2/zz_generated.deepcopy.go index cfa1b9e..4d8251c 100644 --- a/apis/core/v1alpha2/zz_generated.deepcopy.go +++ b/apis/core/v1alpha2/zz_generated.deepcopy.go @@ -879,6 +879,13 @@ func (in *ContainerizedWorkloadSpec) DeepCopyInto(out *ContainerizedWorkloadSpec *out = make([]Dependency, len(*in)) copy(*out, *in) } + if in.ServiceAnnotation != nil { + in, out := &in.ServiceAnnotation, &out.ServiceAnnotation + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerizedWorkloadSpec. diff --git a/build.sh b/build.sh index 869c728..97d030e 100644 --- a/build.sh +++ b/build.sh @@ -37,8 +37,8 @@ if [ -z "$VERSION" ]; then fi if [ -z "$IMAGE_REPO" ]; then -# IMAGE_REPO='registry.cn-beijing.aliyuncs.com/launcher-agent-only-dev' - IMAGE_REPO='registry.cn-hangzhou.aliyuncs.com/launcher-agent-only-test' + IMAGE_REPO='registry.cn-beijing.aliyuncs.com/launcher-agent-only-dev' +# IMAGE_REPO='registry.cn-hangzhou.aliyuncs.com/launcher-agent-only-test' fi CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./bin/${BIN_FILE} ./main.go diff --git a/charts/oam-kubernetes-runtime/Chart.yaml b/charts/oam-kubernetes-runtime/Chart.yaml index 7fe12b1..067b8e9 100644 --- a/charts/oam-kubernetes-runtime/Chart.yaml +++ b/charts/oam-kubernetes-runtime/Chart.yaml @@ -1,4 +1,4 @@ -apiVersion: v1 +apiVersion: v2 name: oam-kubernetes-runtime description: A Helm chart for OAM Kubernetes Resources Controller @@ -14,8 +14,8 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. -version: 0.81.0 +version: 0.91.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. -appVersion: 0.1 +appVersion: 3.9.3 diff --git a/charts/oam-kubernetes-runtime/crds/core.oam.dev_containerizedworkloads.yaml b/charts/oam-kubernetes-runtime/crds/core.oam.dev_containerizedworkloads.yaml index 4339df7..2e6896b 100644 --- a/charts/oam-kubernetes-runtime/crds/core.oam.dev_containerizedworkloads.yaml +++ b/charts/oam-kubernetes-runtime/crds/core.oam.dev_containerizedworkloads.yaml @@ -855,6 +855,10 @@ spec: pointToGrayName: description: old grey workload name need modify match selector type: string + serviceAnnotation: + additionalProperties: + type: string + type: object serviceMesh: description: check add istio label type: boolean diff --git a/examples/workload-node-port/sample_component.yaml b/examples/workload-node-port/sample_component.yaml index 535896a..ab81495 100644 --- a/examples/workload-node-port/sample_component.yaml +++ b/examples/workload-node-port/sample_component.yaml @@ -7,7 +7,8 @@ spec: apiVersion: core.oam.dev/v1alpha2 kind: ContainerizedWorkload spec: - serviceType: LoadBalancer + forceUpdateTimestamp: 2022-05-31 03:51:49.22334519 +0000 UTC m=+6038.673245278 + serviceType: ClusterIP containers: - name: wordpress image: wordpress:4.6.1-apache @@ -16,7 +17,7 @@ spec: name: wordpress - containerPort: 81 name: xxx - # nodePort: 31234 + nodePort: 0 env: - name: TEST_ENV value: test diff --git a/pkg/controller/v1alpha2/core/workloads/containerizedworkload/containerizedworkload_controller.go b/pkg/controller/v1alpha2/core/workloads/containerizedworkload/containerizedworkload_controller.go index 92ca5c4..88a54b5 100644 --- a/pkg/controller/v1alpha2/core/workloads/containerizedworkload/containerizedworkload_controller.go +++ b/pkg/controller/v1alpha2/core/workloads/containerizedworkload/containerizedworkload_controller.go @@ -200,6 +200,10 @@ func (r *Reconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { // server side apply the service if err := r.applicator.Apply(ctx, service, applyOpts...); err != nil { klog.ErrorS(err, "Failed to apply a service") + delErr := r.Client.Delete(ctx, service) + if delErr != nil { + klog.ErrorS(delErr, "Failed to delete a service") + } r.record.Event(eventObj, event.Warning(errApplyService, err)) return util.ReconcileWaitResult, util.PatchCondition(ctx, r, &workload, cpv1alpha1.ReconcileError(errors.Wrap(err, errApplyService))) diff --git a/pkg/controller/v1alpha2/core/workloads/containerizedworkload/containerizedworkload_controller_helper.go b/pkg/controller/v1alpha2/core/workloads/containerizedworkload/containerizedworkload_controller_helper.go index 6c4afc5..050d719 100644 --- a/pkg/controller/v1alpha2/core/workloads/containerizedworkload/containerizedworkload_controller_helper.go +++ b/pkg/controller/v1alpha2/core/workloads/containerizedworkload/containerizedworkload_controller_helper.go @@ -85,16 +85,8 @@ func (r *Reconciler) renderService(ctx context.Context, if service == nil || len(service.Spec.Ports) == 0 { return nil, nil } - // the service injector lib doesn't set the namespace and serviceType service.Namespace = workload.Namespace - // k8s server-side patch complains if the protocol is not set - - for index, i := range service.Spec.Ports { - if i.Protocol == "" { - service.Spec.Ports[index].Protocol = corev1.ProtocolTCP - } - } - // always set the controller reference so that we can watch this service and + service.Annotations = workload.Spec.ServiceAnnotation if err := ctrl.SetControllerReference(workload, service, r.Scheme); err != nil { return nil, err } diff --git a/pkg/controller/v1alpha2/core/workloads/containerizedworkload/translate.go b/pkg/controller/v1alpha2/core/workloads/containerizedworkload/translate.go index 3f15fd1..c822df8 100644 --- a/pkg/controller/v1alpha2/core/workloads/containerizedworkload/translate.go +++ b/pkg/controller/v1alpha2/core/workloads/containerizedworkload/translate.go @@ -407,6 +407,7 @@ func ServiceInjector(_ context.Context, w *v1alpha2.ContainerizedWorkload, obj r for _, c := range container.Ports { svc.Spec.Ports = append(svc.Spec.Ports, corev1.ServicePort{ Name: fmt.Sprintf("cont-%d-%s", index, c.Name), + Protocol: corev1.ProtocolTCP, Port: c.Port, TargetPort: intstr.FromInt(int(c.Port)), NodePort: c.NodePort,