diff options
author | Andy Librian <andylibrian@gmail.com> | 2020-10-09 05:54:16 +0700 |
---|---|---|
committer | Andy Librian <andylibrian@gmail.com> | 2020-10-09 05:54:16 +0700 |
commit | 34a33d614efcd6c693cb86f6f1d7e4b8df8772ec (patch) | |
tree | 2a539fbe426ad53636a214c6df60edb9a5ab7ae4 /libpod | |
parent | 2587cba3899213356575f01cc0aa226c0209b8ae (diff) | |
download | podman-34a33d614efcd6c693cb86f6f1d7e4b8df8772ec.tar.gz podman-34a33d614efcd6c693cb86f6f1d7e4b8df8772ec.tar.bz2 podman-34a33d614efcd6c693cb86f6f1d7e4b8df8772ec.zip |
Add support for resource cpu limit to generate kube
fixes #7855
Signed-off-by: Andy Librian <andylibrian@gmail.com>
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/kube.go | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/libpod/kube.go b/libpod/kube.go index 6df79e394..cd5064c84 100644 --- a/libpod/kube.go +++ b/libpod/kube.go @@ -307,18 +307,40 @@ func containerToV1Container(c *Container) (v1.Container, []v1.Volume, error) { kubeContainer.StdinOnce = false kubeContainer.TTY = c.config.Spec.Process.Terminal - // TODO add CPU limit support. if c.config.Spec.Linux != nil && - c.config.Spec.Linux.Resources != nil && - c.config.Spec.Linux.Resources.Memory != nil && - c.config.Spec.Linux.Resources.Memory.Limit != nil { - if kubeContainer.Resources.Limits == nil { - kubeContainer.Resources.Limits = v1.ResourceList{} + c.config.Spec.Linux.Resources != nil { + if c.config.Spec.Linux.Resources.Memory != nil && + c.config.Spec.Linux.Resources.Memory.Limit != nil { + if kubeContainer.Resources.Limits == nil { + kubeContainer.Resources.Limits = v1.ResourceList{} + } + + qty := kubeContainer.Resources.Limits.Memory() + qty.Set(*c.config.Spec.Linux.Resources.Memory.Limit) + kubeContainer.Resources.Limits[v1.ResourceMemory] = *qty } - qty := kubeContainer.Resources.Limits.Memory() - qty.Set(*c.config.Spec.Linux.Resources.Memory.Limit) - kubeContainer.Resources.Limits[v1.ResourceMemory] = *qty + if c.config.Spec.Linux.Resources.CPU != nil && + c.config.Spec.Linux.Resources.CPU.Quota != nil && + c.config.Spec.Linux.Resources.CPU.Period != nil { + quota := *c.config.Spec.Linux.Resources.CPU.Quota + period := *c.config.Spec.Linux.Resources.CPU.Period + + if quota > 0 && period > 0 { + cpuLimitMilli := int64(1000 * float64(quota) / float64(period)) + + // Kubernetes: precision finer than 1m is not allowed + if cpuLimitMilli >= 1 { + if kubeContainer.Resources.Limits == nil { + kubeContainer.Resources.Limits = v1.ResourceList{} + } + + qty := kubeContainer.Resources.Limits.Cpu() + qty.SetMilli(cpuLimitMilli) + kubeContainer.Resources.Limits[v1.ResourceCPU] = *qty + } + } + } } return kubeContainer, kubeVolumes, nil |