Merge pull request #61210 from hzxuzhonghu/etcd-random-check
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>. check etcd servers by a random order **What this PR does / why we need it**: Every time a health check is called on the APIServer via the /healthz endpoint, an etcd healthcheck is performed. Here makes servers check with a random order. **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 #61180 **Special notes for your reviewer**: **Release note**: ```release-note NONE ``` Kubernetes-commit: a0a742c38b847c69d49e9171732355ffa15e3e69
This commit is contained in:
commit
dcffb82a13
|
|
@ -812,119 +812,119 @@
|
|||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/admission/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/admissionregistration/v1alpha1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/admissionregistration/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/apps/v1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/apps/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/apps/v1beta2",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/authentication/v1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/authentication/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/authorization/v1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/authorization/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/autoscaling/v1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/autoscaling/v2beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/batch/v1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/batch/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/batch/v2alpha1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/certificates/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/core/v1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/events/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/extensions/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/networking/v1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/policy/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/rbac/v1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/rbac/v1alpha1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/rbac/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/scheduling/v1alpha1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/settings/v1alpha1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/storage/v1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/storage/v1alpha1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/api/storage/v1beta1",
|
||||
"Rev": "847e24b2c0e587a6a097d187ebd72e1ca24de001"
|
||||
"Rev": "0951d1bc89842eabb47e3a3605c5d7f72871f49e"
|
||||
},
|
||||
{
|
||||
"ImportPath": "k8s.io/apimachinery/pkg/api/equality",
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ package preflight
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"net"
|
||||
"net/url"
|
||||
"time"
|
||||
|
|
@ -25,12 +26,6 @@ import (
|
|||
|
||||
const connectionTimeout = 1 * time.Second
|
||||
|
||||
type connection interface {
|
||||
serverReachable(address string) bool
|
||||
parseServerList(serverList []string) error
|
||||
CheckEtcdServers() (bool, error)
|
||||
}
|
||||
|
||||
// EtcdConnection holds the Etcd server list
|
||||
type EtcdConnection struct {
|
||||
ServerList []string
|
||||
|
|
@ -59,9 +54,11 @@ func parseServerURI(serverURI string) (*url.URL, error) {
|
|||
// CheckEtcdServers will attempt to reach all etcd servers once. If any
|
||||
// can be reached, return true.
|
||||
func (con EtcdConnection) CheckEtcdServers() (done bool, err error) {
|
||||
// Attempt to reach every Etcd server in order
|
||||
for _, serverURI := range con.ServerList {
|
||||
host, err := parseServerURI(serverURI)
|
||||
// Attempt to reach every Etcd server randomly.
|
||||
serverNumber := len(con.ServerList)
|
||||
serverPerms := rand.Perm(serverNumber)
|
||||
for _, index := range serverPerms {
|
||||
host, err := parseServerURI(con.ServerList[index])
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue