Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

crictl: Adds support for updating resource limits for Windows Containers #799

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
27 changes: 25 additions & 2 deletions cmd/crictl/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"encoding/json"
"fmt"
"log"
goruntime "runtime"
"sort"
"strings"
"time"
Expand Down Expand Up @@ -209,6 +210,14 @@ var updateContainerCommand = &cli.Command{
Usage: "Update one or more running containers",
ArgsUsage: "CONTAINER-ID [CONTAINER-ID...]",
Flags: []cli.Flag{
&cli.Int64Flag{
Name: "cpu-count",
Usage: "(Windows only) Number of CPUs available to the container",
},
&cli.Int64Flag{
Name: "cpu-maximum",
Usage: "(Windows only) Portion of CPU cycles specified as a percentage * 100",
},
&cli.Int64Flag{
Name: "cpu-period",
Usage: "CPU CFS period to be used for hardcapping (in usecs). 0 to use system default",
Expand Down Expand Up @@ -245,6 +254,7 @@ var updateContainerCommand = &cli.Command{
defer closeConnection(context, runtimeConn)

options := updateOptions{
CPUMaximum: context.Int64("cpu-maximum"),
CPUPeriod: context.Int64("cpu-period"),
CPUQuota: context.Int64("cpu-quota"),
CPUShares: context.Int64("cpu-share"),
Expand Down Expand Up @@ -698,6 +708,10 @@ func StartContainer(client pb.RuntimeServiceClient, ID string) error {
}

type updateOptions struct {
// (Windows only) Number of CPUs available to the container.
CPUCount int64
// (Windows only) Portion of CPU cycles specified as a percentage * 100.
CPUMaximum int64
// CPU CFS (Completely Fair Scheduler) period. Default: 0 (not specified).
CPUPeriod int64
// CPU CFS (Completely Fair Scheduler) quota. Default: 0 (not specified).
Expand All @@ -722,15 +736,24 @@ func UpdateContainerResources(client pb.RuntimeServiceClient, ID string, opts up
}
request := &pb.UpdateContainerResourcesRequest{
ContainerId: ID,
Linux: &pb.LinuxContainerResources{
}
if goruntime.GOOS != "windows" {
request.Linux = &pb.LinuxContainerResources{
CpuPeriod: opts.CPUPeriod,
CpuQuota: opts.CPUQuota,
CpuShares: opts.CPUShares,
CpusetCpus: opts.CpusetCpus,
CpusetMems: opts.CpusetMems,
MemoryLimitInBytes: opts.MemoryLimitInBytes,
OomScoreAdj: opts.OomScoreAdj,
},
}
} else {
request.Windows = &pb.WindowsContainerResources{
CpuCount: opts.CPUCount,
CpuMaximum: opts.CPUMaximum,
CpuShares: opts.CPUShares,
MemoryLimitInBytes: opts.MemoryLimitInBytes,
}
}
logrus.Debugf("UpdateContainerResourcesRequest: %v", request)
r, err := client.UpdateContainerResources(context.Background(), request)
Expand Down