Skip to content

Commit db8258c

Browse files
authored
Merge pull request kubernetes#95506 from benhxy/gke/etcd-migrate
Add client listening URLs configuration to etcd migrate.
2 parents c1a781c + e8fcc44 commit db8258c

File tree

5 files changed

+33
-16
lines changed

5 files changed

+33
-16
lines changed

cluster/images/etcd/migrate/integration_test.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,23 @@ func init() {
5656

5757
func TestMigrate(t *testing.T) {
5858
migrations := []struct {
59-
title string
60-
memberCount int
61-
startVersion string
62-
endVersion string
63-
protocol string
59+
title string
60+
memberCount int
61+
startVersion string
62+
endVersion string
63+
protocol string
64+
clientListenUrls string
6465
}{
6566
// upgrades
66-
{"v3-v3-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https"},
67-
{"oldest-newest-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https"},
67+
{"v3-v3-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https", ""},
68+
{"oldest-newest-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https", ""},
69+
{"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"},
6870

6971
// warning: v2->v3 ha upgrades not currently supported.
70-
{"ha-v3-v3-up", 3, "3.0.17/etcd3", "3.1.12/etcd3", "https"},
72+
{"ha-v3-v3-up", 3, "3.0.17/etcd3", "3.1.12/etcd3", "https", ""},
7173

7274
// downgrades
73-
{"v3-v3-down", 1, "3.1.12/etcd3", "3.0.17/etcd3", "https"},
75+
{"v3-v3-down", 1, "3.1.12/etcd3", "3.0.17/etcd3", "https", ""},
7476

7577
// warning: ha downgrades not yet supported.
7678
}
@@ -80,7 +82,7 @@ func TestMigrate(t *testing.T) {
8082
start := MustParseEtcdVersionPair(m.startVersion)
8183
end := MustParseEtcdVersionPair(m.endVersion)
8284

83-
testCfgs := clusterConfig(t, m.title, m.memberCount, m.protocol)
85+
testCfgs := clusterConfig(t, m.title, m.memberCount, m.protocol, m.clientListenUrls)
8486

8587
servers := []*EtcdMigrateServer{}
8688
for _, cfg := range testCfgs {
@@ -217,7 +219,7 @@ func checkPermissions(t *testing.T, path string, expected os.FileMode) {
217219
}
218220
}
219221

220-
func clusterConfig(t *testing.T, name string, memberCount int, protocol string) []*EtcdMigrateCfg {
222+
func clusterConfig(t *testing.T, name string, memberCount int, protocol string, clientListenUrls string) []*EtcdMigrateCfg {
221223
peers := []string{}
222224
for i := 0; i < memberCount; i++ {
223225
memberName := fmt.Sprintf("%s-%d", name, i)
@@ -243,6 +245,7 @@ func clusterConfig(t *testing.T, name string, memberCount int, protocol string)
243245
port: uint64(2379 + i*10000),
244246
peerListenUrls: peerURL,
245247
peerAdvertiseUrls: peerURL,
248+
clientListenUrls: clientListenUrls,
246249
etcdDataPrefix: "/registry",
247250
ttlKeysDirectory: "/registry/events",
248251
supportedVersions: testSupportedVersions,

cluster/images/etcd/migrate/migrate.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ func runMigrate() {
6565
}
6666

6767
migrate(
68-
opts.name, opts.port, opts.peerListenUrls, opts.peerAdvertiseUrls, opts.binDir,
69-
opts.dataDir, opts.etcdDataPrefix, opts.ttlKeysDirectory, opts.initialCluster,
68+
opts.name, opts.port, opts.peerListenUrls, opts.peerAdvertiseUrls, opts.clientListenUrls,
69+
opts.binDir, opts.dataDir, opts.etcdDataPrefix, opts.ttlKeysDirectory, opts.initialCluster,
7070
target, opts.supportedVersions, opts.etcdServerArgs)
7171
}
7272

@@ -84,7 +84,8 @@ func copyBinaries() {
8484
}
8585

8686
// migrate opens or initializes the etcd data directory, configures the migrator, and starts the migration.
87-
func migrate(name string, port uint64, peerListenUrls string, peerAdvertiseUrls string, binPath string, dataDirPath string, etcdDataPrefix string, ttlKeysDirectory string,
87+
func migrate(name string, port uint64, peerListenUrls string, peerAdvertiseUrls string, clientListenUrls string,
88+
binPath string, dataDirPath string, etcdDataPrefix string, ttlKeysDirectory string,
8889
initialCluster string, target *EtcdVersionPair, bundledVersions SupportedVersions, etcdServerArgs string) {
8990

9091
dataDir, err := OpenOrCreateDataDirectory(dataDirPath)
@@ -98,6 +99,7 @@ func migrate(name string, port uint64, peerListenUrls string, peerAdvertiseUrls
9899
port: port,
99100
peerListenUrls: peerListenUrls,
100101
peerAdvertiseUrls: peerAdvertiseUrls,
102+
clientListenUrls: clientListenUrls,
101103
etcdDataPrefix: etcdDataPrefix,
102104
ttlKeysDirectory: ttlKeysDirectory,
103105
initialCluster: initialCluster,

cluster/images/etcd/migrate/migrate_server.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,15 @@ func NewEtcdMigrateServer(cfg *EtcdMigrateCfg, client EtcdMigrateClient) *EtcdMi
3939
}
4040

4141
// Start starts an etcd server as a separate process, waits until it has started, and returns a exec.Cmd.
42+
// TODO: Add support for listening to client via TLS.
4243
func (r *EtcdMigrateServer) Start(version *EtcdVersion) error {
4344
etcdCmd := exec.Command(
4445
fmt.Sprintf("%s/etcd-%s", r.cfg.binPath, version),
4546
"--name", r.cfg.name,
4647
"--initial-cluster", r.cfg.initialCluster,
4748
"--debug",
4849
"--data-dir", r.cfg.dataDirectory,
49-
"--listen-client-urls", fmt.Sprintf("http://127.0.0.1:%d", r.cfg.port),
50+
"--listen-client-urls", r.cfg.clientListenUrls,
5051
"--advertise-client-urls", fmt.Sprintf("http://127.0.0.1:%d", r.cfg.port),
5152
"--listen-peer-urls", r.cfg.peerListenUrls,
5253
"--initial-advertise-peer-urls", r.cfg.peerAdvertiseUrls,

cluster/images/etcd/migrate/migrator.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ type EtcdMigrateCfg struct {
3333
port uint64
3434
peerListenUrls string
3535
peerAdvertiseUrls string
36+
clientListenUrls string
3637
etcdDataPrefix string
3738
ttlKeysDirectory string
3839
supportedVersions SupportedVersions

cluster/images/etcd/migrate/options.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ const (
4242
peerListenUrlsFmt = "http://localhost:%d"
4343
peerAdvertiseUrlsEnv = "INITIAL_ADVERTISE_PEER_URLS"
4444
peerAdvertiseUrlsFmt = "http://localhost:%d"
45+
clientListenURLsEnv = "LISTEN_CLIENT_URLS"
46+
clientListenURLFmt = "http://127.0.0.1:%d"
4547
targetVersionEnv = "TARGET_VERSION"
4648
targetStorageEnv = "TARGET_STORAGE"
4749
etcdDataPrefixEnv = "ETCD_DATA_PREFIX"
@@ -66,6 +68,7 @@ type migrateOpts struct {
6668
targetVersion string
6769
targetStorage string
6870
etcdServerArgs string
71+
clientListenUrls string
6972
}
7073

7174
func registerFlags(flags *flag.FlagSet, opt *migrateOpts) {
@@ -81,6 +84,8 @@ func registerFlags(flags *flag.FlagSet, opt *migrateOpts) {
8184
"etcd --listen-peer-urls flag. If unset, fallbacks to LISTEN_PEER_URLS env and if unset defaults to http://localhost:<peer-port>.")
8285
flags.StringVar(&opts.peerAdvertiseUrls, "initial-advertise-peer-urls", "",
8386
"etcd --initial-advertise-peer-urls flag. If unset fallbacks to INITIAL_ADVERTISE_PEER_URLS env and if unset defaults to http://localhost:<peer-port>.")
87+
flags.StringVar(&opts.clientListenUrls, "listen-client-urls", "",
88+
"etcd --listen-client-urls flag. If unset, fallbacks to LISTEN_CLIENT_URLS env, and if unset defaults to http://127.0.0.1:<port>.")
8489
flags.StringVar(&opts.binDir, "bin-dir", "/usr/local/bin",
8590
"directory of etcd and etcdctl binaries, must contain etcd-<version> and etcdctl-<version> for each version listed in <bundled-versions>.")
8691
flags.StringVar(&opts.dataDir, "data-dir", "",
@@ -119,7 +124,7 @@ func fallbackToEnvWithDefault(flag, env, def string) string {
119124
if value, err := lookupEnv(env); err == nil {
120125
return value
121126
}
122-
klog.Warningf("%s variable unset - defaulting to %s", env, def)
127+
klog.Warningf("%s variable for %s flag unset - defaulting to %s", env, flag, def)
123128
return def
124129
}
125130

@@ -187,6 +192,11 @@ func (opts *migrateOpts) validateAndDefault() error {
187192
opts.peerAdvertiseUrls = fallbackToEnvWithDefault("initial-advertise-peer-urls", peerAdvertiseUrlsEnv, def)
188193
}
189194

195+
if opts.clientListenUrls == "" {
196+
def := fmt.Sprintf(clientListenURLFmt, opts.port)
197+
opts.clientListenUrls = fallbackToEnvWithDefault("listen-client-urls", clientListenURLsEnv, def)
198+
}
199+
190200
if opts.targetVersion == "" {
191201
if opts.targetVersion, err = fallbackToEnv("target-version", targetVersionEnv); err != nil {
192202
return err

0 commit comments

Comments
 (0)