add skip pre pull images

Signed-off-by: pixiake <guofeng@yunify.com>
This commit is contained in:
pixiake 2020-07-31 16:47:49 +08:00
parent fb361c54df
commit dc48261384
13 changed files with 88 additions and 41 deletions

24
Makefile Normal file
View File

@ -0,0 +1,24 @@
.PHONY: build
build: build-linux-amd64 build-linux-arm64
build-linux-amd64:
docker run --rm \
-v $(shell pwd):/usr/src/myapp \
-e GOOS=linux \
-e GOARCH=amd64 \
-e CGO_ENABLED=0 \
-e GO111MODULE=on \
-w /usr/src/myapp golang:1.14 \
go build -v -o output/linux/amd64/kk ./kubekey.go # linux
sha256sum output/linux/amd64/kk || shasum -a 256 output/linux/amd64/kk
build-linux-arm64:
docker run --rm \
-v $(shell pwd):/usr/src/myapp \
-e GOOS=linux \
-e GOARCH=arm64 \
-e CGO_ENABLED=0 \
-e GO111MODULE=on \
-w /usr/src/myapp golang:1.14 \
go build -v -o output/linux/arm64/kk ./kubekey.go # linux
sha256sum output/linux/arm64/kk || shasum -a 256 output/linux/arm64/kk

View File

@ -33,7 +33,7 @@ var clusterCmd = &cobra.Command{
ksVersion = ""
}
logger := util.InitLogger(opt.Verbose)
return install.CreateCluster(opt.ClusterCfgFile, opt.Kubernetes, ksVersion, logger, opt.Kubesphere, opt.Verbose, opt.SkipCheck)
return install.CreateCluster(opt.ClusterCfgFile, opt.Kubernetes, ksVersion, logger, opt.Kubesphere, opt.Verbose, opt.SkipCheck, opt.SkipPullImages)
},
}
@ -44,4 +44,5 @@ func init() {
clusterCmd.Flags().StringVarP(&opt.Kubernetes, "with-kubernetes", "", "", "Specify a supported version of kubernetes")
clusterCmd.Flags().BoolVarP(&opt.Kubesphere, "with-kubesphere", "", false, "Deploy a specific version of kubesphere (default v3.0.0)")
clusterCmd.Flags().BoolVarP(&opt.SkipCheck, "yes", "y", false, "Skip pre-check of the installation")
clusterCmd.Flags().BoolVarP(&opt.SkipPullImages, "skip-pull-images", "", false, "Skip pre pull images")
}

View File

@ -32,6 +32,7 @@ type Options struct {
Kubernetes string
Kubesphere bool
SkipCheck bool
SkipPullImages bool
}
var (

View File

@ -27,7 +27,7 @@ var scaleCmd = &cobra.Command{
Short: "Scale a cluster according to the new nodes information from the specified configuration file",
RunE: func(cmd *cobra.Command, args []string) error {
logger := util.InitLogger(opt.Verbose)
return scale.ScaleCluster(opt.ClusterCfgFile, "", "", logger, false, opt.Verbose, opt.SkipCheck)
return scale.ScaleCluster(opt.ClusterCfgFile, "", "", logger, false, opt.Verbose, opt.SkipCheck, opt.SkipPullImages)
},
}
@ -35,4 +35,5 @@ func init() {
rootCmd.AddCommand(scaleCmd)
scaleCmd.Flags().StringVarP(&opt.ClusterCfgFile, "file", "f", "", "Path to a configuration file")
scaleCmd.Flags().BoolVarP(&opt.SkipCheck, "yes", "y", false, "Skip pre-check of the installation")
scaleCmd.Flags().BoolVarP(&opt.SkipPullImages, "skip-pull-images", "", false, "Skip pre pull images")
}

View File

@ -33,7 +33,7 @@ var upgradeCmd = &cobra.Command{
} else {
ksVersion = ""
}
return upgrade.UpgradeCluster(opt.ClusterCfgFile, opt.Kubernetes, ksVersion, logger, opt.Kubesphere, opt.Verbose)
return upgrade.UpgradeCluster(opt.ClusterCfgFile, opt.Kubernetes, ksVersion, logger, opt.Kubesphere, opt.Verbose, opt.SkipPullImages)
},
}
@ -42,4 +42,5 @@ func init() {
upgradeCmd.Flags().StringVarP(&opt.ClusterCfgFile, "file", "f", "", "Path to a configuration file")
upgradeCmd.Flags().StringVarP(&opt.Kubernetes, "with-kubernetes", "", "", "Specify a supported version of kubernetes")
upgradeCmd.Flags().BoolVarP(&opt.Kubesphere, "with-kubesphere", "", false, "Deploy a specific version of kubesphere (default v3.0.0)")
upgradeCmd.Flags().BoolVarP(&opt.SkipPullImages, "skip-pull-images", "", false, "Skip pre pull images")
}

View File

@ -107,10 +107,19 @@ func initKubernetesCluster(mgr *manager.Manager, node *kubekeyapi.HostCfg, _ ssh
return errors.Wrap(errors.WithStack(err1), "Failed to generate kubeadm config")
}
_, err2 := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"/usr/local/bin/kubeadm init --config=/etc/kubernetes/kubeadm-config.yaml\"", 3, true)
if err2 != nil {
return errors.Wrap(errors.WithStack(err2), "Failed to init kubernetes cluster")
for i := 0; i < 3; i++ {
_, err2 := mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"/usr/local/bin/kubeadm init --config=/etc/kubernetes/kubeadm-config.yaml\"", 0, true)
if err2 != nil {
if i == 2 {
return errors.Wrap(errors.WithStack(err2), "Failed to init kubernetes cluster")
} else {
_, _ = mgr.Runner.ExecuteCmd("sudo -E /bin/sh -c \"/usr/local/bin/kubeadm reset -f\"", 0, true)
}
} else {
break
}
}
if err3 := GetKubeConfig(mgr); err3 != nil {
return err3
}

View File

@ -10,9 +10,15 @@ import (
)
func PrePullImages(mgr *manager.Manager) error {
mgr.Logger.Infoln("Start to download images on all nodes")
return mgr.RunTaskOnAllNodes(PullImages, true)
if !mgr.SkipPullImages {
mgr.Logger.Infoln("Start to download images on all nodes")
if err := mgr.RunTaskOnAllNodes(PullImages, true); err != nil {
return err
}
}
return nil
}
func PullImages(mgr *manager.Manager, node *kubekeyapi.HostCfg, _ ssh.Connection) error {

View File

@ -36,7 +36,7 @@ func ResetCluster(clusterCfgFile string, logger *log.Logger, verbose bool) error
return errors.Wrap(err, "Failed to download cluster config")
}
return Execute(executor.NewExecutor(&cfg.Spec, logger, verbose, false))
return Execute(executor.NewExecutor(&cfg.Spec, logger, verbose, false, true))
}
func Execute(executor *executor.Executor) error {

View File

@ -35,7 +35,7 @@ import (
"path/filepath"
)
func CreateCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Logger, ksEnabled, verbose, skipCheck bool) error {
func CreateCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Logger, ksEnabled, verbose, skipCheck, skipPullImages bool) error {
currentDir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
return errors.Wrap(err, "Faild to get current dir")
@ -49,7 +49,7 @@ func CreateCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Log
return errors.Wrap(err, "Failed to download cluster config")
}
return Execute(executor.NewExecutor(&cfg.Spec, logger, verbose, skipCheck))
return Execute(executor.NewExecutor(&cfg.Spec, logger, verbose, skipCheck, skipPullImages))
}
func ExecTasks(mgr *manager.Manager) error {

View File

@ -32,7 +32,7 @@ import (
"path/filepath"
)
func ScaleCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Logger, ksEnabled, verbose, skipCheck bool) error {
func ScaleCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Logger, ksEnabled, verbose, skipCheck, skipPullImages bool) error {
currentDir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
return errors.Wrap(err, "Faild to get current dir")
@ -46,7 +46,7 @@ func ScaleCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Logg
return errors.Wrap(err, "Failed to download cluster config")
}
return Execute(executor.NewExecutor(&cfg.Spec, logger, verbose, skipCheck))
return Execute(executor.NewExecutor(&cfg.Spec, logger, verbose, skipCheck, skipPullImages))
}
func ExecTasks(mgr *manager.Manager) error {

View File

@ -30,7 +30,7 @@ import (
"path/filepath"
)
func UpgradeCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Logger, ksEnabled, verbose bool) error {
func UpgradeCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Logger, ksEnabled, verbose, skipPullImages bool) error {
currentDir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
return errors.Wrap(err, "Faild to get current dir")
@ -44,7 +44,7 @@ func UpgradeCluster(clusterCfgFile, k8sVersion, ksVersion string, logger *log.Lo
return errors.Wrap(err, "Failed to download cluster config")
}
return Execute(executor.NewExecutor(&cfg.Spec, logger, verbose, true))
return Execute(executor.NewExecutor(&cfg.Spec, logger, verbose, true, skipPullImages))
}
func ExecTasks(mgr *manager.Manager) error {

View File

@ -28,18 +28,20 @@ import (
)
type Executor struct {
Cluster *kubekeyapi.ClusterSpec
Logger *log.Logger
Debug bool
SkipCheck bool
Cluster *kubekeyapi.ClusterSpec
Logger *log.Logger
Debug bool
SkipCheck bool
SkipPullImages bool
}
func NewExecutor(cluster *kubekeyapi.ClusterSpec, logger *log.Logger, debug,skipCheck bool) *Executor {
func NewExecutor(cluster *kubekeyapi.ClusterSpec, logger *log.Logger, debug, skipCheck, skipPullImages bool) *Executor {
return &Executor{
Cluster: cluster,
Logger: logger,
Debug: debug,
SkipCheck: skipCheck,
Cluster: cluster,
Logger: logger,
Debug: debug,
SkipCheck: skipCheck,
SkipPullImages: skipPullImages,
}
}
@ -60,7 +62,8 @@ func (executor *Executor) CreateManager() (*manager.Manager, error) {
mgr.KsVersion = executor.Cluster.KubeSphere.Version
mgr.Logger = executor.Logger
mgr.Debug = executor.Debug
mgr.SkipCheck = executor.SkipCheck
mgr.SkipCheck = executor.SkipCheck
mgr.SkipPullImages = executor.SkipPullImages
return mgr, nil
}

View File

@ -24,22 +24,23 @@ import (
)
type Manager struct {
Cluster *kubekeyapi.ClusterSpec
Logger log.FieldLogger
Connector *ssh.Dialer
Runner *runner.Runner
AllNodes []kubekeyapi.HostCfg
EtcdNodes []kubekeyapi.HostCfg
MasterNodes []kubekeyapi.HostCfg
WorkerNodes []kubekeyapi.HostCfg
K8sNodes []kubekeyapi.HostCfg
ClientNode []kubekeyapi.HostCfg
ClusterHosts []string
WorkDir string
KsEnable bool
KsVersion string
Debug bool
SkipCheck bool
Cluster *kubekeyapi.ClusterSpec
Logger log.FieldLogger
Connector *ssh.Dialer
Runner *runner.Runner
AllNodes []kubekeyapi.HostCfg
EtcdNodes []kubekeyapi.HostCfg
MasterNodes []kubekeyapi.HostCfg
WorkerNodes []kubekeyapi.HostCfg
K8sNodes []kubekeyapi.HostCfg
ClientNode []kubekeyapi.HostCfg
ClusterHosts []string
WorkDir string
KsEnable bool
KsVersion string
Debug bool
SkipCheck bool
SkipPullImages bool
}
func (mgr *Manager) Copy() *Manager {