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
ea43db80
Commit
ea43db80
authored
Mar 04, 2016
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #22481 from ihmccreery/better-upgrade-tests
Auto commit by PR queue bot
parents
e91048ea
0e9114f6
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
45 deletions
+38
-45
kubernetes-upgrades.yaml
...s/job-configs/kubernetes-jenkins/kubernetes-upgrades.yaml
+2
-2
cluster_upgrade.go
test/e2e/cluster_upgrade.go
+36
-43
No files found.
hack/jenkins/job-configs/kubernetes-jenkins/kubernetes-upgrades.yaml
View file @
ea43db80
...
@@ -152,7 +152,7 @@
...
@@ -152,7 +152,7 @@
export E2E_OPT="--check_version_skew=false"
export E2E_OPT="--check_version_skew=false"
export E2E_UP="false"
export E2E_UP="false"
export E2E_DOWN="false"
export E2E_DOWN="false"
export GINKGO_TEST_ARGS="--ginkgo.focus=\[Feature:
Upgrade\].*upgrade-master
"
export GINKGO_TEST_ARGS="--ginkgo.focus=\[Feature:
MasterUpgrade\]
"
-
'
kubernetes-upgrade-{provider}-{version-old}-{version-new}-{step}'
:
-
'
kubernetes-upgrade-{provider}-{version-old}-{version-new}-{step}'
:
step
:
'
step4-e2e-old'
step
:
'
step4-e2e-old'
runner
:
'
{runner-old}'
runner
:
'
{runner-old}'
...
@@ -169,7 +169,7 @@
...
@@ -169,7 +169,7 @@
export E2E_OPT="--check_version_skew=false"
export E2E_OPT="--check_version_skew=false"
export E2E_UP="false"
export E2E_UP="false"
export E2E_DOWN="false"
export E2E_DOWN="false"
export GINKGO_TEST_ARGS="--ginkgo.focus=\[Feature:
Upgrade\].*upgrade-cluster
"
export GINKGO_TEST_ARGS="--ginkgo.focus=\[Feature:
NodeUpgrade\]
"
-
'
kubernetes-upgrade-{provider}-{version-old}-{version-new}-{step}'
:
-
'
kubernetes-upgrade-{provider}-{version-old}-{version-new}-{step}'
:
step
:
'
step6-e2e-old'
step
:
'
step6-e2e-old'
runner
:
'
{runner-old}'
runner
:
'
{runner-old}'
...
...
test/e2e/cluster_upgrade.go
View file @
ea43db80
...
@@ -36,11 +36,6 @@ import (
...
@@ -36,11 +36,6 @@ import (
.
"github.com/onsi/gomega"
.
"github.com/onsi/gomega"
)
)
const
(
// version applies to upgrades; kube-push always pushes local binaries.
versionURLFmt
=
"https://storage.googleapis.com/kubernetes-release/%s/%s.txt"
)
// realVersion turns a version constant s into a version string deployable on
// realVersion turns a version constant s into a version string deployable on
// GKE. See hack/get-build.sh for more information.
// GKE. See hack/get-build.sh for more information.
func
realVersion
(
s
string
)
(
string
,
error
)
{
func
realVersion
(
s
string
)
(
string
,
error
)
{
...
@@ -84,12 +79,6 @@ func masterUpgradeGKE(v string) error {
...
@@ -84,12 +79,6 @@ func masterUpgradeGKE(v string) error {
return
err
return
err
}
}
var
masterPush
=
func
(
_
string
)
error
{
// TODO(mikedanese): Make master push use the provided version.
_
,
_
,
err
:=
runCmd
(
path
.
Join
(
testContext
.
RepoRoot
,
"hack/e2e-internal/e2e-push.sh"
),
"-m"
)
return
err
}
var
nodeUpgrade
=
func
(
f
*
Framework
,
replicas
int
,
v
string
)
error
{
var
nodeUpgrade
=
func
(
f
*
Framework
,
replicas
int
,
v
string
)
error
{
// Perform the upgrade.
// Perform the upgrade.
var
err
error
var
err
error
...
@@ -106,6 +95,9 @@ var nodeUpgrade = func(f *Framework, replicas int, v string) error {
...
@@ -106,6 +95,9 @@ var nodeUpgrade = func(f *Framework, replicas int, v string) error {
}
}
// Wait for it to complete and validate nodes and pods are healthy.
// Wait for it to complete and validate nodes and pods are healthy.
//
// TODO(ihmccreery) We shouldn't have to wait for nodes to be ready in
// GKE; the operation shouldn't return until they all are.
Logf
(
"Waiting up to %v for all nodes to be ready after the upgrade"
,
restartNodeReadyAgainTimeout
)
Logf
(
"Waiting up to %v for all nodes to be ready after the upgrade"
,
restartNodeReadyAgainTimeout
)
if
_
,
err
:=
checkNodesReady
(
f
.
Client
,
restartNodeReadyAgainTimeout
,
testContext
.
CloudConfig
.
NumNodes
);
err
!=
nil
{
if
_
,
err
:=
checkNodesReady
(
f
.
Client
,
restartNodeReadyAgainTimeout
,
testContext
.
CloudConfig
.
NumNodes
);
err
!=
nil
{
return
err
return
err
...
@@ -115,8 +107,10 @@ var nodeUpgrade = func(f *Framework, replicas int, v string) error {
...
@@ -115,8 +107,10 @@ var nodeUpgrade = func(f *Framework, replicas int, v string) error {
}
}
func
nodeUpgradeGCE
(
rawV
string
)
error
{
func
nodeUpgradeGCE
(
rawV
string
)
error
{
// TODO(ihmccreery) This code path should be identical to how a user
// would trigger a node update; right now it's very different.
v
:=
"v"
+
rawV
v
:=
"v"
+
rawV
Logf
(
"Preparing node upg
ar
de by creating new instance template for %q"
,
v
)
Logf
(
"Preparing node upg
ra
de by creating new instance template for %q"
,
v
)
stdout
,
_
,
err
:=
runCmd
(
path
.
Join
(
testContext
.
RepoRoot
,
"hack/e2e-internal/e2e-upgrade.sh"
),
"-P"
,
v
)
stdout
,
_
,
err
:=
runCmd
(
path
.
Join
(
testContext
.
RepoRoot
,
"hack/e2e-internal/e2e-upgrade.sh"
),
"-P"
,
v
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
@@ -191,27 +185,17 @@ var _ = Describe("Upgrade [Feature:Upgrade]", func() {
...
@@ -191,27 +185,17 @@ var _ = Describe("Upgrade [Feature:Upgrade]", func() {
// - volumes
// - volumes
// - persistent volumes
// - persistent volumes
})
})
AfterEach
(
func
()
{
AfterEach
(
func
()
{
w
.
Cleanup
()
w
.
Cleanup
()
})
})
Describe
(
"
kube-push
"
,
func
()
{
Describe
(
"
master upgrade
"
,
func
()
{
It
(
"
of master should maintain responsive services
"
,
func
()
{
It
(
"
should maintain responsive services [Feature:MasterUpgrade]
"
,
func
()
{
By
(
"Validating cluster before master upgrade"
)
By
(
"Validating cluster before master upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
By
(
"Performing a master upgrade"
)
By
(
"Performing a master upgrade"
)
testMasterUpgrade
(
ip
,
v
,
masterPush
)
testUpgrade
(
ip
,
v
,
masterUpgrade
)
By
(
"Validating cluster after master upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
})
})
Describe
(
"upgrade-master"
,
func
()
{
It
(
"should maintain responsive services"
,
func
()
{
By
(
"Validating cluster before master upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
By
(
"Performing a master upgrade"
)
testMasterUpgrade
(
ip
,
v
,
masterUpgrade
)
By
(
"Checking master version"
)
By
(
"Checking master version"
)
expectNoError
(
checkMasterVersion
(
f
.
Client
,
v
))
expectNoError
(
checkMasterVersion
(
f
.
Client
,
v
))
By
(
"Validating cluster after master upgrade"
)
By
(
"Validating cluster after master upgrade"
)
...
@@ -219,7 +203,7 @@ var _ = Describe("Upgrade [Feature:Upgrade]", func() {
...
@@ -219,7 +203,7 @@ var _ = Describe("Upgrade [Feature:Upgrade]", func() {
})
})
})
})
Describe
(
"
upgrade-cluster
"
,
func
()
{
Describe
(
"
node upgrade
"
,
func
()
{
var
tmplBefore
,
tmplAfter
string
var
tmplBefore
,
tmplAfter
string
BeforeEach
(
func
()
{
BeforeEach
(
func
()
{
if
providerIs
(
"gce"
)
{
if
providerIs
(
"gce"
)
{
...
@@ -256,18 +240,36 @@ var _ = Describe("Upgrade [Feature:Upgrade]", func() {
...
@@ -256,18 +240,36 @@ var _ = Describe("Upgrade [Feature:Upgrade]", func() {
}
}
})
})
It
(
"should maintain a functioning cluster"
,
func
()
{
It
(
"should maintain a functioning cluster
[Feature:NodeUpgrade]
"
,
func
()
{
By
(
"Validating cluster before node upgrade"
)
By
(
"Validating cluster before node upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
By
(
"Performing a node upgrade"
)
By
(
"Performing a node upgrade"
)
testNodeUpgrade
(
f
,
nodeUpgrade
,
replicas
,
v
)
// Circumnavigate testUpgrade, since services don't necessarily stay up.
Logf
(
"Starting upgrade"
)
expectNoError
(
nodeUpgrade
(
f
,
replicas
,
v
))
Logf
(
"Upgrade complete"
)
By
(
"Checking node versions"
)
expectNoError
(
checkNodesVersions
(
f
.
Client
,
v
))
By
(
"Validating cluster after node upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
})
It
(
"should maintain responsive services [Feature:ExperimentalNodeUpgrade]"
,
func
()
{
By
(
"Validating cluster before node upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
By
(
"Performing a node upgrade"
)
testUpgrade
(
ip
,
v
,
func
(
v
string
)
error
{
return
nodeUpgrade
(
f
,
replicas
,
v
)
})
By
(
"Checking node versions"
)
expectNoError
(
checkNodesVersions
(
f
.
Client
,
v
))
By
(
"Validating cluster after node upgrade"
)
By
(
"Validating cluster after node upgrade"
)
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
expectNoError
(
validate
(
f
,
svcName
,
rcName
,
ingress
,
replicas
))
})
})
})
})
})
})
func
test
MasterUpgrade
(
ip
,
v
string
,
mUp
func
(
v
string
)
error
)
{
func
test
Upgrade
(
ip
,
v
string
,
upF
func
(
v
string
)
error
)
{
Logf
(
"Starting async validation"
)
Logf
(
"Starting async validation"
)
httpClient
:=
http
.
Client
{
Timeout
:
2
*
time
.
Second
}
httpClient
:=
http
.
Client
{
Timeout
:
2
*
time
.
Second
}
done
:=
make
(
chan
struct
{},
1
)
done
:=
make
(
chan
struct
{},
1
)
...
@@ -294,18 +296,18 @@ func testMasterUpgrade(ip, v string, mUp func(v string) error) {
...
@@ -294,18 +296,18 @@ func testMasterUpgrade(ip, v string, mUp func(v string) error) {
// because this validation runs in another goroutine. Without this,
// because this validation runs in another goroutine. Without this,
// a failure is very confusing to track down because from the logs
// a failure is very confusing to track down because from the logs
// everything looks fine.
// everything looks fine.
msg
:=
fmt
.
Sprintf
(
"Failed to contact service during
master
upgrade: %v"
,
err
)
msg
:=
fmt
.
Sprintf
(
"Failed to contact service during upgrade: %v"
,
err
)
Logf
(
msg
)
Logf
(
msg
)
Failf
(
msg
)
Failf
(
msg
)
}
}
},
200
*
time
.
Millisecond
,
done
)
},
200
*
time
.
Millisecond
,
done
)
Logf
(
"Starting
master
upgrade"
)
Logf
(
"Starting upgrade"
)
expectNoError
(
mUp
(
v
))
expectNoError
(
upF
(
v
))
done
<-
struct
{}{}
done
<-
struct
{}{}
Logf
(
"Stopping async validation"
)
Logf
(
"Stopping async validation"
)
wg
.
Wait
()
wg
.
Wait
()
Logf
(
"
Master u
pgrade complete"
)
Logf
(
"
U
pgrade complete"
)
}
}
func
checkMasterVersion
(
c
*
client
.
Client
,
want
string
)
error
{
func
checkMasterVersion
(
c
*
client
.
Client
,
want
string
)
error
{
...
@@ -325,15 +327,6 @@ func checkMasterVersion(c *client.Client, want string) error {
...
@@ -325,15 +327,6 @@ func checkMasterVersion(c *client.Client, want string) error {
return
nil
return
nil
}
}
func
testNodeUpgrade
(
f
*
Framework
,
nUp
func
(
f
*
Framework
,
n
int
,
v
string
)
error
,
replicas
int
,
v
string
)
{
Logf
(
"Starting node upgrade"
)
expectNoError
(
nUp
(
f
,
replicas
,
v
))
Logf
(
"Node upgrade complete"
)
By
(
"Checking node versions"
)
expectNoError
(
checkNodesVersions
(
f
.
Client
,
v
))
Logf
(
"All nodes are at version %s"
,
v
)
}
func
checkNodesVersions
(
c
*
client
.
Client
,
want
string
)
error
{
func
checkNodesVersions
(
c
*
client
.
Client
,
want
string
)
error
{
l
:=
ListSchedulableNodesOrDie
(
c
)
l
:=
ListSchedulableNodesOrDie
(
c
)
for
_
,
n
:=
range
l
.
Items
{
for
_
,
n
:=
range
l
.
Items
{
...
...
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