allow connections to non-dockerized k3s clusters
This commit is contained in:
parent
c8f8fdb139
commit
3e80e37faf
@ -460,7 +460,7 @@ func AddNode(c *cli.Context) error {
|
||||
|
||||
// TODO: support this
|
||||
if nodeRole == "server" {
|
||||
return fmt.Errorf("ERROR: sorry, we don't support adding server nodes at the moment!")
|
||||
return fmt.Errorf("ERROR: sorry, we don't support adding server nodes at the moment")
|
||||
}
|
||||
|
||||
/* (0.2)
|
||||
@ -473,6 +473,22 @@ func AddNode(c *cli.Context) error {
|
||||
image = fmt.Sprintf("%s/%s", defaultRegistry, image)
|
||||
}
|
||||
|
||||
/* (0.3) BREAKOUT
|
||||
* --k3s <url>
|
||||
* Connect to a non-dockerized k3s server
|
||||
*/
|
||||
|
||||
if c.IsSet("k3s") {
|
||||
log.Printf("INFO: Adding new nodes to k3s [%s]\n", c.String("k3s"))
|
||||
if _, err := createClusterNetwork(clusterName); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := addNodeToK3s(c, nodeRole, image); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
/*
|
||||
* (1) Check cluster
|
||||
*/
|
||||
@ -530,7 +546,7 @@ func AddNode(c *cli.Context) error {
|
||||
}
|
||||
}
|
||||
if serverListenPort == "" {
|
||||
return fmt.Errorf("ERROR: couldn't get https-listen-port form server contaienr")
|
||||
return fmt.Errorf("ERROR: couldn't get https-listen-port form server container")
|
||||
}
|
||||
|
||||
/*
|
||||
@ -600,15 +616,58 @@ func AddNode(c *cli.Context) error {
|
||||
|
||||
log.Printf("INFO: Adding %d %s-nodes to cluster %s...\n", nodeCount, nodeRole, clusterName)
|
||||
|
||||
if nodeRole == "agent" {
|
||||
for suffix := highestExistingWorkerSuffix + 1; suffix < nodeCount+1+highestExistingWorkerSuffix; suffix++ {
|
||||
workerContainerID, err := createWorker(clusterSpec, suffix)
|
||||
if err != nil {
|
||||
return fmt.Errorf("ERROR: Couldn't create %s-node!\n%+v", nodeRole, err)
|
||||
}
|
||||
log.Printf("INFO: Created %s-node with ID %s\n", nodeRole, workerContainerID)
|
||||
}
|
||||
if err := createNodes(clusterSpec, nodeRole, highestExistingWorkerSuffix+1, nodeCount); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func addNodeToK3s(c *cli.Context, nodeRole, image string) error {
|
||||
env := []string{}
|
||||
|
||||
k3sURLEnvVar := fmt.Sprintf("K3S_URL=%s", c.String("k3s"))
|
||||
k3sConnSecretEnvVar := fmt.Sprintf("K3S_SECRET=%s", c.String("k3s-secret"))
|
||||
if c.IsSet("k3s-token") {
|
||||
k3sConnSecretEnvVar = fmt.Sprintf("K3S_TOKEN=%s", c.String("k3s-token"))
|
||||
}
|
||||
|
||||
env = append(env, k3sURLEnvVar, k3sConnSecretEnvVar)
|
||||
|
||||
clusterSpec := &ClusterSpec{
|
||||
AgentArgs: nil,
|
||||
APIPort: apiPort{},
|
||||
AutoRestart: false,
|
||||
ClusterName: c.String("name"),
|
||||
Env: env,
|
||||
Image: image,
|
||||
NodeToPortSpecMap: nil,
|
||||
PortAutoOffset: 0,
|
||||
ServerArgs: nil,
|
||||
Verbose: false,
|
||||
Volumes: nil,
|
||||
}
|
||||
|
||||
if err := createNodes(clusterSpec, nodeRole, 0, c.Int("count")); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func createNodes(clusterSpec *ClusterSpec, role string, suffixNumberStart int, count int) error {
|
||||
for suffix := suffixNumberStart; suffix < suffixNumberStart+count; suffix++ {
|
||||
containerID := ""
|
||||
var err error
|
||||
if role == "agent" {
|
||||
containerID, err = createWorker(clusterSpec, suffix)
|
||||
} else if role == "server" {
|
||||
containerID, err = createServer(clusterSpec)
|
||||
}
|
||||
if err != nil {
|
||||
return fmt.Errorf("ERROR: Couldn't create %s-node!\n%+v", role, err)
|
||||
}
|
||||
log.Printf("INFO: Created %s-node with ID %s\n", role, containerID)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -144,8 +144,18 @@ func createWorker(spec *ClusterSpec, postfix int) (string, error) {
|
||||
containerLabels["cluster"] = spec.ClusterName
|
||||
|
||||
containerName := GetContainerName("worker", spec.ClusterName, postfix)
|
||||
env := spec.Env
|
||||
|
||||
env := append(spec.Env, fmt.Sprintf("K3S_URL=https://k3d-%s-server:%s", spec.ClusterName, spec.APIPort.Port))
|
||||
needServerURL := true
|
||||
for _, envVar := range env {
|
||||
if strings.Split(envVar, "=")[0] == "K3S_URL" {
|
||||
needServerURL = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if needServerURL {
|
||||
env = append(spec.Env, fmt.Sprintf("K3S_URL=https://k3d-%s-server:%s", spec.ClusterName, spec.APIPort.Port))
|
||||
}
|
||||
|
||||
// ports to be assigned to the server belong to roles
|
||||
// all, server or <server-container-name>
|
||||
|
||||
22
main.go
22
main.go
@ -131,9 +131,12 @@ func main() {
|
||||
},
|
||||
Action: run.CreateCluster,
|
||||
},
|
||||
/*
|
||||
* Add a new node to an existing k3d/k3s cluster (choosing k3d by default)
|
||||
*/
|
||||
{
|
||||
Name: "add-node",
|
||||
Usage: "Add nodes to an existing k3d cluster",
|
||||
Usage: "Add nodes to an existing k3d/k3s cluster (k3d by default)",
|
||||
Flags: []cli.Flag{
|
||||
cli.StringFlag{
|
||||
Name: "role, r",
|
||||
@ -142,7 +145,7 @@ func main() {
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "name, n",
|
||||
Usage: "Name of the clsuter that you want to add a node to",
|
||||
Usage: "Name of the k3d cluster that you want to add a node to [only for node name if --k3s is set]",
|
||||
Value: defaultK3sClusterName,
|
||||
},
|
||||
cli.IntFlag{
|
||||
@ -155,6 +158,21 @@ func main() {
|
||||
Usage: "Specify a k3s image (Format: <repo>/<image>:<tag>)",
|
||||
Value: fmt.Sprintf("%s:%s", defaultK3sImage, version.GetK3sVersion()),
|
||||
},
|
||||
/*
|
||||
* Connect to a non-dockerized k3s cluster
|
||||
*/
|
||||
cli.StringFlag{
|
||||
Name: "k3s",
|
||||
Usage: "Add a k3d node to a non-k3d k3s cluster (specify k3s server URL like this `https://<host>:<port>`) [requires k3s-secret or k3s-token]",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "k3s-secret, s",
|
||||
Usage: "Specify k3s cluster secret (or use --k3s-token to use a node token)",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "k3s-token, t",
|
||||
Usage: "Specify k3s node token (or use --k3s-secret to use a cluster secret)[overrides k3s-secret]",
|
||||
},
|
||||
},
|
||||
Action: run.AddNode,
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user