From 5d49de5b66d45889184068c4b9e2d071a36f9d6c Mon Sep 17 00:00:00 2001 From: easter1007 Date: Wed, 30 Aug 2023 10:50:47 +0800 Subject: [PATCH] add worker node config --- app/apis/nkd/const.go | 24 +++- app/apis/nkd/types.go | 76 ++++++++---- app/cmd/cmd.go | 1 - app/cmd/config.go | 2 +- app/cmd/init.go | 18 ++- app/cmd/phases/config/print.go | 175 +++++++++++++++++++++------ app/cmd/phases/init/data.go | 2 +- app/cmd/phases/init/ign.go | 2 +- app/phases/infra/infra.go | 4 +- app/util/config/initconfiguration.go | 8 +- 10 files changed, 231 insertions(+), 81 deletions(-) diff --git a/app/apis/nkd/const.go b/app/apis/nkd/const.go index b78820e..ebb4012 100644 --- a/app/apis/nkd/const.go +++ b/app/apis/nkd/const.go @@ -22,11 +22,11 @@ var ( NkdClusterName = "example nkd cluster" // system - Hostname1 = "master01" - Hostname2 = "master01" - Hostname3 = "master01" - Username = "user1" - Password = "********" + HostName = "master" + // Hostname2 = "master01" + // Hostname3 = "master01" + Username = "user1" + Password = "********" // repo Secret = []map[string]string{{"repousre": "********"}} @@ -89,4 +89,18 @@ var ( KubernetesVersion = "1.23.0" DnsDomain = "cluster.local" ServiceSubnet = "10.96.0.0/12" + + // worker + APIServerEndpoint = "kube-apiserver:6443" + Token = "abcdef.0123456789abcdef" + UnsafeSkipCAVerification = true + WorkerDiscoverTimeout = "5m0s" + TlsBootstrapToken = "abcdef.0123456789abcdef" + CaCertPath = "/etc/kubernetes/pki/ca.crt" + + MasterNode = "master" + WorkerNode = "worker" + + Master_Count = 3 + Worker_Count = 3 ) diff --git a/app/apis/nkd/types.go b/app/apis/nkd/types.go index 18c5815..d169e77 100644 --- a/app/apis/nkd/types.go +++ b/app/apis/nkd/types.go @@ -21,25 +21,24 @@ import ( ) type System struct { - Hostname string `yaml:"hostname"` + Count int + HostName string + Ips []string Username string `yaml:"username"` Password string `yaml:"password"` + SSHKey string } type Openstack struct { - User_name string - Password string - Tenant_name string - Auth_url string - Region string - Master_instance_name []string - Worker_instance_name []string - Internal_network string - External_network string - Master_ip []string - Worker_ip []string - Glance string - Flavor string + User_name string + Password string + Tenant_name string + Auth_url string + Region string + Internal_network string + External_network string + Glance string + Flavor string } type Libvirt struct { @@ -51,15 +50,10 @@ type Size struct { Disk int } -type Vmsize struct { - Master Size - Worker Size -} - type Infra struct { Platform string Openstack Openstack - Vmsize Vmsize + Vmsize Size } type Cluster struct { @@ -352,11 +346,49 @@ type Kubeadm struct { type Addon struct { Addons []map[string]string } -type Nkd struct { + +// type Nkd struct { +// Cluster Cluster +// System []System +// Repo Repo +// Kubeadm Kubeadm +// Addon Addon +// Infra Infra +// } + +type Master struct { + Node string Cluster Cluster - System []System + System System Repo Repo Kubeadm Kubeadm Addon Addon Infra Infra } + +type WorkerK8s struct { + Discovery Discovery + CaCertPath string + NodeRegistration NodeRegistrationOptions +} + +type BootstrapTokenDiscovery struct { + Token string + APIServerEndpoint string + UnsafeSkipCAVerification bool +} + +type Discovery struct { + BootstrapToken *BootstrapTokenDiscovery + Timeout string + TlsBootstrapToken string +} + +type Worker struct { + Node string + Repo Repo + System System + Infra Infra + Addon Addon + Worker WorkerK8s +} diff --git a/app/cmd/cmd.go b/app/cmd/cmd.go index 211e201..f3dfec9 100755 --- a/app/cmd/cmd.go +++ b/app/cmd/cmd.go @@ -31,7 +31,6 @@ func NewNkdCommand(in io.Reader, out, err io.Writer) *cobra.Command { // TODO: 修改名称 // TODO: 添加ExtendCommand cmds.AddCommand(NewConfigCommand()) - cmds.AddCommand(NewInitCommand()) cmds.AddCommand(NewDeployCommand()) cmds.AddCommand(NewDestroyCommand()) cmds.AddCommand(NewUpgradeCommand()) diff --git a/app/cmd/config.go b/app/cmd/config.go index 978eb3f..2335d9f 100755 --- a/app/cmd/config.go +++ b/app/cmd/config.go @@ -33,6 +33,6 @@ func NewConfigCommand() *cobra.Command { } cmd.AddCommand(phases.NewPrintDefaultNkdConfigCommand()) - + cmd.AddCommand(NewInitDefaultNkdConfigCommand()) return cmd } diff --git a/app/cmd/init.go b/app/cmd/init.go index c7206dc..d67595c 100755 --- a/app/cmd/init.go +++ b/app/cmd/init.go @@ -28,25 +28,33 @@ import ( ) type initData struct { - cfg *nkd.Nkd + cfg *nkd.Master } -func NewInitCommand() *cobra.Command { +type Config struct { + config string +} + +func NewInitDefaultNkdConfigCommand() *cobra.Command { initRunner := workflow.NewRunner() + var config string cmd := &cobra.Command{ Use: "init", - Short: "Use this command to init insert or config", + Short: "Use this command to init ign, cert config", RunE: func(cmd *cobra.Command, args []string) error { c, err := initRunner.InitData(args) if err != nil { return err } + data := c.(*initData) fmt.Println(data.cfg) return initRunner.Run() }, } + // fmt.Println(config) + cmd.PersistentFlags().StringVarP(&config, "config", "c", "", "config for init") phases.NewGenerateCertsCmd() initRunner.AppendPhase(phases.NewGenerateCertsCmd()) initRunner.AppendPhase(phases.NewGenerateIgnCmd()) @@ -60,12 +68,12 @@ func NewInitCommand() *cobra.Command { return cmd } -func (i *initData) Cfg() *nkd.Nkd { +func (i *initData) Cfg() *nkd.Master { return i.cfg } func newInitData(cmd *cobra.Command, args []string) (*initData, error) { - var newNkd *nkd.Nkd + var newNkd *nkd.Master cfg, err := config.LoadOrDefaultInitConfiguration("path", newNkd) if err != nil { return nil, err diff --git a/app/cmd/phases/config/print.go b/app/cmd/phases/config/print.go index e1fdff8..4e412b1 100644 --- a/app/cmd/phases/config/print.go +++ b/app/cmd/phases/config/print.go @@ -30,63 +30,159 @@ func NewPrintDefaultNkdConfigCommand() *cobra.Command { Use: "print", Short: "use this command to print nkd config", RunE: func(cmd *cobra.Command, args []string) error { - return runPrintDefaultConfig() + return nil + // return runPrintDefaultConfig() }, } + cmd.AddCommand(newPrintMasterDefaultConfigCommand()) + cmd.AddCommand(newPrintWorkerDefaultConfigCommand()) return cmd } -func runPrintDefaultConfig() error { - internalconfig := &nkd.Nkd{} - DefaultedStaticInitConfiguration(internalconfig) - conf, err := yaml.Marshal(&internalconfig) - fmt.Println(string(conf)) - if err != nil { - return err +func newPrintMasterDefaultConfigCommand() *cobra.Command { + return newCommandPrintDefaultNodeConfig("master") +} + +func newPrintWorkerDefaultConfigCommand() *cobra.Command { + return newCommandPrintDefaultNodeConfig("worker") +} + +func newCommandPrintDefaultNodeConfig(node string) *cobra.Command { + cmd := &cobra.Command{ + Use: fmt.Sprintf("%s", node), + Short: fmt.Sprintf("use this command to init %s default config", node), + RunE: func(cmd *cobra.Command, args []string) error { + fmt.Println("111") + return runPrintDefaultConfig(node) + // return nil + }, + } + return cmd +} + +func runPrintDefaultConfig(node string) error { + if node == "master" { + internalconfig := &nkd.Master{} + DefaultedStaticMasterConfiguration(internalconfig) + conf, err := yaml.Marshal(&internalconfig) + fmt.Println(string(conf)) + if err != nil { + return err + } + } else if node == "worker" { + internalconfig := &nkd.Worker{} + DefaultedStaticWorkerConfiguration(internalconfig) + conf, err := yaml.Marshal(&internalconfig) + fmt.Println(string(conf)) + if err != nil { + return err + } } - return err + return nil +} + +func DefaultedStaticWorkerConfiguration(internalconfig *nkd.Worker) *nkd.Worker { + repo := nkd.Repo{ + Secret: nkd.Secret, + Registry: nkd.Registry, + } + openstack := nkd.Openstack{ + User_name: nkd.Openstack_UserName, + Password: nkd.Openstack_Password, + Tenant_name: nkd.Openstack_Tenant_name, + Auth_url: nkd.Openstack_Auth_url, + Region: nkd.Openstack_Region, + Internal_network: nkd.Openstack_Internal_network, + External_network: nkd.Openstack_External_network, + Glance: nkd.Openstack_Glance_Name, + Flavor: nkd.Openstack_Flavor_Name, + } + + system1 := nkd.System{ + Count: nkd.Master_Count, + Ips: nkd.Openstack_Master_ip, + HostName: nkd.HostName, + Username: nkd.Username, + Password: nkd.Password, + } + + vmsize := nkd.Size{ + Vcpus: nkd.Vcpus, + Ram: nkd.Ram, + Disk: nkd.Disk, + } + + infra := nkd.Infra{ + Platform: nkd.Platform, + Openstack: openstack, + Vmsize: vmsize, + } + + bootstrapTokenDiscovery := nkd.BootstrapTokenDiscovery{ + APIServerEndpoint: nkd.APIServerEndpoint, + Token: nkd.Token, + UnsafeSkipCAVerification: nkd.UnsafeSkipCAVerification, + } + + discover := nkd.Discovery{ + BootstrapToken: &bootstrapTokenDiscovery, + Timeout: nkd.WorkerDiscoverTimeout, + TlsBootstrapToken: nkd.TlsBootstrapToken, + } + + nodeRegistrationOptions := nkd.NodeRegistrationOptions{ + CRISocket: nkd.CriSocket, + ImagePullPolicy: nkd.PullPolicy(nkd.ImagePullPolicy), + Name: nkd.Name, + Taints: nil, + } + + worker := nkd.WorkerK8s{ + Discovery: discover, + CaCertPath: nkd.CaCertPath, + NodeRegistration: nodeRegistrationOptions, + } + internalconfig.Node = nkd.WorkerNode + internalconfig.Repo = repo + internalconfig.System = system1 + internalconfig.Infra = infra + internalconfig.Worker = worker + return nil } // return internal Nkd with static defaults -func DefaultedStaticInitConfiguration(internalconfig *nkd.Nkd) *nkd.Nkd { +func DefaultedStaticMasterConfiguration(internalconfig *nkd.Master) *nkd.Master { cluster := nkd.Cluster{Name: nkd.NkdClusterName} - system1 := nkd.System{Hostname: nkd.Hostname1, + system1 := nkd.System{ + Count: nkd.Master_Count, + Ips: nkd.Openstack_Master_ip, + HostName: nkd.HostName, Username: nkd.Username, Password: nkd.Password, } - repo := nkd.Repo{Secret: nkd.Secret, + repo := nkd.Repo{ + Secret: nkd.Secret, Registry: nkd.Registry, } openstack := nkd.Openstack{ - User_name: nkd.Openstack_UserName, - Password: nkd.Openstack_Password, - Tenant_name: nkd.Openstack_Tenant_name, - Auth_url: nkd.Openstack_Auth_url, - Region: nkd.Openstack_Region, - Master_instance_name: nkd.Openstack_MasterNodeName, - Worker_instance_name: nkd.Openstack_WorkerNodeName, - Internal_network: nkd.Openstack_Internal_network, - External_network: nkd.Openstack_External_network, - Master_ip: nkd.Openstack_Master_ip, - Worker_ip: nkd.Openstack_Worker_ip, - Glance: nkd.Openstack_Glance_Name, - Flavor: nkd.Openstack_Flavor_Name, - } - - vmsize := nkd.Vmsize{ - Master: nkd.Size{ - Vcpus: nkd.Vcpus, - Ram: nkd.Ram, - Disk: nkd.Disk, - }, - Worker: nkd.Size{ - Vcpus: nkd.Vcpus, - Ram: nkd.Ram, - Disk: nkd.Disk, - }, + User_name: nkd.Openstack_UserName, + Password: nkd.Openstack_Password, + Tenant_name: nkd.Openstack_Tenant_name, + Auth_url: nkd.Openstack_Auth_url, + Region: nkd.Openstack_Region, + Internal_network: nkd.Openstack_Internal_network, + External_network: nkd.Openstack_External_network, + Glance: nkd.Openstack_Glance_Name, + Flavor: nkd.Openstack_Flavor_Name, + } + + vmsize := nkd.Size{ + Vcpus: nkd.Vcpus, + Ram: nkd.Ram, + Disk: nkd.Disk, } infra := nkd.Infra{ @@ -140,10 +236,11 @@ func DefaultedStaticInitConfiguration(internalconfig *nkd.Nkd) *nkd.Nkd { LocalAPIEndpoint: localAPIEndpoint, NodeRegistration: NodeRegistrationOptions, } + internalconfig.Node = nkd.MasterNode internalconfig.Kubeadm = kubeadm internalconfig.Cluster = cluster internalconfig.Infra = infra - internalconfig.System = []nkd.System{system1} + internalconfig.System = system1 internalconfig.Repo = repo return internalconfig diff --git a/app/cmd/phases/init/data.go b/app/cmd/phases/init/data.go index 6529c3f..d6b9a89 100644 --- a/app/cmd/phases/init/data.go +++ b/app/cmd/phases/init/data.go @@ -19,5 +19,5 @@ package phases import "nestos-kubernetes-deployer/app/apis/nkd" type InitData interface { - Cfg() *nkd.Nkd + Cfg() *nkd.Master } diff --git a/app/cmd/phases/init/ign.go b/app/cmd/phases/init/ign.go index e74d21d..3a5bfc9 100644 --- a/app/cmd/phases/init/ign.go +++ b/app/cmd/phases/init/ign.go @@ -73,7 +73,7 @@ func runGenerateIgnConfig(r workflow.RunData) error { return nil } -func getTmplData(nkdConfig *nkd.Nkd) *commonTemplateData { +func getTmplData(nkdConfig *nkd.Master) *commonTemplateData { return &commonTemplateData{ SSHKey: "", APIServerURL: "", diff --git a/app/phases/infra/infra.go b/app/phases/infra/infra.go index bac37e5..8d58c10 100644 --- a/app/phases/infra/infra.go +++ b/app/phases/infra/infra.go @@ -57,7 +57,7 @@ func (c *Cluster) Create() error { } // 解析 yaml 数据 - var configData nkd.Nkd + var configData nkd.Master err = yaml.Unmarshal(infraData, &configData) if err != nil { return errors.WithMessage(err, "failed to parse yaml data") @@ -142,7 +142,7 @@ func (c *Cluster) Destroy() error { } // 解析 yaml 数据 - var configData nkd.Nkd + var configData nkd.Master err = yaml.Unmarshal(infraData, &configData) if err != nil { return errors.Wrap(err, "failed to parse yaml data") diff --git a/app/util/config/initconfiguration.go b/app/util/config/initconfiguration.go index db0520b..9b9d9b9 100644 --- a/app/util/config/initconfiguration.go +++ b/app/util/config/initconfiguration.go @@ -25,7 +25,7 @@ import ( "gopkg.in/yaml.v2" ) -func LoadOrDefaultInitConfiguration(cfgPath string, cfg *nkd.Nkd) (*nkd.Nkd, error) { +func LoadOrDefaultInitConfiguration(cfgPath string, cfg *nkd.Master) (*nkd.Master, error) { if cfgPath != "" { cfg, err := LoadInitConfigurationFromFile() if err != nil { @@ -41,8 +41,8 @@ func LoadOrDefaultInitConfiguration(cfgPath string, cfg *nkd.Nkd) (*nkd.Nkd, err } -func LoadInitConfigurationFromFile() (*nkd.Nkd, error) { - conf := new(nkd.Nkd) +func LoadInitConfigurationFromFile() (*nkd.Master, error) { + conf := new(nkd.Master) yamlFile, err := ioutil.ReadFile("test.yaml") fmt.Println(err) if err != nil { @@ -53,6 +53,6 @@ func LoadInitConfigurationFromFile() (*nkd.Nkd, error) { return conf, nil } -func DefaultinitConfiguration() (*nkd.Nkd, error) { +func DefaultinitConfiguration() (*nkd.Master, error) { return nil, nil } -- Gitee