mirror of https://github.com/k3s-io/k3s
Merge pull request #65707 from dims/remove-deprecated-cadvisor-port
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Remove --cadvisor-port - has been deprecated since v1.10 **What this PR does / why we need it**: **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes #56523 **Special notes for your reviewer**: - Deprecated in https://github.com/kubernetes/kubernetes/pull/59827 (v1.10) - Disabled in https://github.com/kubernetes/kubernetes/pull/63881 (v1.11) **Release note**: ```release-note [action required] The formerly publicly-available cAdvisor web UI that the kubelet started using `--cadvisor-port` is now entirely removed in 1.12. The recommended way to run cAdvisor if you still need it, is via a DaemonSet. ```pull/8/head
commit
097f300a4d
|
@ -34,7 +34,6 @@ go_library(
|
||||||
"//pkg/util/taints:go_default_library",
|
"//pkg/util/taints:go_default_library",
|
||||||
"//pkg/version/verflag:go_default_library",
|
"//pkg/version/verflag:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/logs:go_default_library",
|
||||||
|
|
|
@ -27,7 +27,6 @@ import (
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
utilvalidation "k8s.io/apimachinery/pkg/util/validation"
|
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
"k8s.io/apiserver/pkg/util/flag"
|
"k8s.io/apiserver/pkg/util/flag"
|
||||||
"k8s.io/kubernetes/pkg/apis/componentconfig"
|
"k8s.io/kubernetes/pkg/apis/componentconfig"
|
||||||
|
@ -121,9 +120,6 @@ type KubeletFlags struct {
|
||||||
// is true and upon the initial registration of the node.
|
// is true and upon the initial registration of the node.
|
||||||
RegisterWithTaints []core.Taint
|
RegisterWithTaints []core.Taint
|
||||||
|
|
||||||
// cAdvisorPort is the port of the localhost cAdvisor endpoint (set to 0 to disable)
|
|
||||||
CAdvisorPort int32
|
|
||||||
|
|
||||||
// WindowsService should be set to true if kubelet is running as a service on Windows.
|
// WindowsService should be set to true if kubelet is running as a service on Windows.
|
||||||
// Its corresponding flag only gets registered in Windows builds.
|
// Its corresponding flag only gets registered in Windows builds.
|
||||||
WindowsService bool
|
WindowsService bool
|
||||||
|
@ -239,8 +235,6 @@ func NewKubeletFlags() *KubeletFlags {
|
||||||
HostNetworkSources: []string{kubetypes.AllSource},
|
HostNetworkSources: []string{kubetypes.AllSource},
|
||||||
HostPIDSources: []string{kubetypes.AllSource},
|
HostPIDSources: []string{kubetypes.AllSource},
|
||||||
HostIPCSources: []string{kubetypes.AllSource},
|
HostIPCSources: []string{kubetypes.AllSource},
|
||||||
// TODO(#56523:v1.12.0): Remove --cadvisor-port, it has been deprecated since v1.10
|
|
||||||
CAdvisorPort: 0,
|
|
||||||
// TODO(#58010:v1.13.0): Remove --allow-privileged, it is deprecated
|
// TODO(#58010:v1.13.0): Remove --allow-privileged, it is deprecated
|
||||||
AllowPrivileged: true,
|
AllowPrivileged: true,
|
||||||
// prior to the introduction of this flag, there was a hardcoded cap of 50 images
|
// prior to the introduction of this flag, there was a hardcoded cap of 50 images
|
||||||
|
@ -253,9 +247,6 @@ func ValidateKubeletFlags(f *KubeletFlags) error {
|
||||||
if f.DynamicConfigDir.Provided() && !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) {
|
if f.DynamicConfigDir.Provided() && !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) {
|
||||||
return fmt.Errorf("the DynamicKubeletConfig feature gate must be enabled in order to use the --dynamic-config-dir flag")
|
return fmt.Errorf("the DynamicKubeletConfig feature gate must be enabled in order to use the --dynamic-config-dir flag")
|
||||||
}
|
}
|
||||||
if f.CAdvisorPort != 0 && utilvalidation.IsValidPortNum(int(f.CAdvisorPort)) != nil {
|
|
||||||
return fmt.Errorf("invalid configuration: CAdvisorPort (--cadvisor-port) %v must be between 0 and 65535, inclusive", f.CAdvisorPort)
|
|
||||||
}
|
|
||||||
if f.NodeStatusMaxImages < -1 {
|
if f.NodeStatusMaxImages < -1 {
|
||||||
return fmt.Errorf("invalid configuration: NodeStatusMaxImages (--node-status-max-images) must be -1 or greater")
|
return fmt.Errorf("invalid configuration: NodeStatusMaxImages (--node-status-max-images) must be -1 or greater")
|
||||||
}
|
}
|
||||||
|
@ -401,8 +392,6 @@ func (f *KubeletFlags) AddFlags(mainfs *pflag.FlagSet) {
|
||||||
// DEPRECATED FLAGS
|
// DEPRECATED FLAGS
|
||||||
fs.StringVar(&f.BootstrapKubeconfig, "experimental-bootstrap-kubeconfig", f.BootstrapKubeconfig, "")
|
fs.StringVar(&f.BootstrapKubeconfig, "experimental-bootstrap-kubeconfig", f.BootstrapKubeconfig, "")
|
||||||
fs.MarkDeprecated("experimental-bootstrap-kubeconfig", "Use --bootstrap-kubeconfig")
|
fs.MarkDeprecated("experimental-bootstrap-kubeconfig", "Use --bootstrap-kubeconfig")
|
||||||
fs.Int32Var(&f.CAdvisorPort, "cadvisor-port", f.CAdvisorPort, "The port of the localhost cAdvisor endpoint (set to 0 to disable)")
|
|
||||||
fs.MarkDeprecated("cadvisor-port", "The default will change to 0 (disabled) in 1.11, and the cadvisor port will be removed entirely in 1.12")
|
|
||||||
fs.DurationVar(&f.MinimumGCAge.Duration, "minimum-container-ttl-duration", f.MinimumGCAge.Duration, "Minimum age for a finished container before it is garbage collected. Examples: '300ms', '10s' or '2h45m'")
|
fs.DurationVar(&f.MinimumGCAge.Duration, "minimum-container-ttl-duration", f.MinimumGCAge.Duration, "Minimum age for a finished container before it is garbage collected. Examples: '300ms', '10s' or '2h45m'")
|
||||||
fs.MarkDeprecated("minimum-container-ttl-duration", "Use --eviction-hard or --eviction-soft instead. Will be removed in a future version.")
|
fs.MarkDeprecated("minimum-container-ttl-duration", "Use --eviction-hard or --eviction-soft instead. Will be removed in a future version.")
|
||||||
fs.Int32Var(&f.MaxPerPodContainerCount, "maximum-dead-containers-per-container", f.MaxPerPodContainerCount, "Maximum number of old instances to retain per container. Each container takes up some disk space.")
|
fs.Int32Var(&f.MaxPerPodContainerCount, "maximum-dead-containers-per-container", f.MaxPerPodContainerCount, "Maximum number of old instances to retain per container. Each container takes up some disk space.")
|
||||||
|
|
|
@ -633,7 +633,7 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, stopCh <-chan
|
||||||
|
|
||||||
if kubeDeps.CAdvisorInterface == nil {
|
if kubeDeps.CAdvisorInterface == nil {
|
||||||
imageFsInfoProvider := cadvisor.NewImageFsInfoProvider(s.ContainerRuntime, s.RemoteRuntimeEndpoint)
|
imageFsInfoProvider := cadvisor.NewImageFsInfoProvider(s.ContainerRuntime, s.RemoteRuntimeEndpoint)
|
||||||
kubeDeps.CAdvisorInterface, err = cadvisor.New(s.Address, uint(s.CAdvisorPort), imageFsInfoProvider, s.RootDirectory, cadvisor.UsingLegacyCadvisorStats(s.ContainerRuntime, s.RemoteRuntimeEndpoint))
|
kubeDeps.CAdvisorInterface, err = cadvisor.New(imageFsInfoProvider, s.RootDirectory, cadvisor.UsingLegacyCadvisorStats(s.ContainerRuntime, s.RemoteRuntimeEndpoint))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,12 +31,10 @@ go_library(
|
||||||
"//vendor/github.com/google/cadvisor/info/v2:go_default_library",
|
"//vendor/github.com/google/cadvisor/info/v2:go_default_library",
|
||||||
] + select({
|
] + select({
|
||||||
"@io_bazel_rules_go//go/platform:linux": [
|
"@io_bazel_rules_go//go/platform:linux": [
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
|
|
||||||
"//vendor/github.com/golang/glog:go_default_library",
|
"//vendor/github.com/golang/glog:go_default_library",
|
||||||
"//vendor/github.com/google/cadvisor/cache/memory:go_default_library",
|
"//vendor/github.com/google/cadvisor/cache/memory:go_default_library",
|
||||||
"//vendor/github.com/google/cadvisor/container:go_default_library",
|
"//vendor/github.com/google/cadvisor/container:go_default_library",
|
||||||
"//vendor/github.com/google/cadvisor/fs:go_default_library",
|
"//vendor/github.com/google/cadvisor/fs:go_default_library",
|
||||||
"//vendor/github.com/google/cadvisor/http:go_default_library",
|
|
||||||
"//vendor/github.com/google/cadvisor/manager:go_default_library",
|
"//vendor/github.com/google/cadvisor/manager:go_default_library",
|
||||||
"//vendor/github.com/google/cadvisor/metrics:go_default_library",
|
"//vendor/github.com/google/cadvisor/metrics:go_default_library",
|
||||||
"//vendor/github.com/google/cadvisor/utils/sysfs:go_default_library",
|
"//vendor/github.com/google/cadvisor/utils/sysfs:go_default_library",
|
||||||
|
|
|
@ -21,24 +21,20 @@ package cadvisor
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strconv"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/google/cadvisor/cache/memory"
|
"github.com/google/cadvisor/cache/memory"
|
||||||
cadvisormetrics "github.com/google/cadvisor/container"
|
cadvisormetrics "github.com/google/cadvisor/container"
|
||||||
"github.com/google/cadvisor/events"
|
"github.com/google/cadvisor/events"
|
||||||
cadvisorhttp "github.com/google/cadvisor/http"
|
|
||||||
cadvisorapi "github.com/google/cadvisor/info/v1"
|
cadvisorapi "github.com/google/cadvisor/info/v1"
|
||||||
cadvisorapiv2 "github.com/google/cadvisor/info/v2"
|
cadvisorapiv2 "github.com/google/cadvisor/info/v2"
|
||||||
"github.com/google/cadvisor/manager"
|
"github.com/google/cadvisor/manager"
|
||||||
"github.com/google/cadvisor/metrics"
|
"github.com/google/cadvisor/metrics"
|
||||||
"github.com/google/cadvisor/utils/sysfs"
|
"github.com/google/cadvisor/utils/sysfs"
|
||||||
"k8s.io/apimachinery/pkg/util/runtime"
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/types"
|
"k8s.io/kubernetes/pkg/kubelet/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -105,7 +101,7 @@ func containerLabels(c *cadvisorapi.ContainerInfo) map[string]string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a cAdvisor and exports its API on the specified port if port > 0.
|
// New creates a cAdvisor and exports its API on the specified port if port > 0.
|
||||||
func New(address string, port uint, imageFsInfoProvider ImageFsInfoProvider, rootPath string, usingLegacyStats bool) (Interface, error) {
|
func New(imageFsInfoProvider ImageFsInfoProvider, rootPath string, usingLegacyStats bool) (Interface, error) {
|
||||||
sysFs := sysfs.NewRealSysFs()
|
sysFs := sysfs.NewRealSysFs()
|
||||||
|
|
||||||
ignoreMetrics := cadvisormetrics.MetricSet{
|
ignoreMetrics := cadvisormetrics.MetricSet{
|
||||||
|
@ -140,10 +136,6 @@ func New(address string, port uint, imageFsInfoProvider ImageFsInfoProvider, roo
|
||||||
Manager: m,
|
Manager: m,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = cadvisorClient.exportHTTP(address, port)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return cadvisorClient, nil
|
return cadvisorClient, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,42 +143,6 @@ func (cc *cadvisorClient) Start() error {
|
||||||
return cc.Manager.Start()
|
return cc.Manager.Start()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cc *cadvisorClient) exportHTTP(address string, port uint) error {
|
|
||||||
// Register the handlers regardless as this registers the prometheus
|
|
||||||
// collector properly.
|
|
||||||
mux := http.NewServeMux()
|
|
||||||
err := cadvisorhttp.RegisterHandlers(mux, cc, "", "", "", "")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
cadvisorhttp.RegisterPrometheusHandler(mux, cc, "/metrics", containerLabels)
|
|
||||||
|
|
||||||
// Only start the http server if port > 0
|
|
||||||
if port > 0 {
|
|
||||||
serv := &http.Server{
|
|
||||||
Addr: net.JoinHostPort(address, strconv.Itoa(int(port))),
|
|
||||||
Handler: mux,
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(vmarmol): Remove this when the cAdvisor port is once again free.
|
|
||||||
// If export failed, retry in the background until we are able to bind.
|
|
||||||
// This allows an existing cAdvisor to be killed before this one registers.
|
|
||||||
go func() {
|
|
||||||
defer runtime.HandleCrash()
|
|
||||||
|
|
||||||
err := serv.ListenAndServe()
|
|
||||||
for err != nil {
|
|
||||||
glog.Infof("Failed to register cAdvisor on port %d, retrying. Error: %v", port, err)
|
|
||||||
time.Sleep(time.Minute)
|
|
||||||
err = serv.ListenAndServe()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cc *cadvisorClient) ContainerInfo(name string, req *cadvisorapi.ContainerInfoRequest) (*cadvisorapi.ContainerInfo, error) {
|
func (cc *cadvisorClient) ContainerInfo(name string, req *cadvisorapi.ContainerInfoRequest) (*cadvisorapi.ContainerInfo, error) {
|
||||||
return cc.GetContainerInfo(name, req)
|
return cc.GetContainerInfo(name, req)
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ type cadvisorUnsupported struct {
|
||||||
|
|
||||||
var _ Interface = new(cadvisorUnsupported)
|
var _ Interface = new(cadvisorUnsupported)
|
||||||
|
|
||||||
func New(address string, port uint, imageFsInfoProvider ImageFsInfoProvider, rootPath string, usingLegacyStats bool) (Interface, error) {
|
func New(imageFsInfoProvider ImageFsInfoProvider, rootPath string, usingLegacyStats bool) (Interface, error) {
|
||||||
return &cadvisorUnsupported{}, nil
|
return &cadvisorUnsupported{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ type cadvisorClient struct {
|
||||||
var _ Interface = new(cadvisorClient)
|
var _ Interface = new(cadvisorClient)
|
||||||
|
|
||||||
// New creates a cAdvisor and exports its API on the specified port if port > 0.
|
// New creates a cAdvisor and exports its API on the specified port if port > 0.
|
||||||
func New(address string, port uint, imageFsInfoProvider ImageFsInfoProvider, rootPath string, usingLegacyStats bool) (Interface, error) {
|
func New(imageFsInfoProvider ImageFsInfoProvider, rootPath string, usingLegacyStats bool) (Interface, error) {
|
||||||
client, err := winstats.NewPerfCounterClient()
|
client, err := winstats.NewPerfCounterClient()
|
||||||
return &cadvisorClient{
|
return &cadvisorClient{
|
||||||
rootPath: rootPath,
|
rootPath: rootPath,
|
||||||
|
|
|
@ -99,7 +99,7 @@ func containerRuntime() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup cadvisor to check the container environment
|
// Setup cadvisor to check the container environment
|
||||||
c, err := cadvisor.New("", 0 /*don't start the http server*/, cadvisor.NewImageFsInfoProvider("docker", ""), "/var/lib/kubelet", false)
|
c, err := cadvisor.New(cadvisor.NewImageFsInfoProvider("docker", ""), "/var/lib/kubelet", false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return printError("Container Runtime Check: %s Could not start cadvisor %v", failed, err)
|
return printError("Container Runtime Check: %s Could not start cadvisor %v", failed, err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue