Skip to content

Commit bcc64f8

Browse files
authored
Merge pull request #576 from ginglis13/soci-configure-k8s-containerd
Configure soci-snapshotter for containerd and kubernetes
2 parents 7392f04 + 9f7afdd commit bcc64f8

26 files changed

+160
-2
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
From dd3763194ff68b597bc8079ab21ffa60489e0c0b Mon Sep 17 00:00:00 2001
2+
From: Gavin Inglis <[email protected]>
3+
Date: Tue, 22 Jul 2025 23:49:53 +0000
4+
Subject: [PATCH] config: change Plugins type from toml.Tree to interface{}
5+
6+
In order to bring 2.0 config parsing parity to containerd-1.7 in terms
7+
of merge behavior, the type of Plugins must be made a generic
8+
interface{} and unmarshalling adjust accordingly. This tree structure
9+
resulted in higher level nodes being affected by changes to children and
10+
leaves and reset to their defaults.
11+
12+
Signed-off-by: Gavin Inglis <[email protected]>
13+
---
14+
services/server/config/config.go | 11 +++++++++--
15+
1 file changed, 9 insertions(+), 2 deletions(-)
16+
17+
diff --git a/services/server/config/config.go b/services/server/config/config.go
18+
index e3fac1d82..1c663d99a 100644
19+
--- a/services/server/config/config.go
20+
+++ b/services/server/config/config.go
21+
@@ -18,6 +18,7 @@ package config
22+
23+
import (
24+
"fmt"
25+
+ "io"
26+
"path/filepath"
27+
"strings"
28+
29+
@@ -58,7 +59,7 @@ type Config struct {
30+
// required plugin doesn't exist or fails to be initialized or started.
31+
RequiredPlugins []string `toml:"required_plugins"`
32+
// Plugins provides plugin specific configuration for the initialization of a plugin
33+
- Plugins map[string]toml.Tree `toml:"plugins"`
34+
+ Plugins map[string]interface{} `toml:"plugins"`
35+
// OOMScore adjust the containerd's oom score
36+
OOMScore int `toml:"oom_score"`
37+
// Cgroup specifies cgroup information for the containerd daemon process
38+
@@ -187,7 +188,13 @@ func (c *Config) Decode(p *plugin.Registration) (interface{}, error) {
39+
if !ok {
40+
return p.Config, nil
41+
}
42+
- if err := data.Unmarshal(p.Config); err != nil {
43+
+ r, w := io.Pipe()
44+
+ go func() {
45+
+ err := toml.NewEncoder(w).Encode(data)
46+
+ w.CloseWithError(err)
47+
+ }()
48+
+
49+
+ if err := toml.NewDecoder(r).Decode(p.Config); err != nil {
50+
return nil, err
51+
}
52+
return p.Config, nil
53+
--
54+
2.47.1
55+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
From a21e379b69916558c1771b086a4a17b0a58f7cc1 Mon Sep 17 00:00:00 2001
2+
From: Ray Burgemeestre <[email protected]>
3+
Date: Thu, 21 Mar 2024 12:00:24 +0100
4+
Subject: [PATCH] Allow sections of Plugins to be merged, and not overwritten
5+
as entire sections.
6+
7+
See for rationale the Pull Request description. Added unit test to
8+
demonstrate the difference of this change.
9+
10+
Signed-off-by: Ray Burgemeestre <[email protected]>
11+
Signed-off-by: Gavin Inglis <[email protected]>
12+
---
13+
services/server/config/config.go | 4 --
14+
services/server/config/config_test.go | 73 +++++++++++++++++++++
15+
2 files changed, 73 insertions(+), 4 deletions(-)
16+
17+
diff --git a/services/server/config/config.go b/services/server/config/config.go
18+
index c77f165e4..24687b873 100644
19+
--- a/services/server/config/config.go
20+
+++ b/services/server/config/config.go
21+
@@ -412,10 +412,6 @@ func mergeConfig(to, from *Config) error {
22+
}
23+
24+
// Replace entire sections instead of merging map's values.
25+
- for k, v := range from.Plugins {
26+
- to.Plugins[k] = v
27+
- }
28+
-
29+
for k, v := range from.StreamProcessors {
30+
to.StreamProcessors[k] = v
31+
}

packages/containerd-1.7/containerd-1.7.spec

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Source3: containerd-config-toml_basic
2323
Source4: containerd-config-toml_k8s_nvidia_containerd_sock
2424
Source5: containerd-tmpfiles.conf
2525
Source6: containerd-cri-base-json
26+
Source7: snapshotter-toml
2627

2728
# Mount for writing containerd configuration
2829
Source100: etc-containerd.mount
@@ -39,6 +40,10 @@ Source1000: clarify.toml
3940
# Backport of upstream patches for igzip support.
4041
Patch1001: 1001-Use-Intel-ISA-L-s-igzip-if-available.patch
4142
Patch1002: 1002-Skip-exec.LookPath-if-a-specific-gzip-implementation.patch
43+
# Patch to modify type of Plugins for config merge behavior.
44+
Patch1003: 1003-config-change-Plugins-type-from-toml.Tree-to-interfa.patch
45+
# Backport of upstream patch for config merge behavior.
46+
Patch1004: 1004-Allow-sections-of-Plugins-to-be-merged-and-not-overw.patch
4247

4348
BuildRequires: git
4449
BuildRequires: %{_cross_os}glibc-devel
@@ -141,7 +146,7 @@ install -p -m 0644 %{S:1} %{S:100} %{S:110} %{buildroot}%{_cross_unitdir}
141146

142147
install -d %{buildroot}%{_cross_templatedir}
143148
install -d %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir}/containerd
144-
install -p -m 0644 %{S:2} %{S:3} %{S:4} %{S:6} %{buildroot}%{_cross_templatedir}
149+
install -p -m 0644 %{S:2} %{S:3} %{S:4} %{S:6} %{S:7} %{buildroot}%{_cross_templatedir}
145150

146151
install -d %{buildroot}%{_cross_tmpfilesdir}
147152
install -p -m 0644 %{S:5} %{buildroot}%{_cross_tmpfilesdir}/containerd.conf
@@ -162,6 +167,7 @@ install -p -m 0644 %{S:201} %{buildroot}%{_cross_unitdir}/containerd.service.d/0
162167
%dir %{_cross_factorydir}%{_cross_sysconfdir}/containerd
163168
%{_cross_templatedir}/containerd-config-toml*
164169
%{_cross_templatedir}/containerd-cri-base-json
170+
%{_cross_templatedir}/snapshotter-toml
165171
%{_cross_tmpfilesdir}/containerd.conf
166172

167173
%files bin

packages/containerd-1.7/containerd-config-toml_k8s_containerd_sock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ disabled_plugins = [
1515
"io.containerd.snapshotter.v1.zfs",
1616
]
1717

18+
imports = ["/etc/containerd/config.d/*.toml"]
19+
1820
[grpc]
1921
address = "/run/containerd/containerd.sock"
2022

packages/containerd-1.7/containerd-config-toml_k8s_nvidia_containerd_sock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ disabled_plugins = [
1515
"io.containerd.snapshotter.v1.zfs",
1616
]
1717

18+
imports = ["/etc/containerd/config.d/*.toml"]
19+
1820
[grpc]
1921
address = "/run/containerd/containerd.sock"
2022

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
d /etc/cni/net.d - - - -
2+
d /etc/containerd/config.d - - - -
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
[required-extensions]
2+
container-runtime = "v1"
3+
std = { version = "v1" }
4+
+++
5+
{{#if settings.container-runtime.snapshotter}}
6+
{{#if (eq settings.container-runtime.snapshotter "soci" )}}
7+
[plugins."io.containerd.grpc.v1.cri".containerd]
8+
snapshotter = "soci"
9+
disable_snapshot_annotations = false
10+
# Plug soci snapshotter into containerd
11+
[proxy_plugins.soci]
12+
type = "snapshot"
13+
address = "/run/soci-snapshotter/soci-snapshotter.sock"
14+
[proxy_plugins.soci.exports]
15+
root = "/var/lib/soci-snapshotter"
16+
{{else}}
17+
[plugins."io.containerd.grpc.v1.cri".containerd]
18+
snapshotter = "overlayfs"
19+
{{/if}}
20+
{{/if}}

packages/containerd-2.0/containerd-2.0.spec

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Source3: containerd-config-toml_basic
2323
Source4: containerd-config-toml_k8s_nvidia_containerd_sock
2424
Source5: containerd-tmpfiles.conf
2525
Source6: containerd-cri-base-json
26+
Source7: snapshotter-toml
2627

2728
# Mount for writing containerd configuration
2829
Source100: etc-containerd.mount
@@ -136,7 +137,7 @@ install -p -m 0644 %{S:1} %{S:100} %{S:110} %{buildroot}%{_cross_unitdir}
136137

137138
install -d %{buildroot}%{_cross_templatedir}
138139
install -d %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir}/containerd
139-
install -p -m 0644 %{S:2} %{S:3} %{S:4} %{S:6} %{buildroot}%{_cross_templatedir}
140+
install -p -m 0644 %{S:2} %{S:3} %{S:4} %{S:6} %{S:7} %{buildroot}%{_cross_templatedir}
140141

141142
install -d %{buildroot}%{_cross_tmpfilesdir}
142143
install -p -m 0644 %{S:5} %{buildroot}%{_cross_tmpfilesdir}/containerd.conf
@@ -157,6 +158,7 @@ install -p -m 0644 %{S:201} %{buildroot}%{_cross_unitdir}/containerd.service.d/0
157158
%dir %{_cross_factorydir}%{_cross_sysconfdir}/containerd
158159
%{_cross_templatedir}/containerd-config-toml*
159160
%{_cross_templatedir}/containerd-cri-base-json
161+
%{_cross_templatedir}/snapshotter-toml
160162
%{_cross_tmpfilesdir}/containerd.conf
161163

162164
%files bin

packages/containerd-2.0/containerd-config-toml_k8s_containerd_sock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ disabled_plugins = [
1414
"io.containerd.snapshotter.v1.zfs",
1515
]
1616

17+
imports = ["/etc/containerd/config.d/*.toml"]
18+
1719
[grpc]
1820
address = "/run/containerd/containerd.sock"
1921

packages/containerd-2.0/containerd-config-toml_k8s_nvidia_containerd_sock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ disabled_plugins = [
1414
"io.containerd.snapshotter.v1.zfs",
1515
]
1616

17+
imports = ["/etc/containerd/config.d/*.toml"]
18+
1719
[grpc]
1820
address = "/run/containerd/containerd.sock"
1921

0 commit comments

Comments
 (0)