summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloud/cmd/cloudcore/app/server.go3
-rw-r--r--cloud/pkg/cloudhub/config/config.go2
-rw-r--r--cloud/pkg/cloudhub/servers/httpserver/server.go13
3 files changed, 17 insertions, 1 deletions
diff --git a/cloud/cmd/cloudcore/app/server.go b/cloud/cmd/cloudcore/app/server.go
index 90296664e..93e21cb8f 100644
--- a/cloud/cmd/cloudcore/app/server.go
+++ b/cloud/cmd/cloudcore/app/server.go
@@ -13,6 +13,7 @@ import (
"github.com/kubeedge/beehive/pkg/core"
"github.com/kubeedge/kubeedge/cloud/cmd/cloudcore/app/options"
"github.com/kubeedge/kubeedge/cloud/pkg/cloudhub"
+ hubconfig "github.com/kubeedge/kubeedge/cloud/pkg/cloudhub/config"
"github.com/kubeedge/kubeedge/cloud/pkg/cloudstream"
"github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller"
"github.com/kubeedge/kubeedge/cloud/pkg/edgecontroller"
@@ -61,8 +62,8 @@ kubernetes controller which manages devices so that the device metadata/status d
// If leader election is enabled, runCommand via LeaderElector until done and exit.
if config.LeaderElection.LeaderElect {
- //TODO: expose electionChecker to a http server
electionChecker := kele.NewLeaderReadyzAdaptor(time.Second * 20)
+ hubconfig.Config.Checker = electionChecker
kele.Run(config, electionChecker)
return
}
diff --git a/cloud/pkg/cloudhub/config/config.go b/cloud/pkg/cloudhub/config/config.go
index 002663fe1..5427f027f 100644
--- a/cloud/pkg/cloudhub/config/config.go
+++ b/cloud/pkg/cloudhub/config/config.go
@@ -11,6 +11,7 @@ import (
"github.com/kubeedge/kubeedge/cloud/pkg/client/clientset/versioned"
syncinformer "github.com/kubeedge/kubeedge/cloud/pkg/client/informers/externalversions/reliablesyncs/v1alpha1"
synclister "github.com/kubeedge/kubeedge/cloud/pkg/client/listers/reliablesyncs/v1alpha1"
+ kele "github.com/kubeedge/kubeedge/cloud/pkg/leaderelection"
"github.com/kubeedge/kubeedge/pkg/apis/componentconfig/cloudcore/v1alpha1"
)
@@ -24,6 +25,7 @@ type Configure struct {
CaKey []byte
Cert []byte
Key []byte
+ Checker *kele.ReadyzAdaptor
}
func InitConfigure(hub *v1alpha1.CloudHub, kubeAPIConfig *v1alpha1.KubeAPIConfig) {
diff --git a/cloud/pkg/cloudhub/servers/httpserver/server.go b/cloud/pkg/cloudhub/servers/httpserver/server.go
index 3429843da..29a1c83c4 100644
--- a/cloud/pkg/cloudhub/servers/httpserver/server.go
+++ b/cloud/pkg/cloudhub/servers/httpserver/server.go
@@ -45,6 +45,7 @@ func StartHTTPServer() {
router := mux.NewRouter()
router.HandleFunc("/edge.crt", edgeCoreClientCert).Methods("GET")
router.HandleFunc("/ca.crt", getCA).Methods("GET")
+ router.HandleFunc("/readyz", electionHandler).Methods("GET")
addr := fmt.Sprintf("%s:%d", hubconfig.Config.HTTPS.Address, hubconfig.Config.HTTPS.Port)
@@ -71,6 +72,18 @@ func getCA(w http.ResponseWriter, r *http.Request) {
w.Write(caCertDER)
}
+//electionHandler returns the status whether the cloudcore is ready
+func electionHandler(w http.ResponseWriter, r *http.Request) {
+ checker := hubconfig.Config.Checker
+ if checker.Check(r) != nil {
+ w.WriteHeader(http.StatusNotFound)
+ w.Write([]byte(fmt.Sprintf("Cloudcore is not ready")))
+ } else {
+ w.WriteHeader(http.StatusOK)
+ w.Write([]byte(fmt.Sprintf("Cloudcore is ready")))
+ }
+}
+
// EncodeCertPEM returns PEM-endcoded certificate data
func EncodeCertPEM(cert *x509.Certificate) []byte {
block := pem.Block{