This is an automated email from the ASF dual-hosted git repository.
mikexue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/eventmesh.git
The following commit(s) were added to refs/heads/master by this push:
new ad2a41c4a [ISSUE #4694] Component initialization order adjustment, add
resource constraints. (#4693)
ad2a41c4a is described below
commit ad2a41c4a4f20ce4f37e8b098e493cde69eeb68b
Author: Alonexc <[email protected]>
AuthorDate: Thu Jan 18 20:32:40 2024 +0800
[ISSUE #4694] Component initialization order adjustment, add resource
constraints. (#4693)
* resources describes the compute resource requirements and limits
、component initialization order rules and DNS.
* add license and update runtime resources
* update runtime_controller.go
* update
* deployment operator, commands simplified.
* update
* update
* update
* update
---
eventmesh-operator/api/v1/connectors_types.go | 4 +++
.../eventmesh-operator.eventmesh_connectors.yaml | 6 +++++
.../samples/eventmesh_v1_connectors_rocketmq.yaml | 10 ++++++++
.../config/samples/eventmesh_v1_runtime.yaml | 23 ++++++++++++++++-
.../eventmesh_connectors/connectors_controller.go | 15 ++++++++++-
.../eventmesh_runtime/runtime_controller.go | 22 ++++++++++++++--
eventmesh-operator/share/share.go | 30 ++++++++++++++++++++++
7 files changed, 106 insertions(+), 4 deletions(-)
diff --git a/eventmesh-operator/api/v1/connectors_types.go
b/eventmesh-operator/api/v1/connectors_types.go
index a15af4c85..0e6f9026f 100644
--- a/eventmesh-operator/api/v1/connectors_types.go
+++ b/eventmesh-operator/api/v1/connectors_types.go
@@ -35,6 +35,10 @@ type ConnectorsSpec struct {
Size int `json:"size"`
// ConnectorContainers define some configuration
ConnectorContainers []corev1.Container `json:"connectorContainers"`
+ // HostNetwork can be true or false
+ HostNetwork bool `json:"hostNetwork,omitempty"`
+ // DNSPolicy Set DNS policy for the pod.
+ DNSPolicy corev1.DNSPolicy `json:"dnsPolicy,omitempty"`
// Volumes define the connector config
Volumes []corev1.Volume `json:"volumes"`
// ImagePullPolicy defines how the image is pulled
diff --git
a/eventmesh-operator/config/crd/bases/eventmesh-operator.eventmesh_connectors.yaml
b/eventmesh-operator/config/crd/bases/eventmesh-operator.eventmesh_connectors.yaml
index 863733b30..c62dbd8c5 100644
---
a/eventmesh-operator/config/crd/bases/eventmesh-operator.eventmesh_connectors.yaml
+++
b/eventmesh-operator/config/crd/bases/eventmesh-operator.eventmesh_connectors.yaml
@@ -2266,6 +2266,12 @@ spec:
type: string
type: object
type: object
+ dnsPolicy:
+ description: DNSPolicy Set DNS policy for the pod.
+ type: string
+ hostNetwork:
+ description: HostNetwork can be true or false
+ type: boolean
imagePullPolicy:
description: ImagePullPolicy defines how the image is pulled
type: string
diff --git
a/eventmesh-operator/config/samples/eventmesh_v1_connectors_rocketmq.yaml
b/eventmesh-operator/config/samples/eventmesh_v1_connectors_rocketmq.yaml
index 6ef8724eb..96cff0845 100644
--- a/eventmesh-operator/config/samples/eventmesh_v1_connectors_rocketmq.yaml
+++ b/eventmesh-operator/config/samples/eventmesh_v1_connectors_rocketmq.yaml
@@ -72,6 +72,8 @@ spec:
size: 1
# imagePullPolicy is the image pull policy
imagePullPolicy: Always
+ # set DNS policy for the pod
+ # dnsPolicy: ClusterFirstWithHostNet
# define the connector-rocketmq container.
connectorContainers:
- name: connector-rocketmq
@@ -81,6 +83,14 @@ spec:
volumeMounts:
- mountPath: "/data/app/eventmesh-connector-rocketmq/conf"
name: connector-rocketmq-config
+ # resources describes the compute resource requirements and limits
+ resources:
+ requests:
+ memory: 512Mi
+ cpu: 250m
+ limits:
+ memory: 1024Mi
+ cpu: 1000m
# configuration file settings to be mounted.
volumes:
- name: connector-rocketmq-config
diff --git a/eventmesh-operator/config/samples/eventmesh_v1_runtime.yaml
b/eventmesh-operator/config/samples/eventmesh_v1_runtime.yaml
index 9d675a634..ee94d606f 100644
--- a/eventmesh-operator/config/samples/eventmesh_v1_runtime.yaml
+++ b/eventmesh-operator/config/samples/eventmesh_v1_runtime.yaml
@@ -23,6 +23,10 @@ data:
rocketmq.properties: |
#######################rocketmq-client##################
eventMesh.server.rocketmq.namesrvAddr=127.0.0.1:9876;127.0.0.1:9876
+ eventMesh.server.rocketmq.cluster=DefaultCluster
+ eventMesh.server.rocketmq.accessKey=********
+ eventMesh.server.rocketmq.secretKey=********
+
eventmesh.properties: |
###############################EVNETMESH-runtime
ENV#################################
eventMesh.server.idc=DEFAULT
@@ -254,7 +258,16 @@ spec:
runtimePodTemplate:
template:
spec:
- # hostNetwork: true
+ # Host networking requested for this pod. Use the host's network
namespace.
+ # If this option is set, the ports that will be used must be specified.
+ # Default to false.
+ hostNetwork: false
+ # Defaults to "ClusterFirst"
+ # Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst',
'Default' or 'None'.
+ # DNS parameters given in DNSConfig will be merged with the policy
selected with DNSPolicy.
+ # To have DNS options set along with hostNetwork, you have to specify
DNS policy
+ # explicitly to 'ClusterFirstWithHostNet'.
+ dnsPolicy: ClusterFirstWithHostNet
# define the runtime container.
containers:
- name: eventmesh-runtime
@@ -271,6 +284,14 @@ spec:
name: runtime-config
# imagePullPolicy is the image pull policy
imagePullPolicy: Always
+ # resources describes the compute resource requirements and limits
+ resources:
+ requests:
+ memory: 2048Mi
+ cpu: 2000m
+ limits:
+ memory: 8192Mi
+ cpu: 8000m
# configuration file settings to be mounted.
volumes:
- name: runtime-config
diff --git
a/eventmesh-operator/controllers/eventmesh_connectors/connectors_controller.go
b/eventmesh-operator/controllers/eventmesh_connectors/connectors_controller.go
index d554cbefe..dd5850cef 100644
---
a/eventmesh-operator/controllers/eventmesh_connectors/connectors_controller.go
+++
b/eventmesh-operator/controllers/eventmesh_connectors/connectors_controller.go
@@ -21,6 +21,7 @@ import (
"context"
"fmt"
eventmeshoperatorv1
"github.com/apache/eventmesh/eventmesh-operator/api/v1"
+ "github.com/apache/eventmesh/eventmesh-operator/share"
"github.com/go-logr/logr"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
@@ -123,6 +124,15 @@ func (r ConnectorsReconciler) Reconcile(ctx
context.Context, req reconcile.Reque
return reconcile.Result{}, err
}
+ for {
+ if share.IsEventMeshRuntimeInitialized {
+ break
+ } else {
+ r.Logger.Info("connector Waiting for runtime ready...")
+
time.Sleep(time.Duration(share.WaitForRuntimePodNameReadyInSecond) *
time.Second)
+ }
+ }
+
connectorStatefulSet := r.getConnectorStatefulSet(connector)
// Check if the statefulSet already exists, if not create a new one
found := &appsv1.StatefulSet{}
@@ -192,7 +202,7 @@ func (r ConnectorsReconciler) Reconcile(ctx
context.Context, req reconcile.Reque
}
r.Logger.Info("Successful reconciliation!")
- return reconcile.Result{}, nil
+ return reconcile.Result{Requeue: true, RequeueAfter:
time.Duration(share.RequeueAfterSecond) * time.Second}, nil
}
func (r ConnectorsReconciler) getConnectorStatefulSet(connector
*eventmeshoperatorv1.Connectors) *appsv1.StatefulSet {
@@ -217,6 +227,8 @@ func (r ConnectorsReconciler)
getConnectorStatefulSet(connector *eventmeshoperat
Labels: getLabels(),
},
Spec: corev1.PodSpec{
+ HostNetwork:
connector.Spec.HostNetwork,
+ DNSPolicy:
connector.Spec.DNSPolicy,
ServiceAccountName:
connector.Spec.ServiceAccountName,
Affinity:
connector.Spec.Affinity,
Tolerations:
connector.Spec.Tolerations,
@@ -224,6 +236,7 @@ func (r ConnectorsReconciler)
getConnectorStatefulSet(connector *eventmeshoperat
PriorityClassName:
connector.Spec.PriorityClassName,
ImagePullSecrets:
connector.Spec.ImagePullSecrets,
Containers: []corev1.Container{{
+ Resources:
connector.Spec.ConnectorContainers[0].Resources,
Image:
connector.Spec.ConnectorContainers[0].Image,
Name:
connector.Spec.ConnectorContainers[0].Name,
SecurityContext:
getConnectorContainerSecurityContext(connector),
diff --git
a/eventmesh-operator/controllers/eventmesh_runtime/runtime_controller.go
b/eventmesh-operator/controllers/eventmesh_runtime/runtime_controller.go
index 731ef8c55..7bff28c36 100644
--- a/eventmesh-operator/controllers/eventmesh_runtime/runtime_controller.go
+++ b/eventmesh-operator/controllers/eventmesh_runtime/runtime_controller.go
@@ -21,6 +21,7 @@ import (
"context"
"fmt"
eventmeshoperatorv1
"github.com/apache/eventmesh/eventmesh-operator/api/v1"
+ "github.com/apache/eventmesh/eventmesh-operator/share"
"github.com/go-logr/logr"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
@@ -232,8 +233,24 @@ func (r *RuntimeReconciler) Reconcile(ctx context.Context,
req reconcile.Request
r.Logger.Error(err, "Not found eventmesh runtime pods")
}
+ runningEventMeshRuntimeNum := getRunningRuntimeNum(podList.Items)
+ if runningEventMeshRuntimeNum == eventMeshRuntime.Spec.Size {
+ share.IsEventMeshRuntimeInitialized = true
+ }
+
r.Logger.Info("Successful reconciliation!")
- return reconcile.Result{}, nil
+
+ return reconcile.Result{Requeue: true, RequeueAfter:
time.Duration(share.RequeueAfterSecond) * time.Second}, nil
+}
+
+func getRunningRuntimeNum(pods []corev1.Pod) int {
+ var num = 0
+ for _, pod := range pods {
+ if reflect.DeepEqual(pod.Status.Phase, corev1.PodRunning) {
+ num++
+ }
+ }
+ return num
}
func getRuntimePodNames(pods []corev1.Pod) []string {
@@ -274,13 +291,14 @@ func (r *RuntimeReconciler)
getEventMeshRuntimeStatefulSet(runtime *eventmeshope
Labels: label,
},
Spec: corev1.PodSpec{
- DNSPolicy:
corev1.DNSClusterFirstWithHostNet,
+ DNSPolicy:
runtime.Spec.RuntimePodTemplate.Template.Spec.DNSPolicy,
Affinity:
runtime.Spec.RuntimePodTemplate.Template.Spec.Affinity,
Tolerations:
runtime.Spec.RuntimePodTemplate.Template.Spec.Tolerations,
NodeSelector:
runtime.Spec.RuntimePodTemplate.Template.Spec.NodeSelector,
PriorityClassName:
runtime.Spec.RuntimePodTemplate.Template.Spec.PriorityClassName,
HostNetwork:
runtime.Spec.RuntimePodTemplate.Template.Spec.HostNetwork,
Containers: []corev1.Container{{
+ Resources:
runtime.Spec.RuntimePodTemplate.Template.Spec.Containers[0].Resources,
Image:
runtime.Spec.RuntimePodTemplate.Template.Spec.Containers[0].Image,
Name:
runtime.Spec.RuntimePodTemplate.Template.Spec.Containers[0].Name,
SecurityContext:
getContainerSecurityContext(runtime),
diff --git a/eventmesh-operator/share/share.go
b/eventmesh-operator/share/share.go
new file mode 100644
index 000000000..1027bba58
--- /dev/null
+++ b/eventmesh-operator/share/share.go
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package share
+
+var (
+ // IsEventMeshRuntimeInitialized is whether the runtime list is
initialized
+ IsEventMeshRuntimeInitialized = false
+)
+
+const (
+ // WaitForRuntimePodNameReadyInSecond is the time connector sleep for
waiting runtime ready in second
+ WaitForRuntimePodNameReadyInSecond = 1
+ // RequeueAfterSecond is a universal interval of the reconcile function
+ RequeueAfterSecond = 6
+)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]