Skip to content

Commit ac77c55

Browse files
committed
feat: add support for gVisor runtime
Signed-off-by: Aurelia <[email protected]>
1 parent f25b064 commit ac77c55

File tree

4 files changed

+21
-0
lines changed

4 files changed

+21
-0
lines changed

cmd/osm-controller/main.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ type options struct {
8383
nodeRegistryMirrors string
8484
nodeRegistryCredentialsSecret string
8585
nodeContainerdRegistryMirrors containerruntime.RegistryMirrorsFlags
86+
containerdGVisorRuntime string
8687

8788
// Flags for proxy
8889
nodeHTTPProxy string
@@ -130,6 +131,7 @@ func main() {
130131
flag.StringVar(&opt.nodeNoProxy, "node-no-proxy", ".svc,.cluster.local,localhost,127.0.0.1", "If set, it configures the 'NO_PROXY' environment variable on the nodes.")
131132
flag.StringVar(&opt.nodeInsecureRegistries, "node-insecure-registries", "", "Comma separated list of registries which should be configured as insecure on the container runtime")
132133
flag.StringVar(&opt.nodeRegistryMirrors, "node-registry-mirrors", "", "Comma separated list of Docker image mirrors")
134+
flag.StringVar(&opt.containerdGVisorRuntime, "containerd-gvisor-runtime", "", "Runtime to use for gVisor/runsc. Typically \"io.containerd.runsc.v1\". Omit to disable.")
133135

134136
if opt.nodeContainerdRegistryMirrors == nil {
135137
opt.nodeContainerdRegistryMirrors = containerruntime.RegistryMirrorsFlags{}
@@ -222,6 +224,7 @@ func main() {
222224
PauseImage: opt.pauseImage,
223225
RegistryMirrors: opt.nodeRegistryMirrors,
224226
RegistryCredentialsSecret: opt.nodeRegistryCredentialsSecret,
227+
GVisorRuntime: opt.containerdGVisorRuntime,
225228
}
226229
containerRuntimeConfig, err := containerruntime.BuildConfig(containerRuntimeOpts)
227230
if err != nil {

pkg/containerruntime/config.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type Opts struct {
3636
RegistryMirrors string
3737
RegistryCredentialsSecret string
3838
PauseImage string
39+
GVisorRuntime string
3940
ContainerdRegistryMirrors RegistryMirrorsFlags
4041
}
4142

@@ -98,6 +99,7 @@ func BuildConfig(opts Opts) (Config, error) {
9899
withRegistryMirrors(opts.ContainerdRegistryMirrors),
99100
withSandboxImage(opts.PauseImage),
100101
withContainerdVersion(opts.ContainerdVersion),
102+
withGVisor(opts.GVisorRuntime),
101103
), nil
102104
}
103105

pkg/containerruntime/containerd.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type Containerd struct {
2727
registryMirrors map[string][]string
2828
sandboxImage string
2929
registryCredentials map[string]AuthConfig
30+
gVisorRuntime string
3031
version string
3132
}
3233

@@ -121,6 +122,13 @@ func (eng *Containerd) Config() (string, error) {
121122
},
122123
}
123124

125+
// https://gvisor.dev/docs/user_guide/containerd/quick_start/
126+
if eng.gVisorRuntime != "" {
127+
criPlugin.Containerd.Runtimes["runsc"] = containerdCRIRuntime{
128+
RuntimeType: eng.gVisorRuntime,
129+
}
130+
}
131+
124132
for registryName := range eng.registryMirrors {
125133
registry := criPlugin.Registry.Mirrors[registryName]
126134
registry.Endpoint = eng.registryMirrors[registryName]

pkg/containerruntime/containerruntime.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ func withContainerdVersion(version string) Opt {
5555
}
5656
}
5757

58+
func withGVisor(runtime string) Opt {
59+
return func(cfg *Config) {
60+
cfg.GVisorRuntime = runtime
61+
}
62+
}
63+
5864
func get(_ string, opts ...Opt) Config {
5965
cfg := Config{}
6066
cfg.Containerd = &Containerd{}
@@ -75,6 +81,7 @@ type Config struct {
7581
ContainerLogMaxFiles string `json:",omitempty"`
7682
ContainerLogMaxSize string `json:",omitempty"`
7783
ContainerdVersion string `json:",omitempty"`
84+
GVisorRuntime string `json:",omitempty"`
7885
}
7986

8087
// AuthConfig is a COPY of github.com/containerd/containerd/pkg/cri/config.AuthConfig.
@@ -103,6 +110,7 @@ func (cfg Config) Engine() Engine {
103110
sandboxImage: cfg.SandboxImage,
104111
registryCredentials: cfg.RegistryCredentials,
105112
version: cfg.ContainerdVersion,
113+
enableGVisor: cfg.GVisorRuntime,
106114
}
107115
return containerd
108116
}

0 commit comments

Comments
 (0)