diff options
| author | fisherxu <xufei40@huawei.com> | 2020-02-20 11:54:44 +0800 |
|---|---|---|
| committer | fisherxu <xufei40@huawei.com> | 2020-02-28 14:53:47 +0800 |
| commit | a5000ee1e8dea3939de359fd4a3916c5d625df01 (patch) | |
| tree | deb8d9c08ae51001dee4a8edb642287d61e1025d | |
| parent | refactor keadm that don't own to install k8s and docker (diff) | |
| download | kubeedge-a5000ee1e8dea3939de359fd4a3916c5d625df01.tar.gz | |
create crd
| -rw-r--r-- | keadm/cmd/keadm/app/cmd/util/cloudinstaller.go | 2 | ||||
| -rw-r--r-- | keadm/cmd/keadm/app/cmd/util/common.go | 3 | ||||
| -rw-r--r-- | keadm/cmd/keadm/app/cmd/util/k8sinstaller.go | 88 | ||||
| -rw-r--r-- | keadm/cmd/keadm/app/cmd/util/ubuntuinstaller.go | 15 |
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 |
