Skip to content

Commit af457bc

Browse files
committed
Add runtime config from source containerd config to drop-in file
This change updates the drop-in file contents that the nvidia-ctk-installer creates for containerd. In addition to adding nvidia runtimes, the nvidia-ctk-installer also includes all existing runtime configuration present in the source containerd configuration. That is, all configuration already present in the 'plugins."io.containerd.grpc.v1.cri".containerd.runtimes' section will be added to our drop-in file. This is needed due to how containerd merges configuration from multiple files. See containerd/containerd#5837 Signed-off-by: Christopher Desiniotis <[email protected]>
1 parent b3ce3a4 commit af457bc

File tree

3 files changed

+108
-3
lines changed

3 files changed

+108
-3
lines changed

cmd/nvidia-ctk-installer/container/runtime/containerd/config_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,12 @@ version = 2
809809
810810
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia-legacy.options]
811811
BinaryName = "/usr/bin/nvidia-container-runtime.legacy"
812+
813+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
814+
runtime_type = "io.containerd.runc.v2"
815+
816+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
817+
BinaryName = "/usr/bin/runc"
812818
`
813819
require.Equal(t, expectedDropIn, string(actualDropIn))
814820
return nil
@@ -954,6 +960,12 @@ version = 2
954960
955961
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia-legacy.options]
956962
BinaryName = "/usr/bin/nvidia-container-runtime.legacy"
963+
964+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
965+
runtime_type = "io.containerd.runc.v2"
966+
967+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
968+
BinaryName = "/usr/bin/runc"
957969
`
958970
require.Equal(t, expectedDropIn, string(actualDropIn))
959971
return nil
@@ -1109,6 +1121,12 @@ version = 2
11091121
11101122
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
11111123
1124+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.custom]
1125+
runtime_type = "io.containerd.custom.v1"
1126+
1127+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.custom.options]
1128+
TypeUrl = "custom.runtime/options"
1129+
11121130
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
11131131
container_annotations = ["cdi.k8s.io*"]
11141132
runtime_type = "io.containerd.runc.v2"
@@ -1132,6 +1150,13 @@ version = 2
11321150
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia-legacy.options]
11331151
BinaryName = "/usr/bin/nvidia-container-runtime.legacy"
11341152
SystemdCgroup = true
1153+
1154+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
1155+
runtime_type = "io.containerd.runc.v2"
1156+
1157+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
1158+
BinaryName = "/usr/bin/runc"
1159+
SystemdCgroup = true
11351160
`
11361161
require.Equal(t, expectedDropIn, string(actualDropIn))
11371162
return nil
@@ -1278,6 +1303,12 @@ version = 2
12781303
12791304
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia-legacy.options]
12801305
BinaryName = "/usr/bin/nvidia-container-runtime.legacy"
1306+
1307+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
1308+
runtime_type = "io.containerd.runc.v2"
1309+
1310+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
1311+
BinaryName = "/usr/bin/runc"
12811312
`
12821313

12831314
require.Equal(t, expectedDropIn, string(actualDropIn))
@@ -1407,6 +1438,12 @@ version = 2
14071438
14081439
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia-legacy.options]
14091440
BinaryName = "/usr/bin/nvidia-container-runtime.legacy"
1441+
1442+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
1443+
runtime_type = "io.containerd.runc.v2"
1444+
1445+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
1446+
BinaryName = "/usr/bin/runc"
14101447
`
14111448
require.Equal(t, expectedDropIn, string(actualDropIn))
14121449
return nil
@@ -1533,6 +1570,12 @@ version = 3
15331570
15341571
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.nvidia-legacy.options]
15351572
BinaryName = "/usr/bin/nvidia-container-runtime.legacy"
1573+
1574+
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc]
1575+
runtime_type = "io.containerd.runc.v2"
1576+
1577+
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc.options]
1578+
BinaryName = "/usr/bin/runc"
15361579
`
15371580
require.Equal(t, expectedDropIn, string(actualDropIn))
15381581

@@ -1678,6 +1721,15 @@ version = 3
16781721
NoPivotRoot = false
16791722
Root = "/run/containerd/runc"
16801723
SystemdCgroup = true
1724+
1725+
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc]
1726+
runtime_type = "io.containerd.runc.v2"
1727+
1728+
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc.options]
1729+
BinaryName = "/usr/bin/runc"
1730+
NoPivotRoot = false
1731+
Root = "/run/containerd/runc"
1732+
SystemdCgroup = true
16811733
`
16821734
require.Equal(t, expectedDropIn, string(actualDropIn))
16831735

pkg/config/engine/containerd/config_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ func TestAddRuntime(t *testing.T) {
9595
[plugins."io.containerd.grpc.v1.cri"]
9696
[plugins."io.containerd.grpc.v1.cri".containerd]
9797
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
98+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
99+
privileged_without_host_devices = true
100+
runtime_engine = "engine"
101+
runtime_root = "root"
102+
runtime_type = "type"
103+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
104+
BinaryName = "/usr/bin/runc"
105+
SystemdCgroup = true
98106
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
99107
privileged_without_host_devices = true
100108
runtime_engine = "engine"
@@ -129,6 +137,14 @@ func TestAddRuntime(t *testing.T) {
129137
[plugins."io.containerd.grpc.v1.cri"]
130138
[plugins."io.containerd.grpc.v1.cri".containerd]
131139
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
140+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.default]
141+
privileged_without_host_devices = true
142+
runtime_engine = "engine"
143+
runtime_root = "root"
144+
runtime_type = "type"
145+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.default.options]
146+
BinaryName = "/usr/bin/default"
147+
SystemdCgroup = true
132148
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
133149
privileged_without_host_devices = true
134150
runtime_engine = "engine"
@@ -171,6 +187,22 @@ func TestAddRuntime(t *testing.T) {
171187
[plugins."io.containerd.grpc.v1.cri"]
172188
[plugins."io.containerd.grpc.v1.cri".containerd]
173189
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
190+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
191+
privileged_without_host_devices = true
192+
runtime_engine = "engine"
193+
runtime_root = "root"
194+
runtime_type = "type"
195+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
196+
BinaryName = "/usr/bin/runc"
197+
SystemdCgroup = true
198+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.default]
199+
privileged_without_host_devices = false
200+
runtime_engine = "defaultengine"
201+
runtime_root = "defaultroot"
202+
runtime_type = "defaulttype"
203+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.default.options]
204+
BinaryName = "/usr/bin/default"
205+
SystemdCgroup = false
174206
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
175207
privileged_without_host_devices = false
176208
runtime_engine = "defaultengine"
@@ -225,6 +257,14 @@ func TestAddRuntime(t *testing.T) {
225257
[plugins."io.containerd.cri.v1.runtime"]
226258
[plugins."io.containerd.cri.v1.runtime".containerd]
227259
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes]
260+
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc]
261+
privileged_without_host_devices = true
262+
runtime_engine = "engine"
263+
runtime_root = "root"
264+
runtime_type = "type"
265+
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc.options]
266+
BinaryName = "/usr/bin/runc"
267+
SystemdCgroup = true
228268
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.test]
229269
privileged_without_host_devices = true
230270
runtime_engine = "engine"

pkg/config/engine/containerd/containerd.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,14 @@ func New(opts ...Option) (engine.Interface, error) {
133133
}
134134
dropInConfig := &engine.Config{
135135
Source: sourceConfig,
136-
// The destinationConfig is an empty config with the same options
137-
// as the source config.
136+
// The destinationConfig is a minimal config with the same options
137+
// as the source config. The starting content of the destinationConfig
138+
// is the entire plugins."io.containerd.grpc.v1.cri".containerd.runtimes
139+
// section of the source config. This is needed due to how containerd
140+
// merges configuration from multiple files.
141+
// Reference: https://github.com/containerd/containerd/issues/5837
138142
Destination: &Config{
139-
Tree: toml.NewEmpty(),
143+
Tree: getBaseDropInConfigTree(sourceConfig),
140144
configOptions: sourceConfigOptions,
141145
},
142146
}
@@ -204,3 +208,12 @@ func chrootIfRequired(hostRoot string, commandLine ...string) []string {
204208

205209
return append([]string{"chroot", hostRoot}, commandLine...)
206210
}
211+
212+
func getBaseDropInConfigTree(sourceConfig *Config) *toml.Tree {
213+
baseDropInConfigTree := toml.NewEmpty()
214+
runtimes := sourceConfig.GetSubtreeByPath([]string{"plugins", sourceConfig.CRIRuntimePluginName, "containerd", "runtimes"})
215+
if runtimes != nil {
216+
baseDropInConfigTree.SetPath([]string{"plugins", sourceConfig.CRIRuntimePluginName, "containerd", "runtimes"}, runtimes)
217+
}
218+
return baseDropInConfigTree
219+
}

0 commit comments

Comments
 (0)