diff options
| author | KubeEdge Bot <48982446+kubeedge-bot@users.noreply.github.com> | 2021-12-01 10:51:37 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-01 10:51:37 +0800 |
| commit | 594484db606f1244a5af2723a30dd9bbf96b996f (patch) | |
| tree | 46a251083923194ce310da6e80d7ff10cb945d0c /build | |
| parent | Merge pull request #3403 from zjcomeon/fix/err-3 (diff) | |
| parent | make service pluggable (diff) | |
| download | kubeedge-594484db606f1244a5af2723a30dd9bbf96b996f.tar.gz | |
Merge pull request #3304 from zhu733756/support-helm
Support helm repo for cloudcore
Diffstat (limited to 'build')
18 files changed, 1512 insertions, 0 deletions
diff --git a/build/helm/cloudcore/Chart.yaml b/build/helm/cloudcore/Chart.yaml new file mode 100644 index 000000000..aa9a52bd7 --- /dev/null +++ b/build/helm/cloudcore/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +name: cloudcore +version: 0.1.0 +appVersion: 1.8.2 +description: The KubeEdge cloudcore component. +sources: +- https://github.com/kubeedge/kubeedge diff --git a/build/helm/cloudcore/README.md b/build/helm/cloudcore/README.md new file mode 100644 index 000000000..f1d6c9fff --- /dev/null +++ b/build/helm/cloudcore/README.md @@ -0,0 +1,60 @@ +# CloudCore Application + +Visit https://github.com/kubeedge/kubeedge for more information. + +## Install examples + +``` +helm upgrade --install cloudcore ./cloudcore --namespace kubeedge --create-namespace -f ./cloudcore/values.yaml --set cloudCore.modules.cloudHub.advertiseAddress[0]=192.168.88.6 +``` + +> Note that the parameter `cloudCore.modules.cloudHub.advertiseAddress` is indispensable to start the KubeEdge cloudcore component on the cloud side. + +> Add `--dry-run` if only for testing purposes. + +## Custom Values + +### cloudcore + +- `cloudCore.modules.cloudHub.advertiseAddress`, defines the unmissable public IPs which can be accessed by edge nodes. +- `cloudCore.hostNetWork`, default `true`, which shares the host network, used for setting the forward iptables rules on the host. +- `cloudCore.image.repository`, default `kubeedge`, defines the image repo. +- `cloudCore.image.tag`, default `v1.8.2`, defines the image tag. +- `cloudCore.image.pullPolicy`, default `IfNotPresent`, defines the policies to pull images. +- `cloudCore.image.imagePullSecrets`, defines the secrets to pull images. +- `cloudCore.labels`, defines the labels. +- `cloudCore.annotions`, defines the annotions. +- `cloudCore.affinity`, `cloudCore.nodeSelector`, `cloudCore.tolerations`, defines the node scheduling policies. +- `cloudCore.resources`, defines the resources limits and requests. +- `cloudCore.modules.cloudHub.nodeLimit`, defines the edge nodes limits. +- `cloudCore.modules.cloudHub.websocket.enable`, default `true`. +- `cloudCore.modules.cloudHub.quic.enable`, default `false`. +- `cloudCore.modules.cloudHub.https.enable`, default `true`. +- `cloudCore.modules.cloudStream.enable`, default `true`. +- `cloudCore.modules.dynamicController.enable`, default `false`. +- `cloudCore.modules.router.enable`, default `false`. +- `cloudCore.service.type`, default `NodePort`. +- `cloudCore.service.cloudhubNodePort`, default `30000`, which defines the exposed node port for cloudhub service. +- `cloudCore.service.cloudhubQuicNodePort`, default `30001`, which defines the exposed node port for cloudhub quic protocol. +- `cloudCore.service.cloudhubHttpsNodePort`, default `30002`, which defines the exposed node port for cloudhub https protocol. +- `cloudCore.service.cloudstreamNodePort`, default `30003`, which defines the exposed node port for cloud stream service. +- `cloudCore.service.tunnelNodePort`, default `30004`, which defines the exposed node port for cloud tunnel service. + +### iptables-manager +- `iptablesManager.enable`, default `true` +- `iptablesManager.mode`, default `internal`, can be modified to `external`, the external mode will set up a iptables manager component which shares the host network. That mode can be enabled on version > v1.8.2. See pr https://github.com/kubeedge/kubeedge/pull/3265. +- `iptablesManager.image.repository`, default `kubeedge`, defines the image repo. +- `iptablesManager.image.tag`, default `v1.8.2`, defines the image tag. +- `iptablesManager.image.pullPolicy`, default `IfNotPresent`, defines the policies to pull images. +- `iptablesManager.image.imagePullSecrets`, defines the secrets to pull images. +- `iptablesManager.labels`, defines the labels. +- `iptablesManager.annotions`, defines the annotions. +- `iptablesManager.affinity`, `iptablesManager.nodeSelector`, `iptablesManager.tolerations`, defines the node scheduling policies. +- `iptablesManager.resources`, defines the resources limits and requests. + +## Uninstall + +``` +helm uninstall cloudcore -n kubeedge +kubectl delete ns kubeedge +```
\ No newline at end of file diff --git a/build/helm/cloudcore/crds/cluster_objectsync_v1alpha1.yaml b/build/helm/cloudcore/crds/cluster_objectsync_v1alpha1.yaml new file mode 100644 index 000000000..3b34ba233 --- /dev/null +++ b/build/helm/cloudcore/crds/cluster_objectsync_v1alpha1.yaml @@ -0,0 +1,75 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.2 + creationTimestamp: null + name: clusterobjectsyncs.reliablesyncs.kubeedge.io +spec: + group: reliablesyncs.kubeedge.io + names: + kind: ClusterObjectSync + listKind: ClusterObjectSyncList + plural: clusterobjectsyncs + singular: clusterobjectsync + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: ClusterObjectSync stores the state of the cluster level, nonNamespaced + object that was successfully persisted to the edge node. ClusterObjectSync + name is a concatenation of the node name which receiving the object and + the object UUID. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ObjectSyncSpec stores the details of objects that persist + to the edge. + properties: + objectAPIVersion: + description: ObjectAPIVersion is the APIVersion of the object that + was successfully persist to the edge node. + type: string + objectKind: + description: ObjectType is the kind of the object that was successfully + persist to the edge node. + type: string + objectName: + description: ObjectName is the name of the object that was successfully + persist to the edge node. + type: string + type: object + status: + description: ObjectSyncSpec stores the resourceversion of objects that + persist to the edge. + properties: + objectResourceVersion: + description: ObjectResourceVersion is the resourceversion of the object + that was successfully persist to the edge node. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/build/helm/cloudcore/crds/devices_v1alpha2_device.yaml b/build/helm/cloudcore/crds/devices_v1alpha2_device.yaml new file mode 100644 index 000000000..313df0991 --- /dev/null +++ b/build/helm/cloudcore/crds/devices_v1alpha2_device.yaml @@ -0,0 +1,534 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.2 + creationTimestamp: null + name: devices.devices.kubeedge.io +spec: + group: devices.kubeedge.io + names: + kind: Device + listKind: DeviceList + plural: devices + singular: device + scope: Namespaced + versions: + - name: v1alpha2 + schema: + openAPIV3Schema: + description: Device is the Schema for the devices API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DeviceSpec represents a single device instance. It is an + instantation of a device model. + properties: + data: + description: Data section describe a list of time-series properties + which should be processed on edge node. + properties: + dataProperties: + description: 'Required: A list of data properties, which are not + required to be processed by edgecore' + items: + description: DataProperty represents the device property for + external use. + properties: + metadata: + additionalProperties: + type: string + description: Additional metadata like timestamp when the + value was reported etc. + type: object + propertyName: + description: 'Required: The property name for which should + be processed by external apps. This property should be + present in the device model.' + type: string + type: object + type: array + dataTopic: + description: Topic used by mapper, all data collected from dataProperties + should be published to this topic, the default value is $ke/events/device/+/data/update + type: string + type: object + deviceModelRef: + description: 'Required: DeviceModelRef is reference to the device + model used as a template to create the device instance.' + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + nodeSelector: + description: NodeSelector indicates the binding preferences between + devices and nodes. Refer to k8s.io/kubernetes/pkg/apis/core NodeSelector + for more details + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. The terms + are ORed. + items: + description: A null or empty node selector term matches no objects. + The requirements of them are ANDed. The TopologySelectorTerm + type implements a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements by node's + labels. + items: + description: A node selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the selector applies + to. + type: string + operator: + description: Represents a key's relationship to a + set of values. Valid operators are In, NotIn, Exists, + DoesNotExist. Gt, and Lt. + type: string + values: + description: An array of string values. If the operator + is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. If the operator is Gt or Lt, + the values array must have a single element, which + will be interpreted as an integer. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements by node's + fields. + items: + description: A node selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that the selector applies + to. + type: string + operator: + description: Represents a key's relationship to a + set of values. Valid operators are In, NotIn, Exists, + DoesNotExist. Gt, and Lt. + type: string + values: + description: An array of string values. If the operator + is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. If the operator is Gt or Lt, + the values array must have a single element, which + will be interpreted as an integer. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + propertyVisitors: + description: List of property visitors which describe how to access + the device properties. PropertyVisitors must unique by propertyVisitor.propertyName. + items: + description: DevicePropertyVisitor describes the specifics of accessing + a particular device property. Visitors are intended to be consumed + by device mappers which connect to devices and collect data / + perform actions on the device. + properties: + bluetooth: + description: Bluetooth represents a set of additional visitor + config fields of bluetooth protocol. + properties: + characteristicUUID: + description: 'Required: Unique ID of the corresponding operation' + type: string + dataConverter: + description: Responsible for converting the data being read + from the bluetooth device into a form that is understandable + by the platform + properties: + endIndex: + description: 'Required: Specifies the end index of incoming + byte stream to be considered to convert the data the + value specified should be inclusive for example if + 3 is specified it includes the third index' + type: integer + orderOfOperations: + description: Specifies in what order the operations(which + are required to be performed to convert incoming data + into understandable form) are performed + items: + description: Specify the operation that should be + performed to convert incoming data into understandable + form + properties: + operationType: + description: 'Required: Specifies the operation + to be performed to convert incoming data' + type: string + operationValue: + description: 'Required: Specifies with what value + the operation is to be performed' + type: number + type: object + type: array + shiftLeft: + description: Refers to the number of bits to shift left, + if left-shift operation is necessary for conversion + type: integer + shiftRight: + description: Refers to the number of bits to shift right, + if right-shift operation is necessary for conversion + type: integer + startIndex: + description: 'Required: Specifies the start index of + the incoming byte stream to be considered to convert + the data. For example: start-index:2, end-index:3 + concatenates the value present at second and third + index of the incoming byte stream. If we want to reverse + the order we can give it as start-index:3, end-index:2' + type: integer + type: object + dataWrite: + additionalProperties: + format: byte + type: string + description: 'Responsible for converting the data coming + from the platform into a form that is understood by the + bluetooth device For example: "ON":[1], "OFF":[0]' + type: object + type: object + collectCycle: + description: Define how frequent mapper will collect from device. + format: int64 + type: integer + customizedProtocol: + description: CustomizedProtocol represents a set of visitor + config fields of bluetooth protocol. + properties: + configData: + description: 'Required: The configData of customized protocol' + type: object + x-kubernetes-preserve-unknown-fields: true + protocolName: + description: 'Required: name of customized protocol' + type: string + type: object + customizedValues: + description: Customized values for visitor of provided protocols + type: object + x-kubernetes-preserve-unknown-fields: true + modbus: + description: Modbus represents a set of additional visitor config + fields of modbus protocol. + properties: + isRegisterSwap: + description: Indicates whether the high and low register + swapped. Defaults to false. + type: boolean + isSwap: + description: Indicates whether the high and low byte swapped. + Defaults to false. + type: boolean + limit: + description: 'Required: Limit number of registers to read/write.' + format: int64 + type: integer + offset: + description: 'Required: Offset indicates the starting register + number to read/write data.' + format: int64 + type: integer + register: + description: 'Required: Type of register' + enum: + - CoilRegister + - DiscreteInputRegister + - InputRegister + - HoldingRegister + type: string + scale: + description: The scale to convert raw property data into + final units. Defaults to 1.0 + type: number + type: object + opcua: + description: Opcua represents a set of additional visitor config + fields of opc-ua protocol. + properties: + browseName: + description: The name of opc-ua node + type: string + nodeID: + description: 'Required: The ID of opc-ua node, e.g. "ns=1,i=1005"' + type: string + type: object + propertyName: + description: 'Required: The device property name to be accessed. + This should refer to one of the device properties defined + in the device model.' + type: string + reportCycle: + description: Define how frequent mapper will report the value. + format: int64 + type: integer + type: object + type: array + protocol: + description: 'Required: The protocol configuration used to connect + to the device.' + properties: + bluetooth: + description: Protocol configuration for bluetooth + properties: + macAddress: + description: Unique identifier assigned to the device. + type: string + type: object + common: + description: Configuration for protocol common part + properties: + collectRetryTimes: + description: Define retry times of mapper will collect from + device. + format: int64 + type: integer + collectTimeout: + description: Define timeout of mapper collect from device. + format: int64 + type: integer + collectType: + description: Define collect type, sync or async. + enum: + - sync + - async + type: string + com: + properties: + baudRate: + description: Required. BaudRate 115200|57600|38400|19200|9600|4800|2400|1800|1200|600|300|200|150|134|110|75|50 + enum: + - 115200 + - 57600 + - 38400 + - 19200 + - 9600 + - 4800 + - 2400 + - 1800 + - 1200 + - 600 + - 300 + - 200 + - 150 + - 134 + - 110 + - 75 + - 50 + format: int64 + type: integer + dataBits: + description: Required. Valid values are 8, 7, 6, 5. + enum: + - 8 + - 7 + - 6 + - 5 + format: int64 + type: integer + parity: + description: Required. Valid options are "none", "even", + "odd". Defaults to "none". + enum: + - none + - even + - odd + type: string + serialPort: + description: Required. + type: string + stopBits: + description: Required. Bit that stops 1|2 + enum: + - 1 + - 2 + format: int64 + type: integer + type: object + commType: + description: Communication type, like tcp client, tcp server + or COM + type: string + customizedValues: + description: Customized values for provided protocol + type: object + x-kubernetes-preserve-unknown-fields: true + reconnRetryTimes: + description: Reconnecting retry times + format: int64 + type: integer + reconnTimeout: + description: Reconnection timeout + format: int64 + type: integer + tcp: + properties: + ip: + description: Required. + type: string + port: + description: Required. + format: int64 + type: integer + type: object + type: object + customizedProtocol: + description: Configuration for customized protocol + properties: + configData: + description: Any config data + type: object + x-kubernetes-preserve-unknown-fields: true + protocolName: + description: Unique protocol name Required. + type: string + type: object + modbus: + description: Protocol configuration for modbus + properties: + slaveID: + description: Required. 0-255 + format: int64 + type: integer + type: object + opcua: + description: Protocol configuration for opc-ua + properties: + certificate: + description: Certificate for access opc server. + type: string + password: + description: Password for access opc server. + type: string + privateKey: + description: PrivateKey for access opc server. + type: string + securityMode: + description: Defaults to "none". + type: string + securityPolicy: + description: Defaults to "none". + type: string + timeout: + description: Timeout seconds for the opc server connection.??? + format: int64 + type: integer + url: + description: 'Required: The URL for opc server endpoint.' + type: string + userName: + description: Username for access opc server. + type: string + type: object + type: object + type: object + status: + description: DeviceStatus reports the device state and the desired/reported + values of twin attributes. + properties: + twins: + description: 'A list of device twins containing desired/reported desired/reported + values of twin properties.. Optional: A passive device won''t have + twin properties and this list could be empty.' + items: + description: Twin provides a logical representation of control properties + (writable properties in the device model). The properties can + have a Desired state and a Reported state. The cloud configures + the `Desired`state of a device property and this configuration + update is pushed to the edge node. The mapper sends a command + to the device to change this property value as per the desired + state . It receives the `Reported` state of the property once + the previous operation is complete and sends the reported state + to the cloud. Offline device interaction in the edge is possible + via twin properties for control/command operations. + properties: + desired: + description: 'Required: the desired property value.' + properties: + metadata: + additionalProperties: + type: string + description: Additional metadata like timestamp when the + value was reported etc. + type: object + value: + description: 'Required: The value for this property.' + type: string + required: + - value + type: object + propertyName: + description: 'Required: The property name for which the desired/reported + values are specified. This property should be present in the + device model.' + type: string + reported: + description: 'Required: the reported property value.' + properties: + metadata: + additionalProperties: + type: string + description: Additional metadata like timestamp when the + value was reported etc. + type: object + value: + description: 'Required: The value for this property.' + type: string + required: + - value + type: object + type: object + type: array + type: object + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/build/helm/cloudcore/crds/devices_v1alpha2_devicemodel.yaml b/build/helm/cloudcore/crds/devices_v1alpha2_devicemodel.yaml new file mode 100644 index 000000000..eb10c666f --- /dev/null +++ b/build/helm/cloudcore/crds/devices_v1alpha2_devicemodel.yaml @@ -0,0 +1,163 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.2 + creationTimestamp: null + name: devicemodels.devices.kubeedge.io +spec: + group: devices.kubeedge.io + names: + kind: DeviceModel + listKind: DeviceModelList + plural: devicemodels + singular: devicemodel + scope: Namespaced + versions: + - name: v1alpha2 + schema: + openAPIV3Schema: + description: DeviceModel is the Schema for the device model API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DeviceModelSpec defines the model / template for a device.It + is a blueprint which describes the device capabilities and access mechanism + via property visitors. + properties: + properties: + description: 'Required: List of device properties.' + items: + description: DeviceProperty describes an individual device property + / attribute like temperature / humidity etc. + properties: + description: + description: The device property description. + type: string + name: + description: 'Required: The device property name.' + type: string + type: + description: 'Required: PropertyType represents the type and + data validation of the property.' + properties: + boolean: + properties: + accessMode: + description: 'Required: Access mode of property, ReadWrite + or ReadOnly.' + enum: + - ReadWrite + - ReadOnly + type: string + defaultValue: + type: boolean + type: object + bytes: + properties: + accessMode: + description: 'Required: Access mode of property, ReadWrite + or ReadOnly.' + enum: + - ReadWrite + - ReadOnly + type: string + type: object + double: + properties: + accessMode: + description: 'Required: Access mode of property, ReadWrite + or ReadOnly.' + enum: + - ReadWrite + - ReadOnly + type: string + defaultValue: + type: number + maximum: + type: number + minimum: + type: number + unit: + description: The unit of the property + type: string + type: object + float: + properties: + accessMode: + description: 'Required: Access mode of property, ReadWrite + or ReadOnly.' + enum: + - ReadWrite + - ReadOnly + type: string + defaultValue: + type: number + maximum: + type: number + minimum: + type: number + unit: + description: The unit of the property + type: string + type: object + int: + properties: + accessMode: + description: 'Required: Access mode of property, ReadWrite + or ReadOnly.' + enum: + - ReadWrite + - ReadOnly + type: string + defaultValue: + format: int64 + type: integer + maximum: + format: int64 + type: integer + minimum: + format: int64 + type: integer + unit: + description: The unit of the property + type: string + type: object + string: + properties: + accessMode: + description: 'Required: Access mode of property, ReadWrite + or ReadOnly.' + enum: + - ReadWrite + - ReadOnly + type: string + defaultValue: + type: string + type: object + type: object + type: object + type: array + type: object + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/build/helm/cloudcore/crds/objectsync_v1alpha1.yaml b/build/helm/cloudcore/crds/objectsync_v1alpha1.yaml new file mode 100644 index 000000000..851336c53 --- /dev/null +++ b/build/helm/cloudcore/crds/objectsync_v1alpha1.yaml @@ -0,0 +1,74 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.2 + creationTimestamp: null + name: objectsyncs.reliablesyncs.kubeedge.io +spec: + group: reliablesyncs.kubeedge.io + names: + kind: ObjectSync + listKind: ObjectSyncList + plural: objectsyncs + singular: objectsync + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: ObjectSync stores the state of the namespaced object that was + successfully persisted to the edge node. ObjectSync name is a concatenation + of the node name which receiving the object and the object UUID. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ObjectSyncSpec stores the details of objects that persist + to the edge. + properties: + objectAPIVersion: + description: ObjectAPIVersion is the APIVersion of the object that + was successfully persist to the edge node. + type: string + objectKind: + description: ObjectType is the kind of the object that was successfully + persist to the edge node. + type: string + objectName: + description: ObjectName is the name of the object that was successfully + persist to the edge node. + type: string + type: object + status: + description: ObjectSyncSpec stores the resourceversion of objects that + persist to the edge. + properties: + objectResourceVersion: + description: ObjectResourceVersion is the resourceversion of the object + that was successfully persist to the edge node. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/build/helm/cloudcore/crds/router_v1_rule.yaml b/build/helm/cloudcore/crds/router_v1_rule.yaml new file mode 100644 index 000000000..e93930c3a --- /dev/null +++ b/build/helm/cloudcore/crds/router_v1_rule.yaml @@ -0,0 +1,65 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: rules.rules.kubeedge.io +spec: + group: rules.kubeedge.io + versions: + - name: v1 + served: true + storage: true + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + source: + description: | + source is a string value representing where the messages come from. Its + value is the same with ruleendpoint name. For example, my-rest or my-eventbus. + type: string + sourceResource: + description: | + sourceResource is a map representing the resource info of source. For rest + rule-endpoint type its value is {"path":"/test"}. For eventbus ruleendpoint type its + value is {"topic":"<user define string>","node_name":"edge-node"} + type: object + additionalProperties: + type: string + target: + description: | + target is a string value representing where the messages go to. its value is + the same with ruleendpoint name. For example, my-eventbus or my-rest or my-servicebus. + type: string + targetResource: + description: | + targetResource is a map representing the resource info of target. For rest + rule-endpoint type its value is {"resource":"http://a.com"}. For eventbus ruleendpoint + type its value is {"topic":"/test"}. For servicebus rule-endpoint type its value is + {"path":"/request_path"}. + type: object + additionalProperties: + type: string + required: + - source + - sourceResource + - target + - targetResource + status: + type: object + properties: + successMessages: + type: integer + failMessages: + type: integer + errors: + items: + type: string + type: array + scope: Namespaced + names: + plural: rules + singular: rule + kind: Rule diff --git a/build/helm/cloudcore/crds/router_v1_ruleEndpoint.yaml b/build/helm/cloudcore/crds/router_v1_ruleEndpoint.yaml new file mode 100644 index 000000000..cb5a1d6ae --- /dev/null +++ b/build/helm/cloudcore/crds/router_v1_ruleEndpoint.yaml @@ -0,0 +1,43 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: ruleendpoints.rules.kubeedge.io +spec: + group: rules.kubeedge.io + versions: + - name: v1 + served: true + storage: true + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + ruleEndpointType: + description: | + ruleEndpointType is a string value representing rule-endpoint type. its value is + one of rest/eventbus/servicebus. + type: string + enum: + - rest + - eventbus + - servicebus + properties: + description: | + properties is not required except for servicebus rule-endpoint type. It is a map + value representing rule-endpoint properties. When ruleEndpointType is servicebus, + its value is {"service_port":"8080"}. + type: object + additionalProperties: + type: string + required: + - ruleEndpointType + scope: Namespaced + names: + plural: ruleendpoints + singular: ruleendpoint + kind: RuleEndpoint + shortNames: + - re diff --git a/build/helm/cloudcore/templates/_helpers.tpl b/build/helm/cloudcore/templates/_helpers.tpl new file mode 100644 index 000000000..fd94bcc2e --- /dev/null +++ b/build/helm/cloudcore/templates/_helpers.tpl @@ -0,0 +1,36 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "cloudcore.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "cloudcore.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Generate certificates for kubeedge cloudstream server +*/}} +{{- define "cloudcore.gen-certs" -}} +{{- $altNames := list ( printf "%s.%s" (include "cloudcore.name" .) .Release.Namespace ) ( printf "%s.%s.svc" (include "cloudcore.name" .) .Release.Namespace ) -}} +{{- $ca := genCA "cloudcore-ca" 365 -}} +{{- $cert := genSignedCert ( include "cloudcore.name" . ) nil $altNames 365 $ca -}} +streamCA.crt: {{ $ca.Cert | b64enc }} +stream.crt: {{ $cert.Cert | b64enc }} +stream.key: {{ $cert.Key | b64enc }} +{{- end -}} diff --git a/build/helm/cloudcore/templates/configmap_cloudcore.yaml b/build/helm/cloudcore/templates/configmap_cloudcore.yaml new file mode 100644 index 000000000..31a291db0 --- /dev/null +++ b/build/helm/cloudcore/templates/configmap_cloudcore.yaml @@ -0,0 +1,48 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cloudcore + {{- with .Values.cloudCore.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} +data: + cloudcore.yaml: | + apiVersion: cloudcore.config.kubeedge.io/v1alpha2 + kind: CloudCore + kubeAPIConfig: + kubeConfig: "" + master: "" + modules: + cloudHub: + advertiseAddress: + {{- range .Values.cloudCore.modules.cloudHub.advertiseAddress }} + - {{ . }} + {{- end}} + nodeLimit: {{ .Values.cloudCore.modules.cloudHub.nodeLimit }} + tlsCAFile: /etc/kubeedge/ca/rootCA.crt + tlsCertFile: /etc/kubeedge/certs/edge.crt + tlsPrivateKeyFile: /etc/kubeedge/certs/edge.key + unixsocket: + address: unix:///var/lib/kubeedge/kubeedge.sock + enable: true + websocket: + address: 0.0.0.0 + enable: {{ .Values.cloudCore.modules.cloudHub.websocket.enable }} + port: 10000 + quic: + address: 0.0.0.0 + enable: {{ .Values.cloudCore.modules.cloudHub.quic.enable }} + maxIncomingStreams: {{ .Values.cloudCore.modules.cloudHub.quic.maxIncomingStreams }} + port: 10001 + https: + address: 0.0.0.0 + enable: {{ .Values.cloudCore.modules.cloudHub.https.enable }} + port: 10002 + cloudStream: + enable: {{ .Values.cloudCore.modules.cloudStream.enable }} + streamPort: 10003 + tunnelPort: 10004 + dynamicController: + enable: {{ .Values.cloudCore.modules.dynamicController.enable }} + router: + enable: {{ .Values.cloudCore.modules.router.enable }} diff --git a/build/helm/cloudcore/templates/daemonset_iptablesmanager.yaml b/build/helm/cloudcore/templates/daemonset_iptablesmanager.yaml new file mode 100644 index 000000000..1fe598381 --- /dev/null +++ b/build/helm/cloudcore/templates/daemonset_iptablesmanager.yaml @@ -0,0 +1,47 @@ +{{- if and (.Values.iptablesManager.enable) (eq .Values.iptablesManager.mode "external") }} +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: cloud-iptables-manager + {{- with .Values.iptablesManager.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.iptablesManager.annotations }} + annotations: {{- toYaml . | nindent 4 }} + {{- end }} +spec: + selector: + matchLabels: + {{- with .Values.iptablesManager.labels }} + {{- toYaml . | nindent 6 }} + {{- end }} + template: + metadata: + {{- with .Values.iptablesManager.labels }} + labels: {{- toYaml . | nindent 8 }} + {{- end }} + spec: + serviceAccount: iptables-manager-sa + hostNetwork: {{ .Values.iptablesManager.hostNetWork }} + {{- with .Values.iptablesManager.affinity }} + affinity: {{ toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.iptablesManager.tolerations }} + tolerations: {{ toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.iptablesManager.nodeSelector }} + nodeSelector: {{ toYaml . | nindent 8 }} + {{- end }} + restartPolicy: Always + containers: + - name: iptables-manager + command: ['iptables-manager'] + image: {{ .Values.iptablesManager.image.repository }}:{{ .Values.iptablesManager.image.tag }} + imagePullPolicy: {{ .Values.iptablesManager.image.pullPolicy }} + {{- with .Values.iptablesManager.securityContext }} + securityContext: {{ toYaml . | nindent 10 }} + {{- end }} + {{- with .Values.iptablesManager.resources }} + resources: {{ toYaml . | nindent 10 }} + {{- end }} +{{- end }}
\ No newline at end of file diff --git a/build/helm/cloudcore/templates/deployment_cloudcore.yaml b/build/helm/cloudcore/templates/deployment_cloudcore.yaml new file mode 100644 index 000000000..6d759c889 --- /dev/null +++ b/build/helm/cloudcore/templates/deployment_cloudcore.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + {{- with .Values.cloudCore.annotations }} + annotations: {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.cloudCore.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} + name: cloudcore +spec: + replicas: {{ .Values.cloudCore.replicaCount }} + selector: + {{- with .Values.cloudCore.labels }} + matchLabels: {{- toYaml . | nindent 6 }} + {{- end }} + template: + metadata: + {{- with .Values.cloudCore.labels }} + labels: {{- toYaml . | nindent 8 }} + {{- end }} + spec: + {{- if eq .Values.cloudCore.hostNetWork "true" }} + hostNetwork: {{ .Values.cloudCore.hostNetWork }} + dnsPolicy: ClusterFirstWithHostNet + {{- end }} + {{- with .Values.cloudCore.nodeSelector }} + nodeSelector: {{ toYaml . | nindent 8 }} + {{- end }} + restartPolicy: Always + {{- with .Values.cloudCore.affinity }} + affinity: {{ toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.cloudCore.tolerations }} + tolerations: {{ toYaml . | nindent 8 }} + {{- end }} + serviceAccount: cloudcore + {{- with .Values.imagePullSecrets }} + imagePullSecrets: {{- toYaml . | indent 8 }} + {{- end }} + containers: + - name: cloudcore + image: {{ .Values.cloudCore.image.repository }}:{{ .Values.cloudCore.image.tag }} + imagePullPolicy: {{ .Values.cloudCore.image.pullPolicy }} + ports: + - containerPort: 10000 + name: cloudhub + protocol: TCP + - containerPort: 10001 + name: cloudhub-quic + protocol: TCP + - containerPort: 10002 + name: cloudhub-https + protocol: TCP + - containerPort: 10003 + name: cloudstream + protocol: TCP + - containerPort: 10004 + name: tunnelport + protocol: TCP + volumeMounts: + - name: conf + mountPath: /etc/kubeedge/config + - name: certs + mountPath: /etc/kubeedge + - name: sock + mountPath: /var/lib/kubeedge + - mountPath: /etc/localtime + name: host-time + readOnly: true + {{- with .Values.cloudCore.securityContext }} + securityContext: {{ toYaml . | nindent 10 }} + {{- end }} + {{- with .Values.cloudCore.resources }} + resources: {{ toYaml . | nindent 10 }} + {{- end }} + volumes: + - name: conf + configMap: + name: cloudcore + - name: certs + secret: + secretName: cloudcore + items: + - key: stream.crt + path: certs/stream.crt + - key: stream.key + path: certs/stream.key + - key: streamCA.crt + path: ca/streamCA.crt + - name: sock + hostPath: + path: /var/lib/kubeedge + type: DirectoryOrCreate + - hostPath: + path: /etc/localtime + type: "" + name: host-time diff --git a/build/helm/cloudcore/templates/rbac_cloudcore.yaml b/build/helm/cloudcore/templates/rbac_cloudcore.yaml new file mode 100644 index 000000000..2495920c7 --- /dev/null +++ b/build/helm/cloudcore/templates/rbac_cloudcore.yaml @@ -0,0 +1,61 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: cloudcore + {{- with .Values.cloudCore.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} +rules: +- apiGroups: [""] + resources: ["nodes", "nodes/status", "configmaps", "pods", "pods/status", "secrets", "endpoints", "services","persistentvolumes","persistentvolumeclaims"] + verbs: ["get", "list", "watch", "create", "update"] +- apiGroups: [""] + resources: ["namespaces"] + verbs: ["get", "create"] +- apiGroups: [""] + resources: ["pods/status"] + verbs: ["patch"] +- apiGroups: [""] + resources: ["pods"] + verbs: ["delete"] +- apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "list", "watch", "create", "update"] +- apiGroups: ["devices.kubeedge.io"] + resources: ["devices", "devicemodels", "devices/status", "devicemodels/status"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] +- apiGroups: ["reliablesyncs.kubeedge.io"] + resources: ["objectsyncs", "clusterobjectsyncs", "objectsyncs/status", "clusterobjectsyncs/status"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] +- apiGroups: ["rules.kubeedge.io"] + resources: ["rules", "ruleendpoints", "rules/status", "ruleendpoints/status"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + {{- with .Values.cloudCore.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} + name: cloudcore + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: cloudcore + {{- with .Values.cloudCore.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cloudcore +subjects: +- kind: ServiceAccount + name: cloudcore + namespace: {{ .Release.Namespace }} + + diff --git a/build/helm/cloudcore/templates/rbac_iptablesmanager.yaml b/build/helm/cloudcore/templates/rbac_iptablesmanager.yaml new file mode 100644 index 000000000..73c626e0a --- /dev/null +++ b/build/helm/cloudcore/templates/rbac_iptablesmanager.yaml @@ -0,0 +1,40 @@ +{{- if and (.Values.iptablesManager.enable) (eq .Values.iptablesManager.mode "external") }} +apiVersion: v1 +kind: ServiceAccount +metadata: + {{- with .Values.iptablesManager.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} + name: iptables-manager-sa + namespace: {{ .Release.Namespace }} + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: iptables-manager + {{- with .Values.iptablesManager.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: iptables-manager +subjects: +- kind: ServiceAccount + name: iptables-manager-sa + namespace: {{ .Release.Namespace }} + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: iptables-manager + {{- with .Values.iptablesManager.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} +rules: +- apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list", "watch"] +{{- end }}
\ No newline at end of file diff --git a/build/helm/cloudcore/templates/secret_cloudcore.yaml b/build/helm/cloudcore/templates/secret_cloudcore.yaml new file mode 100644 index 000000000..e61c65243 --- /dev/null +++ b/build/helm/cloudcore/templates/secret_cloudcore.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Secret +metadata: + name: cloudcore + {{- with .Values.cloudCore.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-delete-policy": "before-hook-creation" +data: +{{ ( include "cloudcore.gen-certs" . ) | indent 2 }}
\ No newline at end of file diff --git a/build/helm/cloudcore/templates/service_cloudcore.yaml b/build/helm/cloudcore/templates/service_cloudcore.yaml new file mode 100644 index 000000000..4e0e743ae --- /dev/null +++ b/build/helm/cloudcore/templates/service_cloudcore.yaml @@ -0,0 +1,50 @@ +{{- if and (.Values.cloudCore.service.enable) }} +apiVersion: v1 +kind: Service +metadata: + {{- with .Values.cloudCore.labels }} + labels: {{- toYaml . | nindent 4 }} + {{- end }} + name: cloudcore +spec: + {{- if and (eq .Values.cloudCore.service.type "NodePort") (eq .Values.cloudCore.hostNetWork "false") }} + type: {{ .Values.cloudCore.service.type }} + {{- else }} + type: ClusterIP + {{- end }} + ports: + - port: 10000 + targetPort: 10000 + {{- if and (eq .Values.cloudCore.service.type "NodePort") (eq .Values.cloudCore.hostNetWork "false") }} + nodePort: {{ .Values.cloudCore.service.cloudhubNodePort }} + {{- end }} + name: cloudhub + - port: 10001 + targetPort: 10001 + {{- if and (eq .Values.cloudCore.service.type "NodePort") (eq .Values.cloudCore.hostNetWork "false") }} + nodePort: {{ .Values.cloudCore.service.cloudhubQuicNodePort }} + {{- end }} + name: cloudhub-quic + - port: 10002 + targetPort: 10002 + {{- if and (eq .Values.cloudCore.service.type "NodePort") (eq .Values.cloudCore.hostNetWork "false") }} + nodePort: {{ .Values.cloudCore.service.cloudhubHttpsNodePort }} + {{- end }} + name: cloudhub-https + - port: 10003 + targetPort: 10003 + {{- if and (eq .Values.cloudCore.service.type "NodePort") (eq .Values.cloudCore.hostNetWork "false") }} + nodePort: {{ .Values.cloudCore.service.cloudstreamNodePort }} + {{- end }} + name: cloudstream + - port: 10004 + targetPort: 10004 + {{- if and (eq .Values.cloudCore.service.type "NodePort") (eq .Values.cloudCore.hostNetWork "false") }} + nodePort: {{ .Values.cloudCore.service.tunnelNodePort }} + {{- end }} + name: tunnelport + selector: + {{- with .Values.cloudCore.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }}
\ No newline at end of file diff --git a/build/helm/cloudcore/values.yaml b/build/helm/cloudcore/values.yaml new file mode 100644 index 000000000..2d7a58ee8 --- /dev/null +++ b/build/helm/cloudcore/values.yaml @@ -0,0 +1,96 @@ +# Default values for kubeedge. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. +appVersion: "1.8.2" + +cloudCore: + replicaCount: 1 + hostNetWork: "true" + image: + repository: "kubeedge/cloudcore" + tag: "v1.8.2" + pullPolicy: "IfNotPresent" + imagePullSecrets: [] + securityContext: + privileged: true + labels: + k8s-app: kubeedge + kubeedge: cloudcore + annotations: {} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: node-role.kubernetes.io/edge + operator: DoesNotExist + tolerations: {} + nodeSelector: {} + resources: + limits: + cpu: 200m + memory: 1Gi + requests: + cpu: 100m + memory: 512Mi + modules: + cloudHub: + advertiseAddress: # Causion!: Leave this entry to empty will cause CloudCore to exit abnormally once KubeEdge is enabled. + - "" # At least a public IP Address or an IP which can be accessed by edge nodes must be provided! + nodeLimit: "1000" + websocket: + enable: "true" + quic: + enable: "false" + maxIncomingStreams: "10000" + https: + enable: "true" + cloudStream: + enable: "true" + dynamicController: + enable: "false" + router: + enable: "false" + service: + enable: "true" + type: "NodePort" + cloudhubNodePort: "30000" + cloudhubQuicNodePort: "30001" + cloudhubHttpsNodePort: "30002" + cloudstreamNodePort: "30003" + tunnelNodePort: "30004" + +iptablesManager: + enable: "true" + mode: "internal" + hostNetWork: true + image: + repository: "kubeedge/iptables-manager" + tag: "v1.8.2" + pullPolicy: "IfNotPresent" + imagePullSecrets: [] + securityContext: + capabilities: + add: + - NET_ADMIN + - NET_RAW + labels: + k8s-app: iptables-manager + kubeedge: iptables-manager + annotations: {} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: node-role.kubernetes.io/edge + operator: DoesNotExist + tolerations: {} + nodeSelector: {} + resources: + limits: + cpu: 200m + memory: 50Mi + requests: + cpu: 100m + memory: 25Mi
\ No newline at end of file diff --git a/build/helm/edgemesh/README.md b/build/helm/edgemesh/README.md new file mode 100644 index 000000000..d1336acc7 --- /dev/null +++ b/build/helm/edgemesh/README.md @@ -0,0 +1,3 @@ +# EdgeMesh Application + +Visit https://github.com/kubeedge/edgemesh for more information.
\ No newline at end of file |
