1、在线部署时候cloud端需要下载的文件,所以想要离线部署,先提前将这些文件下载好放到固定路径下:
以下5个文件提前下载放到:/etc/kubeedge/下
devices_v1alpha2_device.yaml
devices_v1alpha2_devicemodel.yaml
cluster_objectsync_v1alpha1.yaml
objectsync_v1alpha1.yaml
kubeedge-v1.5.0-linux-amd64.tar.gz
//放置的位置如下:/etc/kubeedge/
[root@master kubeedge]# tree
.
├── cloudcore.service
├── config
│ └── cloudcore.yaml
├── crds
│ ├── devices
│ │ ├── devices_v1alpha2_devicemodel.yaml
│ │ └── devices_v1alpha2_device.yaml
│ └── reliablesyncs
│ ├── cluster_objectsync_v1alpha1.yaml
│ └── objectsync_v1alpha1.yaml
|
└── kubeedge-v1.5.0-linux-amd64.tar.gz
上述均下载好后,keadm在部署的时候还是会拉取一个这个包,所以修改源码时候简单粗暴的方法就是将这个在线checksum逻辑删除,高级些你可以改成离线checksum。
因而修改keadm源码如下:checkSum的逻辑/* 注释掉
vim keadm/cmd/keadm/app/cmd/util/common.go
if _, err = os.Stat(filePath); err == nil {
fmt.Printf("Expected or Default KubeEdge version %v is already downloaded and will checksum for it. \n", version)
fmt.Println("Expected or Default KubeEdge version", version, "is already downloaded")
/*if success, _ := checkSum(filename, checksumFilename, version, options.TarballPath); !success {
fmt.Printf("%v in your path checksum failed and do you want to delete this file and try to download again? \n", filename)
for {
confirm, err := askForconfirm()
if err != nil {
fmt.Println(err.Error())
continue
}
if confirm {
cmdStr := fmt.Sprintf("cd %s && rm -f %s", options.TarballPath, filename)
if err := NewCommand(cmdStr).Exec(); err != nil {
return err
}
klog.Infof("%v have been deleted and will try to download again", filename)
if err := retryDownload(filename, checksumFilename, version, options.TarballPath); err != nil {
return err
}
} else {
klog.Warningf("failed to checksum and will continue to install.")
}
break
}
} else {
fmt.Println("Expected or Default KubeEdge version", version, "is already downloaded")
}*/
}
2、在线部署时候edge端需要下载的文件,所以想要离线部署,先提前将这些文件下载好放到固定路径下
下载文件1个,放入/etc/kubeedge 目录下
kubeedge-v1.5.0-linux-amd64.tar.gz
但是edge端会在线安装两个rpm包:和
两个包,所以需要提前将这俩包在边缘节点安装好。然后修改keadm源码不安装这俩包即可//"yum -y install epel-release", //"yum -y install mosquitto", 注释掉即可
vim keadm/cmd/keadm/app/cmd/util/rpminstaller.go
func (r *RpmOS) InstallMQTT() error {
// check MQTT
cmd := NewCommand("ps aux |awk '/mosquitto/ {print $1}' | awk '/mosquit/ {print}'")
if err := cmd.Exec(); err != nil {
return err
}
if stdout := cmd.GetStdOut(); stdout != "" {
fmt.Println("Host has", stdout, "already installed and running. Hence skipping the installation steps !!!")
return nil
}
// install MQTT
for _, command := range []string{
//"yum -y install epel-release",
//"yum -y install mosquitto",
"systemctl start mosquitto",
"systemctl enable mosquitto",
} {
cmd := NewCommand(command)
if err := cmd.Exec(); err != nil {
return err
}
}
fmt.Println("install MQTT service successfully.")
return nil
}
然后编译keadm即可。
剩下的keadm安装教程 可以参考官网 或着其他文档即可。