summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfisherxu <xufei40@huawei.com>2020-02-20 11:54:44 +0800
committerfisherxu <xufei40@huawei.com>2020-02-28 14:53:47 +0800
commita5000ee1e8dea3939de359fd4a3916c5d625df01 (patch)
treedeb8d9c08ae51001dee4a8edb642287d61e1025d
parentrefactor keadm that don't own to install k8s and docker (diff)
downloadkubeedge-a5000ee1e8dea3939de359fd4a3916c5d625df01.tar.gz
create crd
-rw-r--r--keadm/cmd/keadm/app/cmd/util/cloudinstaller.go2
-rw-r--r--keadm/cmd/keadm/app/cmd/util/common.go3
-rw-r--r--keadm/cmd/keadm/app/cmd/util/k8sinstaller.go88
-rw-r--r--keadm/cmd/keadm/app/cmd/util/ubuntuinstaller.go15
4 files changed, 100 insertions, 8 deletions
diff --git a/keadm/cmd/keadm/app/cmd/util/cloudinstaller.go b/keadm/cmd/keadm/app/cmd/util/cloudinstaller.go
index 5bcf36702..701301b19 100644
--- a/keadm/cmd/keadm/app/cmd/util/cloudinstaller.go
+++ b/keadm/cmd/keadm/app/cmd/util/cloudinstaller.go
@@ -154,7 +154,7 @@ func (cu *KubeCloudInstTool) RunCloudCore() error {
fmt.Println(cmd.GetStdOutput())
if cu.ToolVersion >= "1.1.0" {
- fmt.Println("KubeEdge cloudcore is running, For logs visit: ", KubeEdgeLogPath)
+ fmt.Println("KubeEdge cloudcore is running, For logs visit: ", KubeEdgeLogPath+KubeCloudBinaryName+".log")
} else {
fmt.Println("KubeEdge cloudcore is running, For logs visit", KubeEdgePath+"kubeedge/cloud/")
}
diff --git a/keadm/cmd/keadm/app/cmd/util/common.go b/keadm/cmd/keadm/app/cmd/util/common.go
index 6bb36e6b9..5baacd4ca 100644
--- a/keadm/cmd/keadm/app/cmd/util/common.go
+++ b/keadm/cmd/keadm/app/cmd/util/common.go
@@ -58,6 +58,9 @@ const (
KubeEdgeEdgeCoreNewYaml = KubeEdgeNewConfigDir + "edgecore.yaml"
KubeEdgeLogPath = "/var/log/kubeedge/"
+ KubeEdgeCrdPath = KubeEdgePath + "crds"
+
+ KubeEdgeCRDDownloadURL = "https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds"
InterfaceName = "eth0"
)
diff --git a/keadm/cmd/keadm/app/cmd/util/k8sinstaller.go b/keadm/cmd/keadm/app/cmd/util/k8sinstaller.go
index b60c8c332..b723ea75b 100644
--- a/keadm/cmd/keadm/app/cmd/util/k8sinstaller.go
+++ b/keadm/cmd/keadm/app/cmd/util/k8sinstaller.go
@@ -18,6 +18,14 @@ package util
import (
"fmt"
+ "io/ioutil"
+ "os"
+
+ "github.com/ghodss/yaml"
+
+ apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+ crdclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
)
//K8SInstTool embedes Common struct and contains the default K8S version and
@@ -39,9 +47,89 @@ func (ks *K8SInstTool) InstallTools() error {
fmt.Println("Kubernetes version verification passed, KubeEdge installation will start...")
+ err = installCRDs(ks.KubeConfig, ks.Master)
+ if err != nil {
+ return err
+ }
+
return nil
}
+func installCRDs(kubeConfig, master string) error {
+ config, err := BuildConfig(kubeConfig, master)
+ if err != nil {
+ return fmt.Errorf("Failed to build config, err: %v", err)
+ }
+
+ crdClient, err := crdclient.NewForConfig(config)
+ if err != nil {
+ return err
+ }
+
+ // Todo: need to add the crds ro release package
+ // create the dir for kubeedge crd
+ err = os.MkdirAll(KubeEdgeCrdPath+"/devices", os.ModePerm)
+ if err != nil {
+ return fmt.Errorf("not able to create %s folder path", KubeEdgeLogPath)
+ }
+ for _, crdFile := range []string{"devices/devices_v1alpha1_device.yaml",
+ "devices/devices_v1alpha1_devicemodel.yaml"} {
+ //Download the tar from repo
+ dwnldURL := fmt.Sprintf("cd %s && wget -k --no-check-certificate --progress=bar:force %s/%s", KubeEdgeCrdPath+"/devices", KubeEdgeCRDDownloadURL, crdFile)
+ _, err := runCommandWithShell(dwnldURL)
+ if err != nil {
+ return err
+ }
+
+ // not found err, create crd from crd file
+ err = createKubeEdgeCRD(crdClient, KubeEdgeCrdPath+"/"+crdFile)
+ if err != nil && !apierrors.IsAlreadyExists(err) {
+ return err
+ }
+ }
+
+ // Todo: need to add the crds ro release package
+ // create the dir for kubeedge crd
+ err = os.MkdirAll(KubeEdgeCrdPath+"/reliablesyncs", os.ModePerm)
+ if err != nil {
+ return fmt.Errorf("not able to create %s folder path", KubeEdgeLogPath)
+ }
+ for _, crdFile := range []string{"reliablesyncs/cluster_objectsync_v1alpha1.yaml",
+ "reliablesyncs/objectsync_v1alpha1.yaml"} {
+ //Download the tar from repo
+ dwnldURL := fmt.Sprintf("cd %s && wget -k --no-check-certificate --progress=bar:force %s/%s", KubeEdgeCrdPath+"/reliablesyncs", KubeEdgeCRDDownloadURL, crdFile)
+ _, err := runCommandWithShell(dwnldURL)
+ if err != nil {
+ return err
+ }
+
+ // not found err, create crd from crd file
+ err = createKubeEdgeCRD(crdClient, KubeEdgeCrdPath+"/"+crdFile)
+ if err != nil && !apierrors.IsAlreadyExists(err) {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func createKubeEdgeCRD(clientset crdclient.Interface, crdFile string) error {
+ content, err := ioutil.ReadFile(crdFile)
+ if err != nil {
+ return fmt.Errorf("read crd yaml error: %v", err)
+ }
+
+ kubeEdgeCRD := &apiextensionsv1beta1.CustomResourceDefinition{}
+ err = yaml.Unmarshal(content, kubeEdgeCRD)
+ if err != nil {
+ return fmt.Errorf("unmarshal tfjobCRD error: %v", err)
+ }
+
+ _, err = clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Create(kubeEdgeCRD)
+
+ return err
+}
+
//TearDown shoud uninstall K8S, but it is not required either for cloud or edge node.
//It is defined so that K8SInstTool implements ToolsInstaller interface
func (ks *K8SInstTool) TearDown() error {
diff --git a/keadm/cmd/keadm/app/cmd/util/ubuntuinstaller.go b/keadm/cmd/keadm/app/cmd/util/ubuntuinstaller.go
index 23c9d63ab..9eee8c687 100644
--- a/keadm/cmd/keadm/app/cmd/util/ubuntuinstaller.go
+++ b/keadm/cmd/keadm/app/cmd/util/ubuntuinstaller.go
@@ -73,7 +73,7 @@ func (u *UbuntuOS) InstallMQTT() error {
// IsK8SComponentInstalled checks if said K8S version is already installed in the host
func (u *UbuntuOS) IsK8SComponentInstalled(kubeConfig, master string) error {
- config, err := buildConfig(kubeConfig, master)
+ config, err := BuildConfig(kubeConfig, master)
if err != nil {
return fmt.Errorf("Failed to build config, err: %v", err)
}
@@ -83,6 +83,7 @@ func (u *UbuntuOS) IsK8SComponentInstalled(kubeConfig, master string) error {
return fmt.Errorf("Failed to init discovery client, err: %v", err)
}
+ discoveryClient.RESTClient().Post()
serverVersion, err := discoveryClient.ServerVersion()
if err != nil {
return fmt.Errorf("Failed to get the version of K8s master, please check whether K8s was successfully installed, err: %v", err)
@@ -180,9 +181,9 @@ SKIPDOWNLOADAND:
// Compatible with 1.0.0
var untarFileAndMoveEdgeCore, moveCloudCore string
if u.KubeEdgeVersion >= "1.1.0" {
- untarFileAndMoveEdgeCore = fmt.Sprintf("cd %s && tar -C %s -xvzf %s && cp %s%s/edge/%s %s/.",
+ untarFileAndMoveEdgeCore = fmt.Sprintf("cd %s && tar -C %s -xvzf %s && cp %s%s/edge/%s %s/",
KubeEdgePath, KubeEdgePath, filename, KubeEdgePath, dirname, KubeEdgeBinaryName, KubeEdgeUsrBinPath)
- moveCloudCore = fmt.Sprintf("cd %s && cp %s%s/cloud/cloudcore/%s %s/.",
+ moveCloudCore = fmt.Sprintf("cd %s && cp %s%s/cloud/cloudcore/%s %s/",
KubeEdgePath, KubeEdgePath, dirname, KubeCloudBinaryName, KubeEdgeUsrBinPath)
} else {
untarFileAndMoveEdgeCore = fmt.Sprintf("cd %s && tar -C %s -xvzf %s && cp %skubeedge/edge/%s %s/.",
@@ -236,9 +237,9 @@ func (u *UbuntuOS) RunEdgeCore() error {
fmt.Println(cmd.GetStdOutput())
if u.KubeEdgeVersion >= "1.1.0" {
- fmt.Println("KubeEdge edge core is running, For logs visit: ", KubeEdgeLogPath)
+ fmt.Println("KubeEdge edgecore is running, For logs visit: ", KubeEdgeLogPath+KubeEdgeBinaryName+".log")
} else {
- fmt.Println("KubeEdge edge core is running, For logs visit", KubeEdgePath, "kubeedge/edge/")
+ fmt.Println("KubeEdge edgecore is running, For logs visit", KubeEdgePath, "kubeedge/edge/")
}
return nil
@@ -251,7 +252,7 @@ func (u *UbuntuOS) KillKubeEdgeBinary(proc string) error {
cmd.ExecuteCommand()
if u.KubeEdgeVersion >= "1.1.0" {
- fmt.Println("KubeEdge is stopped, For logs visit: ", KubeEdgeLogPath)
+ fmt.Println("KubeEdge", proc, "is stopped, For logs visit: ", KubeEdgeLogPath)
} else {
fmt.Println("KubeEdge is stopped, For logs visit", KubeEdgePath+"kubeedge/edge/")
}
@@ -291,7 +292,7 @@ func runCommandWithShell(command string) (string, error) {
}
// build Config from flags
-func buildConfig(kubeConfig, master string) (conf *rest.Config, err error) {
+func BuildConfig(kubeConfig, master string) (conf *rest.Config, err error) {
config, err := clientcmd.BuildConfigFromFlags(master, kubeConfig)
if err != nil {
return nil, err