Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
5dc0845e
Commit
5dc0845e
authored
Aug 18, 2017
by
Zihong Zheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add upgrades tests for kube-proxy daemonset migration path
parent
25da6e64
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
92 additions
and
7 deletions
+92
-7
nodes_util.go
test/e2e/framework/nodes_util.go
+29
-7
cluster_upgrade.go
test/e2e/lifecycle/cluster_upgrade.go
+63
-0
No files found.
test/e2e/framework/nodes_util.go
View file @
5dc0845e
...
...
@@ -42,7 +42,7 @@ func EtcdUpgrade(target_storage, target_version string) error {
func
MasterUpgrade
(
v
string
)
error
{
switch
TestContext
.
Provider
{
case
"gce"
:
return
masterUpgradeGCE
(
v
)
return
masterUpgradeGCE
(
v
,
false
)
case
"gke"
:
return
masterUpgradeGKE
(
v
)
default
:
...
...
@@ -61,8 +61,14 @@ func etcdUpgradeGCE(target_storage, target_version string) error {
return
err
}
func
masterUpgradeGCE
(
rawV
string
)
error
{
env
:=
os
.
Environ
()
// TODO(mrhohn): Remove this function when kube-proxy is run as a DaemonSet by default.
func
MasterUpgradeGCEWithKubeProxyDaemonSet
(
v
string
,
enableKubeProxyDaemonSet
bool
)
error
{
return
masterUpgradeGCE
(
v
,
enableKubeProxyDaemonSet
)
}
// TODO(mrhohn): Remove 'enableKubeProxyDaemonSet' when kube-proxy is run as a DaemonSet by default.
func
masterUpgradeGCE
(
rawV
string
,
enableKubeProxyDaemonSet
bool
)
error
{
env
:=
append
(
os
.
Environ
(),
fmt
.
Sprintf
(
"KUBE_PROXY_DAEMONSET=%v"
,
enableKubeProxyDaemonSet
))
// TODO: Remove these variables when they're no longer needed for downgrades.
if
TestContext
.
EtcdUpgradeVersion
!=
""
&&
TestContext
.
EtcdUpgradeStorage
!=
""
{
env
=
append
(
env
,
...
...
@@ -101,7 +107,7 @@ func NodeUpgrade(f *Framework, v string, img string) error {
var
err
error
switch
TestContext
.
Provider
{
case
"gce"
:
err
=
nodeUpgradeGCE
(
v
,
img
)
err
=
nodeUpgradeGCE
(
v
,
img
,
false
)
case
"gke"
:
err
=
nodeUpgradeGKE
(
v
,
img
)
default
:
...
...
@@ -122,14 +128,30 @@ func NodeUpgrade(f *Framework, v string, img string) error {
return
nil
}
func
nodeUpgradeGCE
(
rawV
,
img
string
)
error
{
// TODO(mrhohn): Remove this function when kube-proxy is run as a DaemonSet by default.
func
NodeUpgradeGCEWithKubeProxyDaemonSet
(
f
*
Framework
,
v
string
,
enableKubeProxyDaemonSet
bool
)
error
{
// Perform the upgrade.
if
err
:=
nodeUpgradeGCE
(
v
,
""
,
enableKubeProxyDaemonSet
);
err
!=
nil
{
return
err
}
// Wait for it to complete and validate nodes are healthy.
Logf
(
"Waiting up to %v for all nodes to be ready after the upgrade"
,
RestartNodeReadyAgainTimeout
)
if
_
,
err
:=
CheckNodesReady
(
f
.
ClientSet
,
RestartNodeReadyAgainTimeout
,
TestContext
.
CloudConfig
.
NumNodes
);
err
!=
nil
{
return
err
}
return
nil
}
// TODO(mrhohn): Remove 'enableKubeProxyDaemonSet' when kube-proxy is run as a DaemonSet by default.
func
nodeUpgradeGCE
(
rawV
,
img
string
,
enableKubeProxyDaemonSet
bool
)
error
{
v
:=
"v"
+
rawV
env
:=
append
(
os
.
Environ
(),
fmt
.
Sprintf
(
"KUBE_PROXY_DAEMONSET=%v"
,
enableKubeProxyDaemonSet
))
if
img
!=
""
{
env
:=
append
(
os
.
Environ
()
,
"KUBE_NODE_OS_DISTRIBUTION="
+
img
)
env
=
append
(
env
,
"KUBE_NODE_OS_DISTRIBUTION="
+
img
)
_
,
_
,
err
:=
RunCmdEnv
(
env
,
gceUpgradeScript
(),
"-N"
,
"-o"
,
v
)
return
err
}
_
,
_
,
err
:=
RunCmd
(
gceUpgradeScript
(),
"-N"
,
v
)
_
,
_
,
err
:=
RunCmd
Env
(
env
,
gceUpgradeScript
(),
"-N"
,
v
)
return
err
}
...
...
test/e2e/lifecycle/cluster_upgrade.go
View file @
5dc0845e
...
...
@@ -216,6 +216,69 @@ var _ = Describe("[sig-apps] stateful Upgrade [Feature:StatefulUpgrade]", func()
})
})
var
_
=
SIGDescribe
(
"kube-proxy migration [Feature:KubeProxyDaemonSetMigration]"
,
func
()
{
f
:=
framework
.
NewDefaultFramework
(
"kube-proxy-ds-migration"
)
// Create the frameworks here because we can only create them
// in a "Describe".
testFrameworks
:=
createUpgradeFrameworks
(
upgradeTests
)
BeforeEach
(
func
()
{
framework
.
SkipUnlessProviderIs
(
"gce"
)
})
Describe
(
"Upgrade kube-proxy from static pods to a DaemonSet"
,
func
()
{
It
(
"should maintain a functioning cluster [Feature:KubeProxyDaemonSetUpgrade]"
,
func
()
{
upgCtx
,
err
:=
getUpgradeContext
(
f
.
ClientSet
.
Discovery
(),
framework
.
TestContext
.
UpgradeTarget
)
framework
.
ExpectNoError
(
err
)
testSuite
:=
&
junit
.
TestSuite
{
Name
:
"kube-proxy upgrade"
}
kubeProxyUpgradeTest
:=
&
junit
.
TestCase
{
Name
:
"kube-proxy-ds-upgrade"
,
Classname
:
"upgrade_tests"
,
}
testSuite
.
TestCases
=
append
(
testSuite
.
TestCases
,
kubeProxyUpgradeTest
)
upgradeFunc
:=
func
()
{
start
:=
time
.
Now
()
defer
finalizeUpgradeTest
(
start
,
kubeProxyUpgradeTest
)
target
:=
upgCtx
.
Versions
[
1
]
.
Version
.
String
()
framework
.
ExpectNoError
(
framework
.
MasterUpgradeGCEWithKubeProxyDaemonSet
(
target
,
true
))
framework
.
ExpectNoError
(
framework
.
CheckMasterVersion
(
f
.
ClientSet
,
target
))
framework
.
ExpectNoError
(
framework
.
NodeUpgradeGCEWithKubeProxyDaemonSet
(
f
,
target
,
true
))
framework
.
ExpectNoError
(
framework
.
CheckNodesVersions
(
f
.
ClientSet
,
target
))
}
runUpgradeSuite
(
f
,
upgradeTests
,
testFrameworks
,
testSuite
,
upgCtx
,
upgrades
.
ClusterUpgrade
,
upgradeFunc
)
})
})
Describe
(
"Downgrade kube-proxy from a DaemonSet to static pods"
,
func
()
{
It
(
"should maintain a functioning cluster [Feature:KubeProxyDaemonSetDowngrade]"
,
func
()
{
upgCtx
,
err
:=
getUpgradeContext
(
f
.
ClientSet
.
Discovery
(),
framework
.
TestContext
.
UpgradeTarget
)
framework
.
ExpectNoError
(
err
)
testSuite
:=
&
junit
.
TestSuite
{
Name
:
"kube-proxy downgrade"
}
kubeProxyDowngradeTest
:=
&
junit
.
TestCase
{
Name
:
"kube-proxy-ds-downgrade"
,
Classname
:
"upgrade_tests"
,
}
testSuite
.
TestCases
=
append
(
testSuite
.
TestCases
,
kubeProxyDowngradeTest
)
upgradeFunc
:=
func
()
{
start
:=
time
.
Now
()
defer
finalizeUpgradeTest
(
start
,
kubeProxyDowngradeTest
)
// Yes this really is a downgrade. And nodes must downgrade first.
target
:=
upgCtx
.
Versions
[
1
]
.
Version
.
String
()
framework
.
ExpectNoError
(
framework
.
NodeUpgradeGCEWithKubeProxyDaemonSet
(
f
,
target
,
false
))
framework
.
ExpectNoError
(
framework
.
CheckNodesVersions
(
f
.
ClientSet
,
target
))
framework
.
ExpectNoError
(
framework
.
MasterUpgradeGCEWithKubeProxyDaemonSet
(
target
,
false
))
framework
.
ExpectNoError
(
framework
.
CheckMasterVersion
(
f
.
ClientSet
,
target
))
}
runUpgradeSuite
(
f
,
upgradeTests
,
testFrameworks
,
testSuite
,
upgCtx
,
upgrades
.
ClusterUpgrade
,
upgradeFunc
)
})
})
})
type
chaosMonkeyAdapter
struct
{
test
upgrades
.
Test
testReport
*
junit
.
TestCase
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment