Skip to content

Commit 354a867

Browse files
gjulianmCelianR
andauthored
Add support for NVIDIA nvkind cluster (#1458)
Co-authored-by: Célian Raimbault <161456554+CelianR@users.noreply.github.com>
1 parent 69c2fd5 commit 354a867

File tree

5 files changed

+501
-55
lines changed

5 files changed

+501
-55
lines changed

components/kubernetes/kind.go

+19-15
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,12 @@ func NewKindCluster(env config.Env, vm *remote.Host, name string, kubeVersion st
4545
}
4646
opts = utils.MergeOptions(opts, utils.PulumiDependsOn(dockerManager, curlCommand))
4747

48-
kindVersionConfig, err := getKindVersionConfig(kubeVersion)
48+
kindVersionConfig, err := GetKindVersionConfig(kubeVersion)
4949
if err != nil {
5050
return err
5151
}
5252

53-
kindArch := vm.OS.Descriptor().Architecture
54-
if kindArch == os.AMD64Arch {
55-
kindArch = "amd64"
56-
}
57-
kindInstall, err := runner.Command(
58-
commonEnvironment.CommonNamer().ResourceName("kind-install"),
59-
&command.Args{
60-
Create: pulumi.Sprintf(`curl --retry 10 -fsSLo ./kind "https://kind.sigs.k8s.io/dl/%s/kind-linux-%s" && sudo install kind /usr/local/bin/kind`, kindVersionConfig.kindVersion, kindArch),
61-
},
62-
opts...,
63-
)
53+
kindInstall, err := InstallKindBinary(env, vm, kindVersionConfig.KindVersion, opts...)
6454
if err != nil {
6555
return err
6656
}
@@ -73,7 +63,7 @@ func NewKindCluster(env config.Env, vm *remote.Host, name string, kubeVersion st
7363
return err
7464
}
7565

76-
nodeImage := fmt.Sprintf("%s/%s:%s", env.InternalDockerhubMirror(), kindNodeImageName, kindVersionConfig.nodeImageVersion)
66+
nodeImage := fmt.Sprintf("%s/%s:%s", env.InternalDockerhubMirror(), kindNodeImageName, kindVersionConfig.NodeImageVersion)
7767
createCluster, err := runner.Command(
7868
commonEnvironment.CommonNamer().ResourceName("kind-create-cluster"),
7969
&command.Args{
@@ -116,7 +106,7 @@ func NewLocalKindCluster(env config.Env, name string, kubeVersion string, opts .
116106
opts = utils.MergeOptions[pulumi.ResourceOption](opts, pulumi.Parent(clusterComp))
117107
commonEnvironment := env
118108

119-
kindVersionConfig, err := getKindVersionConfig(kubeVersion)
109+
kindVersionConfig, err := GetKindVersionConfig(kubeVersion)
120110
if err != nil {
121111
return err
122112
}
@@ -136,7 +126,7 @@ func NewLocalKindCluster(env config.Env, name string, kubeVersion string, opts .
136126
return err
137127
}
138128

139-
nodeImage := fmt.Sprintf("%s/%s:%s", env.InternalDockerhubMirror(), kindNodeImageName, kindVersionConfig.nodeImageVersion)
129+
nodeImage := fmt.Sprintf("%s/%s:%s", env.InternalDockerhubMirror(), kindNodeImageName, kindVersionConfig.NodeImageVersion)
140130
createCluster, err := runner.Command(
141131
commonEnvironment.CommonNamer().ResourceName("kind-create-cluster"),
142132
&command.Args{
@@ -167,3 +157,17 @@ func NewLocalKindCluster(env config.Env, name string, kubeVersion string, opts .
167157
return nil
168158
}, opts...)
169159
}
160+
161+
func InstallKindBinary(env config.Env, vm *remote.Host, kindVersion string, opts ...pulumi.ResourceOption) (pulumi.Resource, error) {
162+
kindArch := vm.OS.Descriptor().Architecture
163+
if kindArch == os.AMD64Arch {
164+
kindArch = "amd64"
165+
}
166+
return vm.OS.Runner().Command(
167+
env.CommonNamer().ResourceName("kind-install"),
168+
&command.Args{
169+
Create: pulumi.Sprintf(`curl --retry 10 -fsSLo ./kind "https://kind.sigs.k8s.io/dl/%s/kind-linux-%s" && sudo install kind /usr/local/bin/kind`, kindVersion, kindArch),
170+
},
171+
opts...,
172+
)
173+
}

components/kubernetes/kind_versions.go

+41-40
Original file line numberDiff line numberDiff line change
@@ -7,86 +7,87 @@ import (
77
"github.com/Masterminds/semver"
88
)
99

10-
type kindConfig struct {
11-
kindVersion string
12-
nodeImageVersion string
10+
// KindConfig contains the kind version and the kind node image to use
11+
type KindConfig struct {
12+
KindVersion string
13+
NodeImageVersion string
1314
}
1415

1516
// Source: https://github.com/kubernetes-sigs/kind/releases
16-
var kubeToKindVersion = map[string]kindConfig{
17+
var kubeToKindVersion = map[string]KindConfig{
1718
"1.32": {
18-
kindVersion: "v0.26.0",
19-
nodeImageVersion: "v1.32.0@sha256:c48c62eac5da28cdadcf560d1d8616cfa6783b58f0d94cf63ad1bf49600cb027",
19+
KindVersion: "v0.26.0",
20+
NodeImageVersion: "v1.32.0@sha256:c48c62eac5da28cdadcf560d1d8616cfa6783b58f0d94cf63ad1bf49600cb027",
2021
},
2122
"1.31": {
22-
kindVersion: "v0.26.0",
23-
nodeImageVersion: "v1.31.4@sha256:2cb39f7295fe7eafee0842b1052a599a4fb0f8bcf3f83d96c7f4864c357c6c30",
23+
KindVersion: "v0.26.0",
24+
NodeImageVersion: "v1.31.4@sha256:2cb39f7295fe7eafee0842b1052a599a4fb0f8bcf3f83d96c7f4864c357c6c30",
2425
},
2526
"1.30": {
26-
kindVersion: "v0.26.0",
27-
nodeImageVersion: "v1.30.8@sha256:17cd608b3971338d9180b00776cb766c50d0a0b6b904ab4ff52fd3fc5c6369bf",
27+
KindVersion: "v0.26.0",
28+
NodeImageVersion: "v1.30.8@sha256:17cd608b3971338d9180b00776cb766c50d0a0b6b904ab4ff52fd3fc5c6369bf",
2829
},
2930
"1.29": {
30-
kindVersion: "v0.22.0",
31-
nodeImageVersion: "v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245",
31+
KindVersion: "v0.22.0",
32+
NodeImageVersion: "v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245",
3233
},
3334
"1.28": {
34-
kindVersion: "v0.22.0",
35-
nodeImageVersion: "v1.28.7@sha256:9bc6c451a289cf96ad0bbaf33d416901de6fd632415b076ab05f5fa7e4f65c58",
35+
KindVersion: "v0.22.0",
36+
NodeImageVersion: "v1.28.7@sha256:9bc6c451a289cf96ad0bbaf33d416901de6fd632415b076ab05f5fa7e4f65c58",
3637
},
3738
"1.27": {
38-
kindVersion: "v0.22.0",
39-
nodeImageVersion: "v1.27.11@sha256:681253009e68069b8e01aad36a1e0fa8cf18bb0ab3e5c4069b2e65cafdd70843",
39+
KindVersion: "v0.22.0",
40+
NodeImageVersion: "v1.27.11@sha256:681253009e68069b8e01aad36a1e0fa8cf18bb0ab3e5c4069b2e65cafdd70843",
4041
},
4142
"1.26": {
42-
kindVersion: "v0.22.0",
43-
nodeImageVersion: "v1.26.14@sha256:5d548739ddef37b9318c70cb977f57bf3e5015e4552be4e27e57280a8cbb8e4f",
43+
KindVersion: "v0.22.0",
44+
NodeImageVersion: "v1.26.14@sha256:5d548739ddef37b9318c70cb977f57bf3e5015e4552be4e27e57280a8cbb8e4f",
4445
},
4546
"1.25": {
46-
kindVersion: "v0.22.0",
47-
nodeImageVersion: "v1.25.16@sha256:e8b50f8e06b44bb65a93678a65a26248fae585b3d3c2a669e5ca6c90c69dc519",
47+
KindVersion: "v0.22.0",
48+
NodeImageVersion: "v1.25.16@sha256:e8b50f8e06b44bb65a93678a65a26248fae585b3d3c2a669e5ca6c90c69dc519",
4849
},
4950
"1.24": {
50-
kindVersion: "v0.22.0",
51-
nodeImageVersion: "v1.24.17@sha256:bad10f9b98d54586cba05a7eaa1b61c6b90bfc4ee174fdc43a7b75ca75c95e51",
51+
KindVersion: "v0.22.0",
52+
NodeImageVersion: "v1.24.17@sha256:bad10f9b98d54586cba05a7eaa1b61c6b90bfc4ee174fdc43a7b75ca75c95e51",
5253
},
5354
"1.23": {
54-
kindVersion: "v0.22.0",
55-
nodeImageVersion: "v1.23.17@sha256:14d0a9a892b943866d7e6be119a06871291c517d279aedb816a4b4bc0ec0a5b3",
55+
KindVersion: "v0.22.0",
56+
NodeImageVersion: "v1.23.17@sha256:14d0a9a892b943866d7e6be119a06871291c517d279aedb816a4b4bc0ec0a5b3",
5657
},
5758
"1.22": {
58-
kindVersion: "v0.20.0",
59-
nodeImageVersion: "v1.22.17@sha256:f5b2e5698c6c9d6d0adc419c0deae21a425c07d81bbf3b6a6834042f25d4fba2",
59+
KindVersion: "v0.20.0",
60+
NodeImageVersion: "v1.22.17@sha256:f5b2e5698c6c9d6d0adc419c0deae21a425c07d81bbf3b6a6834042f25d4fba2",
6061
},
6162
"1.21": {
62-
kindVersion: "v0.20.0",
63-
nodeImageVersion: "v1.21.14@sha256:8a4e9bb3f415d2bb81629ce33ef9c76ba514c14d707f9797a01e3216376ba093",
63+
KindVersion: "v0.20.0",
64+
NodeImageVersion: "v1.21.14@sha256:8a4e9bb3f415d2bb81629ce33ef9c76ba514c14d707f9797a01e3216376ba093",
6465
},
6566
"1.20": {
66-
kindVersion: "v0.17.0",
67-
nodeImageVersion: "v1.20.15@sha256:a32bf55309294120616886b5338f95dd98a2f7231519c7dedcec32ba29699394",
67+
KindVersion: "v0.17.0",
68+
NodeImageVersion: "v1.20.15@sha256:a32bf55309294120616886b5338f95dd98a2f7231519c7dedcec32ba29699394",
6869
},
6970
"1.19": {
70-
kindVersion: "v0.17.0",
71-
nodeImageVersion: "v1.19.16@sha256:476cb3269232888437b61deca013832fee41f9f074f9bed79f57e4280f7c48b7",
71+
KindVersion: "v0.17.0",
72+
NodeImageVersion: "v1.19.16@sha256:476cb3269232888437b61deca013832fee41f9f074f9bed79f57e4280f7c48b7",
7273
},
7374
// Use ubuntu 20.04 for the below k8s versions
7475
"1.18": {
75-
kindVersion: "v0.17.0",
76-
nodeImageVersion: "v1.18.20@sha256:61c9e1698c1cb19c3b1d8151a9135b379657aee23c59bde4a8d87923fcb43a91",
76+
KindVersion: "v0.17.0",
77+
NodeImageVersion: "v1.18.20@sha256:61c9e1698c1cb19c3b1d8151a9135b379657aee23c59bde4a8d87923fcb43a91",
7778
},
7879
"1.17": {
79-
kindVersion: "v0.17.0",
80-
nodeImageVersion: "v1.17.17@sha256:e477ee64df5731aa4ef4deabbafc34e8d9a686b49178f726563598344a3898d5",
80+
KindVersion: "v0.17.0",
81+
NodeImageVersion: "v1.17.17@sha256:e477ee64df5731aa4ef4deabbafc34e8d9a686b49178f726563598344a3898d5",
8182
},
8283
"1.16": {
83-
kindVersion: "v0.15.0",
84-
nodeImageVersion: "v1.16.15@sha256:64bac16b83b6adfd04ea3fbcf6c9b5b893277120f2b2cbf9f5fa3e5d4c2260cc",
84+
KindVersion: "v0.15.0",
85+
NodeImageVersion: "v1.16.15@sha256:64bac16b83b6adfd04ea3fbcf6c9b5b893277120f2b2cbf9f5fa3e5d4c2260cc",
8586
},
8687
}
8788

88-
// getKindVersionConfig returns the kind version and the kind node image to use based on kubernetes version
89-
func getKindVersionConfig(kubeVersion string) (*kindConfig, error) {
89+
// GetKindVersionConfig returns the kind version and the kind node image to use based on kubernetes version
90+
func GetKindVersionConfig(kubeVersion string) (*KindConfig, error) {
9091
kubeSemVer, err := semver.NewVersion(kubeVersion)
9192
if err != nil {
9293
return nil, err

0 commit comments

Comments
 (0)