Skip to content

Commit f885bb6

Browse files
committed
improve ekz to install load balancer by default
1 parent 5e147aa commit f885bb6

File tree

4 files changed

+53
-7
lines changed

4 files changed

+53
-7
lines changed

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ vet:
1414
test: tidy fmt vet docs
1515
go test ./... -coverprofile cover.out
1616

17+
build-ui:
18+
( cd ui && bash -x ./dev.sh )
19+
( cd ui && bash -x ./build.sh )
20+
1721
build:
1822
CGO_ENABLED=0 go build -o ./bin/ekz ./cmd/ekz
1923

cmd/ekz/create_cluster.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,21 @@ func createClusterCmdRun(cmd *cobra.Command, args []string) error {
9090

9191
switch provider {
9292
case "ekz":
93-
return createClusterEKZ()
93+
if err := createClusterEKZ(); err != nil {
94+
return err
95+
}
9496
case "kind":
9597
if hostMode == true {
9698
return errors.New("the host mode is not supported by the KIND provider")
9799
}
98-
return createClusterKIND()
100+
if err := createClusterKIND(); err != nil {
101+
return err
102+
}
99103
default:
100104
return fmt.Errorf("NYI provider: %s", provider)
101105
}
106+
107+
return nil
102108
}
103109

104110
func waitForNodeStarted(nodeName string, timeout time.Duration) {

cmd/ekz/create_cluster_ekz.go

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,21 +148,38 @@ func createClusterEKZ() error {
148148

149149
// TODO handle port clash
150150
// TODO handle container name clash
151-
err = getKubeconfigEKZ(containerName, expandKubeConfigFile())
152-
if err != nil {
151+
152+
if err := getKubeconfigEKZ(containerName, expandKubeConfigFile()); err != nil {
153153
return err
154154
}
155155
logger.Successf("kubeconfig is written to: %s", expandKubeConfigFile())
156156

157157
logger.Waitingf("waiting for cluster to start ...")
158158
waitForNodeStarted("controller", 30*time.Second)
159159

160-
logger.Actionf("installing the default storageclass ...")
161-
err = installDefaultStorageClass()
162-
if err != nil {
160+
logger.Actionf("installing the default storage class ...")
161+
if err := installDefaultStorageClass(); err != nil {
163162
return err
164163
}
165164

165+
if hostMode == false {
166+
bridgeName := fmt.Sprintf("ekz-%s-bridge", clusterName)
167+
ipRangeVar := script.Var()
168+
script.Exec("docker", "inspect", "-f", `{{range .IPAM.Config}}{{.Subnet}}{{end}}`, bridgeName).To(ipRangeVar)
169+
parts := strings.SplitN(ipRangeVar.String(), ".", 4)
170+
if len(parts) != 4 {
171+
return errors.Errorf("error parsing subnet: %s", ipRangeVar.String())
172+
}
173+
174+
// not vert safe range but ok to be .200-220 for a bridge subnet
175+
ipRange := strings.Join(parts[0:3], ".") + ".200-" + strings.Join(parts[0:3], ".") + ".220"
176+
177+
logger.Actionf("installing the default load balancer using IP range: %s ...", ipRange)
178+
if err := installLoadBalancer(ipRange); err != nil {
179+
return err
180+
}
181+
}
182+
166183
logger.Waitingf("waiting for cluster to be ready ...")
167184
waitForNodeReady(120 * time.Second)
168185

@@ -173,3 +190,21 @@ func createClusterEKZ() error {
173190
func installDefaultStorageClass() error {
174191
return script.Echo(manifests.StorageClass).Exec("kubectl", "--kubeconfig="+expandKubeConfigFile(), "apply", "-f", "-").Run()
175192
}
193+
194+
func installLoadBalancer(ipRange string) error {
195+
err := script.Echo(manifests.MetalLB).
196+
Exec("kubectl", "--kubeconfig="+expandKubeConfigFile(), "apply", "-f", "-").
197+
Run()
198+
if err != nil {
199+
return err
200+
}
201+
202+
err = script.Echo(fmt.Sprintf(manifests.MetalLBConfig, ipRange)).
203+
Exec("kubectl", "--kubeconfig="+expandKubeConfigFile(), "apply", "-f", "-").
204+
Run()
205+
if err != nil {
206+
return err
207+
}
208+
209+
return nil
210+
}

docs/cmd/ekz.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,5 @@ All EKS-D cluster is single-node and run inside Docker.
5454
* [ekz get](ekz_get.md) - Get properties of an EKS-D cluster
5555
* [ekz list](ekz_list.md) - List clusters
5656
* [ekz load](ekz_load.md) - Load artifacts into the cluster
57+
* [ekz ui](ekz_ui.md) - Start the UI
5758

0 commit comments

Comments
 (0)