mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 11:21:47 +00:00
Merge pull request #95506 from benhxy/gke/etcd-migrate
Add client listening URLs configuration to etcd migrate.
This commit is contained in:
commit
db8258ca58
@ -56,21 +56,23 @@ func init() {
|
||||
|
||||
func TestMigrate(t *testing.T) {
|
||||
migrations := []struct {
|
||||
title string
|
||||
memberCount int
|
||||
startVersion string
|
||||
endVersion string
|
||||
protocol string
|
||||
title string
|
||||
memberCount int
|
||||
startVersion string
|
||||
endVersion string
|
||||
protocol string
|
||||
clientListenUrls string
|
||||
}{
|
||||
// upgrades
|
||||
{"v3-v3-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https"},
|
||||
{"oldest-newest-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https"},
|
||||
{"v3-v3-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https", ""},
|
||||
{"oldest-newest-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https", ""},
|
||||
{"v3-v3-up-with-additional-client-url", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https", "http://127.0.0.1:2379,http://10.128.0.1:2379"},
|
||||
|
||||
// warning: v2->v3 ha upgrades not currently supported.
|
||||
{"ha-v3-v3-up", 3, "3.0.17/etcd3", "3.1.12/etcd3", "https"},
|
||||
{"ha-v3-v3-up", 3, "3.0.17/etcd3", "3.1.12/etcd3", "https", ""},
|
||||
|
||||
// downgrades
|
||||
{"v3-v3-down", 1, "3.1.12/etcd3", "3.0.17/etcd3", "https"},
|
||||
{"v3-v3-down", 1, "3.1.12/etcd3", "3.0.17/etcd3", "https", ""},
|
||||
|
||||
// warning: ha downgrades not yet supported.
|
||||
}
|
||||
@ -80,7 +82,7 @@ func TestMigrate(t *testing.T) {
|
||||
start := MustParseEtcdVersionPair(m.startVersion)
|
||||
end := MustParseEtcdVersionPair(m.endVersion)
|
||||
|
||||
testCfgs := clusterConfig(t, m.title, m.memberCount, m.protocol)
|
||||
testCfgs := clusterConfig(t, m.title, m.memberCount, m.protocol, m.clientListenUrls)
|
||||
|
||||
servers := []*EtcdMigrateServer{}
|
||||
for _, cfg := range testCfgs {
|
||||
@ -217,7 +219,7 @@ func checkPermissions(t *testing.T, path string, expected os.FileMode) {
|
||||
}
|
||||
}
|
||||
|
||||
func clusterConfig(t *testing.T, name string, memberCount int, protocol string) []*EtcdMigrateCfg {
|
||||
func clusterConfig(t *testing.T, name string, memberCount int, protocol string, clientListenUrls string) []*EtcdMigrateCfg {
|
||||
peers := []string{}
|
||||
for i := 0; i < memberCount; i++ {
|
||||
memberName := fmt.Sprintf("%s-%d", name, i)
|
||||
@ -243,6 +245,7 @@ func clusterConfig(t *testing.T, name string, memberCount int, protocol string)
|
||||
port: uint64(2379 + i*10000),
|
||||
peerListenUrls: peerURL,
|
||||
peerAdvertiseUrls: peerURL,
|
||||
clientListenUrls: clientListenUrls,
|
||||
etcdDataPrefix: "/registry",
|
||||
ttlKeysDirectory: "/registry/events",
|
||||
supportedVersions: testSupportedVersions,
|
||||
|
@ -65,8 +65,8 @@ func runMigrate() {
|
||||
}
|
||||
|
||||
migrate(
|
||||
opts.name, opts.port, opts.peerListenUrls, opts.peerAdvertiseUrls, opts.binDir,
|
||||
opts.dataDir, opts.etcdDataPrefix, opts.ttlKeysDirectory, opts.initialCluster,
|
||||
opts.name, opts.port, opts.peerListenUrls, opts.peerAdvertiseUrls, opts.clientListenUrls,
|
||||
opts.binDir, opts.dataDir, opts.etcdDataPrefix, opts.ttlKeysDirectory, opts.initialCluster,
|
||||
target, opts.supportedVersions, opts.etcdServerArgs)
|
||||
}
|
||||
|
||||
@ -84,7 +84,8 @@ func copyBinaries() {
|
||||
}
|
||||
|
||||
// migrate opens or initializes the etcd data directory, configures the migrator, and starts the migration.
|
||||
func migrate(name string, port uint64, peerListenUrls string, peerAdvertiseUrls string, binPath string, dataDirPath string, etcdDataPrefix string, ttlKeysDirectory string,
|
||||
func migrate(name string, port uint64, peerListenUrls string, peerAdvertiseUrls string, clientListenUrls string,
|
||||
binPath string, dataDirPath string, etcdDataPrefix string, ttlKeysDirectory string,
|
||||
initialCluster string, target *EtcdVersionPair, bundledVersions SupportedVersions, etcdServerArgs string) {
|
||||
|
||||
dataDir, err := OpenOrCreateDataDirectory(dataDirPath)
|
||||
@ -98,6 +99,7 @@ func migrate(name string, port uint64, peerListenUrls string, peerAdvertiseUrls
|
||||
port: port,
|
||||
peerListenUrls: peerListenUrls,
|
||||
peerAdvertiseUrls: peerAdvertiseUrls,
|
||||
clientListenUrls: clientListenUrls,
|
||||
etcdDataPrefix: etcdDataPrefix,
|
||||
ttlKeysDirectory: ttlKeysDirectory,
|
||||
initialCluster: initialCluster,
|
||||
|
@ -39,6 +39,7 @@ func NewEtcdMigrateServer(cfg *EtcdMigrateCfg, client EtcdMigrateClient) *EtcdMi
|
||||
}
|
||||
|
||||
// Start starts an etcd server as a separate process, waits until it has started, and returns a exec.Cmd.
|
||||
// TODO: Add support for listening to client via TLS.
|
||||
func (r *EtcdMigrateServer) Start(version *EtcdVersion) error {
|
||||
etcdCmd := exec.Command(
|
||||
fmt.Sprintf("%s/etcd-%s", r.cfg.binPath, version),
|
||||
@ -46,7 +47,7 @@ func (r *EtcdMigrateServer) Start(version *EtcdVersion) error {
|
||||
"--initial-cluster", r.cfg.initialCluster,
|
||||
"--debug",
|
||||
"--data-dir", r.cfg.dataDirectory,
|
||||
"--listen-client-urls", fmt.Sprintf("http://127.0.0.1:%d", r.cfg.port),
|
||||
"--listen-client-urls", r.cfg.clientListenUrls,
|
||||
"--advertise-client-urls", fmt.Sprintf("http://127.0.0.1:%d", r.cfg.port),
|
||||
"--listen-peer-urls", r.cfg.peerListenUrls,
|
||||
"--initial-advertise-peer-urls", r.cfg.peerAdvertiseUrls,
|
||||
|
@ -33,6 +33,7 @@ type EtcdMigrateCfg struct {
|
||||
port uint64
|
||||
peerListenUrls string
|
||||
peerAdvertiseUrls string
|
||||
clientListenUrls string
|
||||
etcdDataPrefix string
|
||||
ttlKeysDirectory string
|
||||
supportedVersions SupportedVersions
|
||||
|
@ -42,6 +42,8 @@ const (
|
||||
peerListenUrlsFmt = "http://localhost:%d"
|
||||
peerAdvertiseUrlsEnv = "INITIAL_ADVERTISE_PEER_URLS"
|
||||
peerAdvertiseUrlsFmt = "http://localhost:%d"
|
||||
clientListenURLsEnv = "LISTEN_CLIENT_URLS"
|
||||
clientListenURLFmt = "http://127.0.0.1:%d"
|
||||
targetVersionEnv = "TARGET_VERSION"
|
||||
targetStorageEnv = "TARGET_STORAGE"
|
||||
etcdDataPrefixEnv = "ETCD_DATA_PREFIX"
|
||||
@ -66,6 +68,7 @@ type migrateOpts struct {
|
||||
targetVersion string
|
||||
targetStorage string
|
||||
etcdServerArgs string
|
||||
clientListenUrls string
|
||||
}
|
||||
|
||||
func registerFlags(flags *flag.FlagSet, opt *migrateOpts) {
|
||||
@ -81,6 +84,8 @@ func registerFlags(flags *flag.FlagSet, opt *migrateOpts) {
|
||||
"etcd --listen-peer-urls flag. If unset, fallbacks to LISTEN_PEER_URLS env and if unset defaults to http://localhost:<peer-port>.")
|
||||
flags.StringVar(&opts.peerAdvertiseUrls, "initial-advertise-peer-urls", "",
|
||||
"etcd --initial-advertise-peer-urls flag. If unset fallbacks to INITIAL_ADVERTISE_PEER_URLS env and if unset defaults to http://localhost:<peer-port>.")
|
||||
flags.StringVar(&opts.clientListenUrls, "listen-client-urls", "",
|
||||
"etcd --listen-client-urls flag. If unset, fallbacks to LISTEN_CLIENT_URLS env, and if unset defaults to http://127.0.0.1:<port>.")
|
||||
flags.StringVar(&opts.binDir, "bin-dir", "/usr/local/bin",
|
||||
"directory of etcd and etcdctl binaries, must contain etcd-<version> and etcdctl-<version> for each version listed in <bundled-versions>.")
|
||||
flags.StringVar(&opts.dataDir, "data-dir", "",
|
||||
@ -119,7 +124,7 @@ func fallbackToEnvWithDefault(flag, env, def string) string {
|
||||
if value, err := lookupEnv(env); err == nil {
|
||||
return value
|
||||
}
|
||||
klog.Warningf("%s variable unset - defaulting to %s", env, def)
|
||||
klog.Warningf("%s variable for %s flag unset - defaulting to %s", env, flag, def)
|
||||
return def
|
||||
}
|
||||
|
||||
@ -187,6 +192,11 @@ func (opts *migrateOpts) validateAndDefault() error {
|
||||
opts.peerAdvertiseUrls = fallbackToEnvWithDefault("initial-advertise-peer-urls", peerAdvertiseUrlsEnv, def)
|
||||
}
|
||||
|
||||
if opts.clientListenUrls == "" {
|
||||
def := fmt.Sprintf(clientListenURLFmt, opts.port)
|
||||
opts.clientListenUrls = fallbackToEnvWithDefault("listen-client-urls", clientListenURLsEnv, def)
|
||||
}
|
||||
|
||||
if opts.targetVersion == "" {
|
||||
if opts.targetVersion, err = fallbackToEnv("target-version", targetVersionEnv); err != nil {
|
||||
return err
|
||||
|
Loading…
Reference in New Issue
Block a user