mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-11-02 11:18:16 +00:00
Make etcd component status consistent with health probes
Co-authored-by: Antonio Ojea <antonio.ojea.garcia@gmail.com>
This commit is contained in:
@@ -21,12 +21,8 @@ import (
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||
@@ -35,7 +31,6 @@ import (
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||
"k8s.io/apiserver/pkg/storage/etcd3"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
"k8s.io/client-go/informers"
|
||||
networkingv1alpha1client "k8s.io/client-go/kubernetes/typed/networking/v1alpha1"
|
||||
@@ -69,7 +64,6 @@ import (
|
||||
serviceaccountstore "k8s.io/kubernetes/pkg/registry/core/serviceaccount/storage"
|
||||
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||
"k8s.io/kubernetes/pkg/serviceaccount"
|
||||
utilsnet "k8s.io/utils/net"
|
||||
)
|
||||
|
||||
// LegacyRESTStorageProvider provides information needed to build RESTStorage for core, but
|
||||
@@ -416,43 +410,16 @@ type componentStatusStorage struct {
|
||||
storageFactory serverstorage.StorageFactory
|
||||
}
|
||||
|
||||
func (s componentStatusStorage) serversToValidate() map[string]*componentstatus.Server {
|
||||
func (s componentStatusStorage) serversToValidate() map[string]componentstatus.Server {
|
||||
// this is fragile, which assumes that the default port is being used
|
||||
// TODO: switch to secure port until these components remove the ability to serve insecurely.
|
||||
serversToValidate := map[string]*componentstatus.Server{
|
||||
"controller-manager": {EnableHTTPS: true, TLSConfig: &tls.Config{InsecureSkipVerify: true}, Addr: "127.0.0.1", Port: ports.KubeControllerManagerPort, Path: "/healthz"},
|
||||
"scheduler": {EnableHTTPS: true, TLSConfig: &tls.Config{InsecureSkipVerify: true}, Addr: "127.0.0.1", Port: kubeschedulerconfig.DefaultKubeSchedulerPort, Path: "/healthz"},
|
||||
serversToValidate := map[string]componentstatus.Server{
|
||||
"controller-manager": &componentstatus.HttpServer{EnableHTTPS: true, TLSConfig: &tls.Config{InsecureSkipVerify: true}, Addr: "127.0.0.1", Port: ports.KubeControllerManagerPort, Path: "/healthz"},
|
||||
"scheduler": &componentstatus.HttpServer{EnableHTTPS: true, TLSConfig: &tls.Config{InsecureSkipVerify: true}, Addr: "127.0.0.1", Port: kubeschedulerconfig.DefaultKubeSchedulerPort, Path: "/healthz"},
|
||||
}
|
||||
|
||||
for ix, machine := range s.storageFactory.Backends() {
|
||||
etcdUrl, err := url.Parse(machine.Server)
|
||||
if err != nil {
|
||||
klog.Errorf("Failed to parse etcd url for validation: %v", err)
|
||||
continue
|
||||
}
|
||||
var port int
|
||||
var addr string
|
||||
if strings.Contains(etcdUrl.Host, ":") {
|
||||
var portString string
|
||||
addr, portString, err = net.SplitHostPort(etcdUrl.Host)
|
||||
if err != nil {
|
||||
klog.Errorf("Failed to split host/port: %s (%v)", etcdUrl.Host, err)
|
||||
continue
|
||||
}
|
||||
port, _ = utilsnet.ParsePort(portString, true)
|
||||
} else {
|
||||
addr = etcdUrl.Host
|
||||
port = 2379
|
||||
}
|
||||
// TODO: etcd health checking should be abstracted in the storage tier
|
||||
serversToValidate[fmt.Sprintf("etcd-%d", ix)] = &componentstatus.Server{
|
||||
Addr: addr,
|
||||
EnableHTTPS: etcdUrl.Scheme == "https",
|
||||
TLSConfig: machine.TLSConfig,
|
||||
Port: port,
|
||||
Path: "/health",
|
||||
Validate: etcd3.EtcdHealthCheck,
|
||||
}
|
||||
for ix, cfg := range s.storageFactory.Configs() {
|
||||
serversToValidate[fmt.Sprintf("etcd-%d", ix)] = &componentstatus.EtcdServer{Config: cfg}
|
||||
}
|
||||
return serversToValidate
|
||||
}
|
||||
|
||||
@@ -51,3 +51,7 @@ func (f fakeStorageFactory) ResourcePrefix(groupResource schema.GroupResource) s
|
||||
func (f fakeStorageFactory) Backends() []storage.Backend {
|
||||
return []storage.Backend{{Server: "etcd-0"}}
|
||||
}
|
||||
|
||||
func (f fakeStorageFactory) Configs() []storagebackend.Config {
|
||||
return []storagebackend.Config{{Transport: storagebackend.TransportConfig{ServerList: []string{"etcd-0"}}}}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user