Code Monkey home page Code Monkey logo

kubeedge's Introduction

KubeEdge

Go Report Card LICENSE Releases CII Best Practices

English | 简体中文

KubeEdge is built upon Kubernetes and extends native containerized application orchestration and device management to hosts at the Edge. It consists of cloud part and edge part, provides core infrastructure support for networking, application deployment and metadata synchronization between cloud and edge. It also supports MQTT which enables edge devices to access through edge nodes.

With KubeEdge it is easy to get and deploy existing complicated machine learning, image recognition, event processing and other high level applications to the Edge. With business logic running at the Edge, much larger volumes of data can be secured & processed locally where the data is produced. With data processed at the Edge, the responsiveness is increased dramatically and data privacy is protected.

KubeEdge is an incubation-level hosted project by the Cloud Native Computing Foundation (CNCF). KubeEdge incubation announcement by CNCF.

Advantages

  • Kubernetes-native support: Managing edge applications and edge devices in the cloud with fully compatible Kubernetes APIs.
  • Cloud-Edge Reliable Collaboration: Ensure reliable messages delivery without loss over unstable cloud-edge network.
  • Edge Autonomy: Ensure edge nodes run autonomously and the applications in edge run normally, when the cloud-edge network is unstable or edge is offline and restarted.
  • Edge Devices Management: Managing edge devices through Kubernetes native APIs implemented by CRD.
  • Extremely Lightweight Edge Agent: Extremely lightweight Edge Agent(EdgeCore) to run on resource constrained edge.

How It Works

KubeEdge consists of cloud part and edge part.

Architecture

In the Cloud

  • CloudHub: a web socket server responsible for watching changes at the cloud side, caching and sending messages to EdgeHub.
  • EdgeController: an extended kubernetes controller which manages edge nodes and pods metadata so that the data can be targeted to a specific edge node.
  • DeviceController: an extended kubernetes controller which manages devices so that the device metadata/status data can be synced between edge and cloud.

On the Edge

  • EdgeHub: a web socket client responsible for interacting with Cloud Service for the edge computing (like Edge Controller as in the KubeEdge Architecture). This includes syncing cloud-side resource updates to the edge, and reporting edge-side host and device status changes to the cloud.
  • Edged: an agent that runs on edge nodes and manages containerized applications.
  • EventBus: a MQTT client to interact with MQTT servers (mosquitto), offering publish and subscribe capabilities to other components.
  • ServiceBus: an HTTP client to interact with HTTP servers (REST), offering HTTP client capabilities to components of cloud to reach HTTP servers running at edge.
  • DeviceTwin: responsible for storing device status and syncing device status to the cloud. It also provides query interfaces for applications.
  • MetaManager: the message processor between edged and edgehub. It is also responsible for storing/retrieving metadata to/from a lightweight database (SQLite).

Kubernetes compatibility

Kubernetes 1.20 Kubernetes 1.21 Kubernetes 1.22 Kubernetes 1.23 Kubernetes 1.24 Kubernetes 1.25 Kubernetes 1.26 Kubernetes 1.27 Kubernetes 1.28
KubeEdge 1.12 - - - - - -
KubeEdge 1.13 + - - - - -
KubeEdge 1.14 + + - - - -
KubeEdge 1.15 + + + + - -
KubeEdge 1.16 + + + + + -
KubeEdge HEAD (master) + + + + + +

Key:

  • KubeEdge and the Kubernetes version are exactly compatible.
  • + KubeEdge has features or API objects that may not be present in the Kubernetes version.
  • - The Kubernetes version has features or API objects that KubeEdge can't use.

Guides

Get start with this doc.

See our documentation on kubeedge.io for more details.

To learn deeply about KubeEdge, try some examples on examples.

Roadmap

Meeting

Regular Community Meeting:

Resources:

Contact

If you need support, start with the troubleshooting guide, and work your way through the process that we've outlined.

If you have questions, feel free to reach out to us in the following ways:

Contributing

If you're interested in being a contributor and want to get involved in developing the KubeEdge code, please see CONTRIBUTING for details on submitting patches and the contribution workflow.

Security

Security Audit

A third party security audit of KubeEdge has been completed in July 2022. Additionally, the KubeEdge community completed an overall system security analysis of KubeEdge. The detailed reports are as follows.

Reporting security vulnerabilities

We encourage security researchers, industry organizations and users to proactively report suspected vulnerabilities to our security team ([email protected]), the team will help diagnose the severity of the issue and determine how to address the issue as soon as possible.

For further details please see Security Policy for our security process and how to report vulnerabilities.

License

KubeEdge is under the Apache 2.0 license. See the LICENSE file for details.

kubeedge's People

Contributors

chendave avatar cl2017 avatar daixiang0 avatar dingyin avatar edisonxiang avatar fisherxu avatar gsssc avatar gy95 avatar iceber avatar kadisi avatar kevin-wangzefeng avatar kubeedge-bot avatar kuramal avatar lidiyag avatar ls889 avatar luogangyi avatar luomengy avatar lvchenggang avatar qizha avatar rohitsardesai83 avatar shelley-baoyue avatar sids-b avatar sujithsimon22 avatar vincentgoat avatar wackxu avatar wbc6080 avatar willardhu avatar wujunyi792 avatar zc2638 avatar zhu733756 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kubeedge's Issues

Unit test failing in CI

  • The init() present in : kubeedge/pkg/edgehub/config/config.go, will panic if "kubeedge/pkg/edgehub/config" is imported.

  • This is due to the fact that the binaries are built & run at a temporary location where the config files are not present.

  • Thus, it will cause the unit tests to fail before it even has a chance to execute

Make Verify failing

Which jobs are failing:
verify job has been failing

Reason for failure:
gometalinter binary not found

Multiple data races seen after running edge_core

==================
WARNING: DATA RACE
Read at 0x00c420427730 by goroutine 62:
  reflect.typedmemmove()
      /usr/local/go/src/runtime/mbarrier.go:259 +0x0
  reflect.packEface()
      /usr/local/go/src/reflect/value.go:112 +0x10b
  reflect.valueInterface()
      /usr/local/go/src/reflect/value.go:955 +0x170
  reflect.Value.Interface()
      /usr/local/go/src/reflect/value.go:925 +0x51
  fmt.(*pp).printValue()
      /usr/local/go/src/fmt/print.go:692 +0x3998
  fmt.(*pp).printValue()
      /usr/local/go/src/fmt/print.go:835 +0xe19
  fmt.(*pp).printArg()
      /usr/local/go/src/fmt/print.go:682 +0x19e
  fmt.(*pp).doPrintf()
      /usr/local/go/src/fmt/print.go:996 +0x319
  fmt.Sprintf()
      /usr/local/go/src/fmt/print.go:196 +0x73
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*PodStatus).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:15998 +0x1d9
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*Pod).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:15767 +0x1d7
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*Pod).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:15765 +0x5d
  fmt.(*pp).handleMethods()
      /usr/local/go/src/fmt/print.go:596 +0x3f4
  fmt.(*pp).printArg()
      /usr/local/go/src/fmt/print.go:679 +0x11f
  fmt.(*pp).doPrintf()
      /usr/local/go/src/fmt/print.go:996 +0x319
  fmt.Sprintf()
      /usr/local/go/src/fmt/print.go:196 +0x73
  github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager.(*logger).logf()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager/logger.go:211 +0xc0
  github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager.(*logger).Infof()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager/logger.go:220 +0x73
  github.com/kubeedge/kubeedge/pkg/edged/containers.(*containerManager).computePodActions()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/containers/container_manager.go:299 +0x1e0
  github.com/kubeedge/kubeedge/pkg/edged/containers.(*containerManager).StartPod()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/containers/container_manager.go:598 +0x4a9
  github.com/kubeedge/kubeedge/pkg/edged/dockertools.(*DockerManager).StartPod()
      <autogenerated>:1 +0x73
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).consumePodAddition()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:533 +0xa0c
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).podAddWorkerRun.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:450 +0x787

Previous write at 0x00c420427730 by goroutine 61:
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).updatePodStatus()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:59 +0x2e9
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).Start.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:48 +0x137
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0x6f
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134 +0xcd
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.Until()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x5a

Goroutine 62 (running) created at:
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).podAddWorkerRun()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:429 +0xbd
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:187 +0x1670

Goroutine 61 (running) created at:
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:44 +0xf9
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:185 +0x1656
==================
==================
WARNING: DATA RACE
Read at 0x00c420c29200 by goroutine 62:
  reflect.typedmemmove()
      /usr/local/go/src/runtime/mbarrier.go:259 +0x0
  reflect.packEface()
      /usr/local/go/src/reflect/value.go:112 +0x10b
  reflect.valueInterface()
      /usr/local/go/src/reflect/value.go:955 +0x170
  reflect.Value.Interface()
      /usr/local/go/src/reflect/value.go:925 +0x51
  fmt.(*pp).printValue()
      /usr/local/go/src/fmt/print.go:692 +0x3998
  fmt.(*pp).printValue()
      /usr/local/go/src/fmt/print.go:835 +0xe19
  fmt.(*pp).printArg()
      /usr/local/go/src/fmt/print.go:682 +0x19e
  fmt.(*pp).doPrintf()
      /usr/local/go/src/fmt/print.go:996 +0x319
  fmt.Sprintf()
      /usr/local/go/src/fmt/print.go:196 +0x73
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*PodStatus).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:16004 +0x78e
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*PodStatus).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:16003 +0x66d
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*Pod).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:15767 +0x1d7
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*Pod).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:15765 +0x5d
  fmt.(*pp).handleMethods()
      /usr/local/go/src/fmt/print.go:596 +0x3f4
  fmt.(*pp).printArg()
      /usr/local/go/src/fmt/print.go:679 +0x11f
  fmt.(*pp).doPrintf()
      /usr/local/go/src/fmt/print.go:996 +0x319
  fmt.Sprintf()
      /usr/local/go/src/fmt/print.go:196 +0x73
  github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager.(*logger).logf()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager/logger.go:211 +0xc0
  github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager.(*logger).Infof()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager/logger.go:220 +0x73
  github.com/kubeedge/kubeedge/pkg/edged/containers.(*containerManager).computePodActions()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/containers/container_manager.go:299 +0x1e0
  github.com/kubeedge/kubeedge/pkg/edged/containers.(*containerManager).StartPod()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/containers/container_manager.go:598 +0x4a9
  github.com/kubeedge/kubeedge/pkg/edged/dockertools.(*DockerManager).StartPod()
      <autogenerated>:1 +0x73
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).consumePodAddition()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:533 +0xa0c
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).podAddWorkerRun.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:450 +0x787

Previous write at 0x00c420c29200 by goroutine 61:
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*ContainerStatus).DeepCopyInto()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go:936 +0x48
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*PodStatus).DeepCopyInto()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go:4071 +0x286
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*PodStatus).DeepCopy()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go:4083 +0x5c
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).updatePodStatus()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:57 +0xde
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).Start.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:48 +0x137
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0x6f
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134 +0xcd
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.Until()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x5a

Goroutine 62 (running) created at:
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).podAddWorkerRun()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:429 +0xbd
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:187 +0x1670

Goroutine 61 (running) created at:
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:44 +0xf9
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:185 +0x1656
==================
==================
WARNING: DATA RACE
Read at 0x00c420c2bf00 by goroutine 62:
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*ContainerStateRunning).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:14549 +0x65
  fmt.(*pp).handleMethods()
      /usr/local/go/src/fmt/print.go:596 +0x3f4
  fmt.(*pp).printValue()
      /usr/local/go/src/fmt/print.go:693 +0x3a09
  fmt.(*pp).printValue()
      /usr/local/go/src/fmt/print.go:776 +0x2930
  fmt.(*pp).printValue()
      /usr/local/go/src/fmt/print.go:776 +0x2930
  fmt.(*pp).printValue()
      /usr/local/go/src/fmt/print.go:835 +0xe19
  fmt.(*pp).printArg()
      /usr/local/go/src/fmt/print.go:682 +0x19e
  fmt.(*pp).doPrintf()
      /usr/local/go/src/fmt/print.go:996 +0x319
  fmt.Sprintf()
      /usr/local/go/src/fmt/print.go:196 +0x73
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*PodStatus).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:16004 +0x78e
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*PodStatus).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:16003 +0x66d
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*Pod).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:15767 +0x1d7
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*Pod).String()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/generated.pb.go:15765 +0x5d
  fmt.(*pp).handleMethods()
      /usr/local/go/src/fmt/print.go:596 +0x3f4
  fmt.(*pp).printArg()
      /usr/local/go/src/fmt/print.go:679 +0x11f
  fmt.(*pp).doPrintf()
      /usr/local/go/src/fmt/print.go:996 +0x319
  fmt.Sprintf()
      /usr/local/go/src/fmt/print.go:196 +0x73
  github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager.(*logger).logf()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager/logger.go:211 +0xc0
  github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager.(*logger).Infof()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager/logger.go:220 +0x73
  github.com/kubeedge/kubeedge/pkg/edged/containers.(*containerManager).computePodActions()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/containers/container_manager.go:299 +0x1e0
  github.com/kubeedge/kubeedge/pkg/edged/containers.(*containerManager).StartPod()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/containers/container_manager.go:598 +0x4a9
  github.com/kubeedge/kubeedge/pkg/edged/dockertools.(*DockerManager).StartPod()
      <autogenerated>:1 +0x73
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).consumePodAddition()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:533 +0xa0c
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).podAddWorkerRun.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:450 +0x787

Previous write at 0x00c420c2bf00 by goroutine 61:
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*ContainerState).DeepCopyInto()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go:885 +0x54a
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*ContainerStatus).DeepCopyInto()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go:937 +0xb1
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*PodStatus).DeepCopyInto()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go:4071 +0x286
  github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1.(*PodStatus).DeepCopy()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go:4083 +0x5c
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).updatePodStatus()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:57 +0xde
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).Start.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:48 +0x137
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0x6f
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134 +0xcd
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.Until()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x5a

Goroutine 62 (running) created at:
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).podAddWorkerRun()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:429 +0xbd
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:187 +0x1670

Goroutine 61 (running) created at:
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:44 +0xf9
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:185 +0x1656
==================

Integration test enhancement for DeviceTwin and edged

What would you like to be added:

More integration tests required for DeviceTwin and edged

Why is this needed:

DeviceTwin and Edged have various functionalities, and changes in one file may affect other functionality which depends on that file. Currently we do not have tests for many features/functionality of deviceTwin and edged. Only basic tests are present which do not test all the scenarios.

Extend eventBus to support MQTT connection

The eventBus act as a MQTT client to connect with another MQTT Broker in the current implementation. However, the MQTT broker is not an optinal right now in edge-core since we are relying MQTT to interact between device twin and devices. Also, as a low cost cross-process communication, MQTT is a good choice to interact between applications running on edge and the edge-core.
So, I think we should extend eventBus to be able to accept MQTT messages so that we do not require to install another MQTT broker as a pre-requirement to running edge-core. However, we do not need to implement full mosquitto in this component to keep the edge-core lightweight enough. Here are some of the features we need to implement first:

  1. mqtt protocol V3.1.1 support
  2. qos0 support
  3. No cluster support
  4. user name/password and certification file support for authentication
  5. white list support for the client connection

The eventBus is designed to be a gateway between edge-core and applications/devices on edge so we will foucs on those features to support this purpose and leave the others to those full functional MQTT Broker. So lightweight\performance\security\no cluster should be the key words for this components.

What's your take on that?

Watch functionality for deviceTwin

What would you like to be added:
Can we have a watch kind of functionality in deviceTwin?
In current implementation of deviceTwin, if an app/user wants to get twin of a device, then a message is sent to $hw/event/device/+/twin/get topic and response is sent to $hw/event/device/+/twin/get/result topic. Similar is applicable to membership and device state.
So if an app/user needs to perform some operations based on the twin state of the device, it continuously needs to send a get message and wait for response on get/result topic.
Instead of this we can have a watch kind of functionality, which on change in twin state will publish a message on watch topic. We can have a watch topic for devices.
Following can be the flow.

  1. user/app sends a message on watch topic about which devices twin/membership/state it wants to watch.(step necessary to keep count of user/apps watching on a device)
  2. On update in twin/membership/state, message will be sent on watch topic.
    We can maintain number of user/app watching on a device, so that if no-one is watching, updated state will not be published (will help in reducing number of messages passing in MQTT).
    Example to watch topic:
    a) initialize watch topic: $hw/event/device/+/twin/watch/start
    b) response watch topic: $hw/event/device/+/twin/watch/result

Why is this needed:

  1. Reduce number of get messages flowing in mqtt broker.
  2. Easy of use in performing operations based on devices.

Thoughts ?
cc @qizha @m1093782566 @rohitsardesai83 @skdwriting

Issue with update-gofmt.sh script

What happened:
Running hack/update-gofmt.sh still gives gofmt warning in CI

What you expected to happen:
No warnings in CI

How to reproduce it (as minimally and precisely as possible):
Clone the code
Run hack/update-gofmt.sh

Data race while updating pod status

Compile edge_core with -race flag and run .
The following race condition is detected in the edge_core.log :

2018-12-17 16:46:25.249 +05:30 DEBUG dao/meta.go:48 Update result <nil>
2018-12-17 16:46:25.249 +05:30 ^[[0;34mINFO^[[0m metaclient/metaclient.go:84 send sync message fdfd702e75754499a7268197ab507c4e/nodestatus/52edae5d-5e0e-4b02-b70f-d16ce4a0ae10 successed and response: {{036c45c0-e9aa-40ae-aa04-09263b0fa24e cd1e536c-08e5-4f0e-8bcb-3f9005965067 1545045385249 false} {edged meta response fdfd702e75754499a7268197ab507c4e/nodestatus/52edae5d-5e0e-4b02-b70f-d16ce4a0ae10} OK}
2018-12-17 16:46:25.845 +05:30 ^[[0;34mINFO^[[0m pleg/generic.go:45 GenericLifecycle: Relisting
2018-12-17 16:46:25.856 +05:30 ^[[0;31mERROR^[[0m containers/container_manager.go:926 Cannot get host IP: failed to get network interface: eth0 err:route ip+net: no such network interface
==================
WARNING: DATA RACE
Write at 0x00c420113778 by goroutine 63:
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).updatePodStatus()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:60 +0x394
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).Start.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:48 +0x137
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0x6f
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134 +0xcd
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.Until()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x5a

Previous read at 0x00c420113778 by goroutine 61:
  github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator.(*desiredStateOfWorldPopulator).isPodTerminated()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/desired_state_of_world_populator.go:177 +0x19d
  github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator.(*desiredStateOfWorldPopulator).findAndRemoveDeletedPods()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/desired_state_of_world_populator.go:204 +0x86a
  github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator.(*desiredStateOfWorldPopulator).populatorLoopFunc.func1()
  github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator.(*desiredStateOfWorldPopulator).populatorLoopFunc.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/desired_state_of_world_populator.go:170 +0x2be
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0x6f
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134 +0xcd
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.Until()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x5a
  github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator.(*desiredStateOfWorldPopulator).Run()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/populator/desired_state_of_world_populator.go:138 +0x1b3

Goroutine 63 (running) created at:
  github.com/kubeedge/kubeedge/pkg/edged/pleg.(*GenericLifecycle).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/pleg/generic.go:44 +0xf9
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:185 +0x1656

Goroutine 61 (running) created at:
  github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager.(*volumeManager).Run()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/volume_manager.go:244 +0xc2
==================

2018-12-17 16:46:26.857 +05:30 ^[[0;34mINFO^[[0m pleg/generic.go:45 GenericLifecycle: Relisting

Update README_zh.md

What would you like to be added:
Update README_zh.md to be in sync with README.md

Why is this needed:
This is need so that chinese developers can find link to documents and mailing lists which is updated in latest README.md

Add documentation for edge core modules

This is an umbrella issue to describe how each beehive module in kubeedge works.
The expected output is a document which details the responsibilities of the module , its interfaces with other modules etc.

Sort out kubeedge message topics

The communication between components of kubeedge is based on message. There are some message topics and we need to sort them out in document for the sake of helping contributors/developers understanding kubeedge well.

No 'CONTRIBUTING.md' was found.

Hi all,
I'm from Arm.
My boss and legal department want to check the inbound&outbound license of this project.

Can you add the files of 'CONTRIBUTING.md' ?

In general, the inbound license should be 'Developer Certificate of Origin, version 1.1'.
The outbound license should be 'Apache License 2.0'
And the legal information of inbound license should be in CONTRIBUTING.md.
The legal information of outbound license should be in LICENSE.md.

Please see the links as reference:
https://github.com/opencontainers/runc/blob/master/CONTRIBUTING.md
https://github.com/opencontainers/runc/blob/master/LICENSE
Thanks.

fix golint warnings

Currently code in many directories (excluding vendor, docs, etc.) fails to pass the golint.

Contributors are very welcome to take part in this work. Just leave the directory you want to fix in this issue.

How to do it?
A simple way is

cd ${GOPATH}/src/github.com/kubeedge/kubeedge
# get gometalinter(https://github.com/alecthomas/gometalinter)
curl -L https://git.io/vp6lP | sh
export PATH=${PATH}:${GOPATH}/src/github.com/kubeedge/kubeedge/bin
gometalinter --disable-all --enable=golint --include=<Directory-You-Want-To-Fix> ./...

Then you'll see warnings if any. Just fix them accordingly.

/cc @m1093782566 @Lion-Wei @stewart-yu

Problems in edgehub/config/config.go file

  1. There is no error returned in getControllerConfig() when there are no default values specified. This causes panic while running the edge in cases where their values have not been specified in the config file
  2. Error returned from getWebSocketConfig() is not caught in the init() function
  3. There are a few typographical errors (8 instances of the wrong names being used) while logging warnings & errors in getWebSocketConfig() and getControllerConfig()
  4. handshakeTimeoutDefault is assigned as the default heartbeat instead of heartbeatDefault in getControllerConfig()
  5. write-deadline is loaded from the config file in place of read-deadline in getWebSocketConfig()

CI enhancement

CI while running jobs is cloning code from fork, whereas it should clone from kubeedge master and apply commits of PR in it. Also we need daily build, test jobs.
cc @m1093782566 @rohitsardesai83

Data race while setting write deadline for websocket connection

Build edge_core with -race option go build -race cmd/edge_core.go.
Run edge_core binary.

In the logs , a data race is detected :

==================
WARNING: DATA RACE
Write at 0x00c4203ae320 by goroutine 139:
  github.com/kubeedge/kubeedge/pkg/edgehub/clients/wsclient.(*WebSocketClient).Send()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/github.com/gorilla/websocket/conn.go:770 +0x139
  github.com/kubeedge/kubeedge/pkg/edgehub.(*EdgeHubController).keepalive()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edgehub/controller.go:262 +0x263

Previous write at 0x00c4203ae320 by goroutine 138:
  github.com/kubeedge/kubeedge/pkg/edgehub/clients/wsclient.(*WebSocketClient).Send()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/github.com/gorilla/websocket/conn.go:770 +0x139
  github.com/kubeedge/kubeedge/pkg/edgehub.(*EdgeHubController).sendToCloud()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edgehub/controller.go:211 +0x8e
  github.com/kubeedge/kubeedge/pkg/edgehub.(*EdgeHubController).routeToCloud()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edgehub/controller.go:248 +0x268

Goroutine 139 (running) created at:
  github.com/kubeedge/kubeedge/pkg/edgehub.(*EdgeHubController).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edgehub/controller.go:105 +0x23a
  github.com/kubeedge/kubeedge/pkg/edgehub.(*EdgeHub).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edgehub/module.go:33 +0x81

Goroutine 138 (running) created at:
  github.com/kubeedge/kubeedge/pkg/edgehub.(*EdgeHubController).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edgehub/controller.go:104 +0x215
  github.com/kubeedge/kubeedge/pkg/edgehub.(*EdgeHub).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edgehub/module.go:33 +0x81
==================

Two goroutines "keepalive() and "sendToCloud()" are started in the edge hub which both try to set the write deadline on the web socket connection. The gorilla websocket library doesn't have a lock to prevent data race when two clients attempt to write the timeline.

gorilla/websocket/conn.go

// SetWriteDeadline sets the write deadline on the underlying network
// connection. After a write has timed out, the websocket state is corrupt and
// all future writes will return an error. A zero value for t means writes will
// not time out.
func (c *Conn) SetWriteDeadline(t time.Time) error {
	c.writeDeadline = t
	return nil
}

"make clean" not found to remove the binaries

What would you like to be added:
Implement "make clean" in build steps

Why is this needed:
To remove older binaries. It helps developers to create fresh binaries. Also it can be used in automation script so that the setup always has freshly created binaries, in-case the tests need to be re-executed in current context.

As per README.md, to run edge UT & IT, execute "make test" & "make integration_test", these commands fail

What happened:
As per README.md, after executing "make test" & "make integration_test", the execution fails with error.

ubuntu@ubuntu1804VM:/gopath/src/github.com/kubeedge/kubeedge/edge$ cd ..
ubuntu@ubuntu1804VM:
/gopath/src/github.com/kubeedge/kubeedge$ make test
make: *** No rule to make target 'test'. Stop.

ubuntu@ubuntu1804VM:~/gopath/src/github.com/kubeedge/kubeedge$ make integration_test
make: *** No rule to make target 'integration_test'. Stop.

What you expected to happen:
After execution of the command, UT & IT should had successfully run.

How to reproduce it (as minimally and precisely as possible):
Simply go to ~/gopath/src/github.com/kubeedge/kubeedge path and execute "make test"
Simply go to ~/gopath/src/github.com/kubeedge/kubeedge path and execute "make integration_test"

Anything else we need to know?:

Environment:

  • KubeEdge version: 0.1
  • Hardware configuration: NA
  • OS (e.g. from /etc/os-release): "Ubuntu 18.04.1 LTS"
  • Kernel (e.g. uname -a): NA
  • Others:

Cross build kubeedge

We should be able to cross build kubeedge in different OS X platforms, e.g. {linux, windows, macos} X {amd, arm, ppcp...}

  • cross build for arm #160
  • cross build for macos

Stopping edged doesn't kill containers

What happened:
Deployed an application through cloud. After stopping the edge-core process, the container was still running.

What you expected to happen:
After stopping edge core process, all containers managed by edged should be stopped.

How to reproduce it (as minimally and precisely as possible):

  1. Start edge-core
  2. Deploy an application
  3. Stop edge core

cc @rohitsardesai83 @m1093782566

Data race in edged syncPod()

Build with race flag and start edge_core. Deploy an application from IEF to the edge node. The logs show a data race condition in the syncPod() and StartGarbageCollection() methods in edged.

==================
WARNING: DATA RACE
Write at 0x00c420422008 by goroutine 52:
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).syncPod()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:603 +0xe2d
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:198 +0x1845

Previous read at 0x00c420422008 by goroutine 90:
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).StartGarbageCollection.func2()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:330 +0x4e
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0x6f
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134 +0xcd
  github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait.Until()
      /home/root1/go/src/github.com/kubeedge/kubeedge/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x5a

Goroutine 52 (running) created at:
  github.com/kubeedge/kubeedge/beehive/pkg/core.StartModules()
      /home/root1/go/src/github.com/kubeedge/kubeedge/beehive/pkg/core/core.go:22 +0x196
  github.com/kubeedge/kubeedge/beehive/pkg/core.Run()
      /home/root1/go/src/github.com/kubeedge/kubeedge/beehive/pkg/core/core.go:46 +0x2f
  main.main()
      /home/root1/go/src/github.com/kubeedge/kubeedge/cmd/edge_core.go:18 +0x34

Goroutine 90 (running) created at:
2018-12-17 16:46:24.881 +05:30 ^[[0;34mINFO^[[0m edged/edged.go:438 worker [4] get pod addition item [deploy-01-76dc756fd5-ck8tf]
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).StartGarbageCollection()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:329 +0x193
  github.com/kubeedge/kubeedge/pkg/edged.(*edged).Start()
      /home/root1/go/src/github.com/kubeedge/kubeedge/pkg/edged/edged.go:197 +0x1834

==================

Prefix Comparison Issue

The comparison of incoming topic with LifeCycleConnectETPrefix and LifeCycleDisconnectETPrefix was failing due to presence of a extra quotes.

Realign code structure to incorporate cloud part

What would you like to be added:
The code structuring needs to be changed in order to add the cloud part modules.

Why is this needed:
Code modularity will help in easy maintenance once the cloud part is opensourced.
This will help reusing common framework like beehive , maintaing a common vendor package for both cloud and edge modules.

There is a potential to not release the lock

	context.Lock(deviceID)
	doc, docExist := context.DeviceList.Load(deviceID)
	if !docExist {
		return nil, nil
	}
	device, ok := doc.(*dttype.Device)
	if !ok {
		return nil, nil
	}
	if strings.Compare("online", updateDevice.State) != 0 && strings.Compare("offline", updateDevice.State) != 0 && strings.Compare("unknown", updateDevice.State) != 0 {
		return nil, nil
	}
        ...
        context.Unlock(deviceID)
	return nil, nil

Create 0.1 release

  1. create a new make quick-release command in Makefile to auto compile and make release tarball.

  2. upload the release tarball and write a release note file.

cc @islinwb @Lion-Wei

Add ReadTheDocs.io support. Update the documentation.

The current documentation is maintained in plain markdown files in the docs folder.
To better organise and have a searchable documentation website it was decided to integrate with readthedocs.io
The following tasks need to be done for the same:

  • Install and configure readthedocs.
  • Rearrange the docs folder
  • Format the documentation.
  • Integrate with readthedocs site.
  • Provide link on main website kubeedge.io

DTWorker interface has PreDeal /Deal /PostDeal methods which have empty implementations.

DTWorker interface (pkg/devicetwin/dtmanager/dtworker.go ) has PreDeal /Deal /PostDeal methods.
The below go files have an empty implementation of these interface methods.

  • pkg\devicetwin\dtmanager\device.go
  • pkg\devicetwin\dtmanager\communicate.go
  • pkg\devicetwin\dtmanager\membership.go
  • pkg\devicetwin\dtmanager\twin.go

Are these methods required or can be removed ?

Does kubeedge synchronize podstatus correctly?

I see metaManager try to synchronize podstatus in database to cloud per minute, however it look like edged never send podstatus message to metaManager, so podstatus won't be recorded in database.
Should struct GenericLifecycle send podstatus to metaManager in function updatePodStatus(pod *v1.Pod) ?

Addressing licensing issues in kubeedge

What would you like to be added:
Licensing terms to be added in kubeedge

Why is this needed:
Kubeedge opensource code has to adhere to apache 2.0 licensing terms and rules. Hence it is required to mention about it in the edged code.

Are environment variable for gpu set correctly?

Is this a bug report?
I have tried to allocate one gpu to a container by device-plugin, and found the container get all the gpus every time. At the same time, the allocatable resource number for "nvidia.com/gpu" in database didn't change.
In file /kubeedge/pkg/edged/containers/container_manager.go, in line 624. When kubeedge gets the opts, I guess kubeedge should set opts.Env to container.Env

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.