Skip to content

Commit 0cccf8c

Browse files
authored
Development support deploying k8s workers on multiple nodes (#1136)
* feat: add feature to allow user to add multiple nodes to deploy workers * feat: add feature to allow user to add multiple nodes to deploy workers * fix: using int slice parser * fix: using int slice parser * fix: assign unassigned workers only * fix: assign unassigned workers only * fix: code refactor * fix: code refactor * fix: assign remaining workers to one node * fix: assign unassigned worker to one node * fix: assign unassigned worker to one node * fix: assign unassigned worker to one node * fix: building filter to be on one node * fix: renaming and initial value * fix: renaming and initial value * update: kubernetes docs and removed unreached condition * update: used range loops * update: used range loops * fix: wallet connector broken link in tfcmd readme * fix: skipping extra given nodes
1 parent 2ae20ce commit 0cccf8c

File tree

4 files changed

+22
-30
lines changed

4 files changed

+22
-30
lines changed

grid-cli/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Login using your mnemonics and specify which grid network (mainnet/testnet) to d
1414
tfcmd login
1515
```
1616

17-
Check [Wallet Connector](https://manual.grid.tf/dashboard/wallet_connector.html) for more details if you do not have mnemonics yet.
17+
Check [Wallet Connector](https://manual.grid.tf/documentation/dashboard/wallet_connector.html) for more details if you do not have mnemonics yet.
1818

1919
For examples and description of tfcmd commands check out:
2020

grid-cli/cmd/deploy_kubernetes.go

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ var deployKubernetesCmd = &cobra.Command{
9494
return err
9595
}
9696

97-
workersNode, err := cmd.Flags().GetUint32("workers-node")
97+
workersNodes, err := cmd.Flags().GetUintSlice("workers-nodes")
9898
if err != nil {
9999
return err
100100
}
@@ -169,7 +169,6 @@ var deployKubernetesCmd = &cobra.Command{
169169
filter, disks, rootfss := filters.BuildK8sFilter(
170170
master,
171171
masterFarm,
172-
1,
173172
)
174173
nodes, err := deployer.FilterNodes(
175174
cmd.Context(),
@@ -186,33 +185,30 @@ var deployKubernetesCmd = &cobra.Command{
186185
masterNode = uint32(nodes[0].NodeID)
187186
}
188187
master.Node = masterNode
189-
if workersNode == 0 && len(workers) > 0 {
190-
188+
if len(workersNodes) < workerNumber {
191189
filter, disks, rootfss := filters.BuildK8sFilter(
192190
workers[0],
193191
workersFarm,
194-
uint(len(workers)),
195192
)
196-
workersNodes, err := deployer.FilterNodes(
193+
nodes, err := deployer.FilterNodes(
197194
cmd.Context(),
198195
t,
199196
filter,
200197
disks,
201198
nil,
202199
rootfss,
203-
uint64(len(workers)),
200+
uint64(workerNumber-len(workersNodes)),
204201
)
205202
if err != nil {
206203
log.Fatal().Err(err).Send()
207204
}
208-
for i, node := range workersNodes {
209-
workers[i].Node = uint32(node.NodeID)
210-
}
211-
} else {
212-
for i := 0; i < workerNumber; i++ {
213-
workers[i].Node = workersNode
205+
for _, node := range nodes {
206+
workersNodes = append(workersNodes, uint(node.NodeID))
214207
}
215208
}
209+
for i := range workers {
210+
workers[i].Node = uint32(workersNodes[i])
211+
}
216212
cluster, err := command.DeployKubernetesCluster(cmd.Context(), t, master, workers, string(sshKey))
217213
if err != nil {
218214
log.Fatal().Err(err).Send()
@@ -283,9 +279,9 @@ func init() {
283279
deployKubernetesCmd.Flags().Int("workers-cpu", 1, "workers number of cpu units")
284280
deployKubernetesCmd.Flags().Int("workers-memory", 1, "workers memory size in gb")
285281
deployKubernetesCmd.Flags().Int("workers-disk", 2, "workers disk size in gb")
286-
deployKubernetesCmd.Flags().Uint32("workers-node", 0, "node id workers should be deployed on")
282+
deployKubernetesCmd.Flags().UintSlice("workers-nodes", []uint{}, "node id workers should be deployed on")
287283
deployKubernetesCmd.Flags().Uint64("workers-farm", 1, "farm id workers should be deployed on")
288-
deployKubernetesCmd.MarkFlagsMutuallyExclusive("workers-node", "workers-farm")
284+
deployKubernetesCmd.MarkFlagsMutuallyExclusive("workers-nodes", "workers-farm")
289285
deployKubernetesCmd.Flags().Bool("workers-ipv4", false, "assign public ipv4 for workers")
290286
deployKubernetesCmd.Flags().Bool("workers-ipv6", false, "assign public ipv6 for workers")
291287
deployKubernetesCmd.Flags().Bool("workers-ygg", true, "assign yggdrasil ip for workers")

grid-cli/docs/kubernetes.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ tfcmd deploy kubernetes [flags]
1717

1818
- master-node: node id master should be deployed on.
1919
- master-farm: farm id master should be deployed on, if set choose available node from farm that fits master specs (default 1). note: master-node and master-farm flags cannot be set both.
20-
- workers-node: node id workers should be deployed on.
20+
- workers-nodes: array of nodes ids workers should be deployed on and the remaining unassigned workers will be randomly assigned to nodes that meet the specifications.
2121
- workers-farm: farm id workers should be deployed on, if set choose available node from farm that fits master specs (default 1). note: workers-node and workers-farm flags cannot be set both.
2222
- ipv4: assign public ipv4 for master node (default false).
2323
- ipv6: assign public ipv6 for master node (default false).
@@ -38,7 +38,7 @@ tfcmd deploy kubernetes [flags]
3838
Example:
3939

4040
```console
41-
$ tfcmd deploy kubernetes -n kube --ssh ~/.ssh/id_rsa.pub --master-node 14 --workers-number 2 --workers-node 14
41+
$ tfcmd deploy kubernetes -n kube --ssh ~/.ssh/id_rsa.pub --master-node 14 --workers-number 2 --workers-nodes 14,1
4242
11:43AM INF starting peer session=tf-1510734 twin=192
4343
11:43AM INF deploying network
4444
11:43AM INF deploying cluster

grid-cli/internal/filters/filters.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,17 @@ import (
77
)
88

99
// BuildK8sFilter build a filter for a k8s node
10-
func BuildK8sFilter(k8sNode workloads.K8sNode, farmID uint64, k8sNodesNum uint) (types.NodeFilter, []uint64, []uint64) {
11-
freeMRUs := uint64(k8sNode.Memory*int(k8sNodesNum)) / 1024
12-
freeSRUs := uint64(k8sNode.DiskSize * int(k8sNodesNum))
10+
func BuildK8sFilter(k8sNode workloads.K8sNode, farmID uint64) (types.NodeFilter, []uint64, []uint64) {
11+
freeMRUs := uint64(k8sNode.Memory) / 1024
12+
freeSRUs := uint64(k8sNode.DiskSize)
1313
freeIPs := uint64(0)
14-
if k8sNode.PublicIP {
15-
freeIPs = uint64(k8sNodesNum)
16-
}
1714

18-
disks := make([]uint64, k8sNodesNum)
19-
rootfss := make([]uint64, k8sNodesNum)
20-
for i := 0; i < int(k8sNodesNum); i++ {
21-
disks = append(disks, *convertGBToBytes(uint64(k8sNode.DiskSize)))
22-
// k8s rootfs is either 2 or 0.5
23-
rootfss = append(rootfss, *convertGBToBytes(uint64(2)))
15+
if k8sNode.PublicIP {
16+
freeIPs = uint64(1)
2417
}
18+
disks := []uint64{*convertGBToBytes(uint64(k8sNode.DiskSize))}
19+
// k8s rootfs is either 2 or 0.5
20+
rootfss := []uint64{*convertGBToBytes(uint64(2))}
2521

2622
return buildGenericFilter(&freeMRUs, &freeSRUs, nil, &freeIPs, []uint64{farmID}, nil), disks, rootfss
2723
}

0 commit comments

Comments
 (0)