Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test driver config #143

Merged
merged 24 commits into from
Feb 11, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
53888ae
Improve README by adding an explicit Kubernetes dependency section
msau42 Dec 4, 2019
9ace020
Merge pull request #52 from msau42/update-readme
k8s-ci-robot Dec 6, 2019
b98b2ae
Enable snapshot tests in 1.17 to be run in non-alpha jobs.
msau42 Dec 17, 2019
9f1f3dd
Merge pull request #56 from msau42/enable-snapshots
k8s-ci-robot Dec 18, 2019
fc80975
Fix version_gt to work with kubernetes prefix
ggriffiths Dec 21, 2019
f6c74b3
Merge pull request #57 from ggriffiths/version_gt_kubernetes_fix
k8s-ci-robot Dec 23, 2019
af9549b
Update prow hostpath driver version to 1.3.0-rc2
saad-ali Jan 2, 2020
5f444b8
Merge pull request #60 from saad-ali/updateHostpathVersion
k8s-ci-robot Jan 2, 2020
8b0316c
Fix overriding of junit results by using unique names for each e2e run
msau42 Jan 2, 2020
3c463fb
Merge pull request #61 from msau42/enable-snapshots
k8s-ci-robot Jan 2, 2020
8191eab
Update snapshotter to version v2.0.0
ggriffiths Jan 8, 2020
4cc9174
Merge pull request #64 from ggriffiths/snapshotter_2_version_update
k8s-ci-robot Jan 8, 2020
6582f2f
Update hostpath driver version to get fix for connection-timeout
msau42 Jan 10, 2020
23be652
Merge pull request #65 from msau42/update-hostpath
k8s-ci-robot Jan 10, 2020
ac8a021
Document the process for releasing a new sidecar
msau42 Dec 12, 2019
ff3cc3f
Merge pull request #54 from msau42/add-release-process
k8s-ci-robot Jan 13, 2020
fa90abd
fix incorrect link
windayski Jan 19, 2020
3c34b4f
Merge pull request #67 from windayski/fix-link
k8s-ci-robot Jan 24, 2020
84f78b1
prow.sh: generic driver installation
pohly Feb 10, 2020
5f74333
prow.sh: also configure feature gates for kubelet
pohly Feb 10, 2020
a1432bc
Merge pull request #70 from pohly/kubelet-feature-gates
k8s-ci-robot Feb 10, 2020
d717c8c
Merge pull request #69 from pohly/test-driver-config
k8s-ci-robot Feb 10, 2020
66005a9
release-tools: update to d717c8c48ad813703f8f1b0efe8e7d62fa465a6a
pohly Feb 11, 2020
9abf63f
deploy: move test driver definition into driver repo
pohly Feb 10, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions deploy/kubernetes-1.15/deploy.sh
16 changes: 16 additions & 0 deletions deploy/kubernetes-1.15/test-driver.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# This file describes how to test this deployment of the CSI hostpath driver
# using the Kubernetes 1.15 E2E test suite. For details see:
# https://github.com/kubernetes/kubernetes/tree/v1.15.0/test/e2e/storage/external

StorageClass:
FromName: true
SnapshotClass:
FromName: true
DriverInfo:
Name: hostpath.csi.k8s.io
Capabilities:
block: true
exec: true
dataSource: true
multipods: true
persistence: true
1 change: 1 addition & 0 deletions deploy/kubernetes-1.16/deploy.sh
18 changes: 18 additions & 0 deletions deploy/kubernetes-1.16/test-driver.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# This file describes how to test this deployment of the CSI hostpath driver
# using the Kubernetes 1.16 E2E test suite. For details see:
# https://github.com/kubernetes/kubernetes/tree/v1.16.0/test/e2e/storage/external

StorageClass:
FromName: true
SnapshotClass:
FromName: true
DriverInfo:
Name: hostpath.csi.k8s.io
Capabilities:
block: true
controllerExpansion: true
exec: true
multipods: true
nodeExpansion: true
persistence: true
snapshotDataSource: true
1 change: 1 addition & 0 deletions deploy/kubernetes-1.17/deploy.sh
20 changes: 20 additions & 0 deletions deploy/kubernetes-1.17/test-driver.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# This file describes how to test this deployment of the CSI hostpath driver
# using the Kubernetes 1.17 E2E test suite. For details see:
# https://github.com/kubernetes/kubernetes/tree/v1.17.0/test/e2e/storage/external

StorageClass:
FromName: true
SnapshotClass:
FromName: true
DriverInfo:
Name: hostpath.csi.k8s.io
Capabilities:
block: true
controllerExpansion: true
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gnufied were resizing tests added in 1.16 or 1.17?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to git diff v1.15.0..v1.16.0 test/e2e/storage/testsuites/testdriver.go, controllerExpansion was added in 1.16:

@@ -126,7 +152,10 @@ const (
        // - NodeStageVolume in the spec
        CapMultiPODs Capability = "multipods"
 
-       CapRWX Capability = "RWX" // support ReadWriteMany access modes
+       CapRWX                 Capability = "RWX"                 // support ReadWriteMany access modes
+       CapControllerExpansion Capability = "controllerExpansion" // support volume expansion for controller
+       CapNodeExpansion       Capability = "nodeExpansion"       // support volume expansion for node
+       CapVolumeLimits                   = "volumeLimits"        // support volume limits (can be *very* slow)
 )

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shall we enable the tests in 1.16 too then?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's missing for them in 1.16?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see the capabilities enabled in the 1.16 config

Copy link
Contributor Author

@pohly pohly Feb 10, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, right. I thought that the change above was for 1.16, but it's 1.17. Let me add it for 1.16 then, too.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revised test-driver.yaml files:

$ diff deploy/kubernetes-1.15/test-driver.yaml deploy/kubernetes-1.16/test-driver.yaml
2,3c2,3
< # using the Kubernetes 1.15 E2E test suite. For details see:
< # https://github.com/kubernetes/kubernetes/tree/v1.15.0/test/e2e/storage/external
---
> # using the Kubernetes 1.16 E2E test suite. For details see:
> # https://github.com/kubernetes/kubernetes/tree/v1.16.0/test/e2e/storage/external
12a13
>     controllerExpansion: true
14d14
<     dataSource: true
15a16
>     nodeExpansion: true
16a18
>     snapshotDataSource: true

$ diff deploy/kubernetes-1.16/test-driver.yaml deploy/kubernetes-1.17/test-driver.yaml
2,3c2,3
< # using the Kubernetes 1.16 E2E test suite. For details see:
< # https://github.com/kubernetes/kubernetes/tree/v1.16.0/test/e2e/storage/external
---
> # using the Kubernetes 1.17 E2E test suite. For details see:
> # https://github.com/kubernetes/kubernetes/tree/v1.17.0/test/e2e/storage/external
17a18
>     singleNodeVolume: true
18a20
>     topology: true

exec: true
multipods: true
nodeExpansion: true
persistence: true
singleNodeVolume: true
snapshotDataSource: true
topology: true
6 changes: 6 additions & 0 deletions deploy/util/deploy-hostpath.sh
Original file line number Diff line number Diff line change
Expand Up @@ -225,3 +225,9 @@ driver_version="$(basename "${BASE_DIR}")"
if version_gt "$driver_version" "1.16"; then
kubectl apply -f "https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/${snapshotter_version}/examples/kubernetes/snapshotclass.yaml"
fi

# Create a test driver configuration in the place where the prow job
# expects it?
if [ "${CSI_PROW_TEST_DRIVER}" ]; then
cp "${BASE_DIR}/test-driver.yaml" "${CSI_PROW_TEST_DRIVER}"
fi
28 changes: 16 additions & 12 deletions release-tools/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ on what is enabled in Prow, see
https://github.com/kubernetes/test-infra/tree/master/config/jobs/kubernetes-csi

Test results for periodic jobs are visible in
https://testgrid.k8s.io/sig-storage-csi
https://testgrid.k8s.io/sig-storage-csi-ci

It is possible to reproduce the Prow testing locally on a suitable machine:
- Linux host
Expand Down Expand Up @@ -141,17 +141,6 @@ The `vendor` directory is optional. It is still present in projects
because it avoids downloading sources during CI builds. If this is no
longer deemed necessary, then a project can also remove the directory.

When using packages that are part of the Kubernetes source code, the
commands above are not enough because the [lack of semantic
versioning](https://github.com/kubernetes/kubernetes/issues/72638)
prevents `go mod` from finding newer releases. Importing directly from
`kubernetes/kubernetes` also needs `replace` statements to override
the fake `v0.0.0` versions
(https://github.com/kubernetes/kubernetes/issues/79384). The
`go-get-kubernetes.sh` script can be used to update all packages in
lockstep to a different Kubernetes version. It takes a single version
number like "1.16.0".

Conversion of a repository that uses `dep` to `go mod` can be done with:

GO111MODULE=on go mod init
Expand All @@ -160,3 +149,18 @@ Conversion of a repository that uses `dep` to `go mod` can be done with:
GO111MODULE=on go mod vendor
git rm -f Gopkg.toml Gopkg.lock
git add go.mod go.sum vendor

### Updating Kubernetes dependencies

When using packages that are part of the Kubernetes source code, the
commands above are not enough because the [lack of semantic
versioning](https://github.com/kubernetes/kubernetes/issues/72638)
prevents `go mod` from finding newer releases. Importing directly from
`kubernetes/kubernetes` also needs `replace` statements to override
the fake `v0.0.0` versions
(https://github.com/kubernetes/kubernetes/issues/79384). The
`go-get-kubernetes.sh` script can be used to update all packages in
lockstep to a different Kubernetes version. Example usage:
```
$ ./release-tools/go-get-kubernetes.sh 1.16.4
```
90 changes: 90 additions & 0 deletions release-tools/SIDECAR_RELEASE_PROCESS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# Sidecar Release Process

This page describes the process for releasing a kubernetes-csi sidecar.

## Prerequisites

The release manager must:

* Be a member of the kubernetes-csi organization. Open an
[issue](https://github.com/kubernetes/org/issues/new?assignees=&labels=area%2Fgithub-membership&template=membership.md&title=REQUEST%3A+New+membership+for+%3Cyour-GH-handle%3E) in
kubernetes/org to request membership
* Be a top level approver for the repository. To become a top level approver,
the candidate must demonstrate ownership and deep knowledge of the repository
through active maintainence, responding to and fixing issues, reviewing PRs,
test triage.
* Be part of the maintainers or admin group for the repository. admin is a
superset of maintainers, only maintainers level is required for cutting a
release. Membership can be requested by submitting a PR to kubernetes/org.
[Example](https://github.com/kubernetes/org/pull/1467)

## Updating CI Jobs
Whenever a new Kubernetes minor version is released, our kubernetes-csi CI jobs
must be updated.

[Our CI jobs](https://k8s-testgrid.appspot.com/sig-storage-csi-ci) have the
naming convention `<hostpath-deployment-version>-on-<kubernetes-version>`.

1. Jobs should be actively monitored to find and fix failures in sidecars and
infrastructure changes early in the development cycle. Test failures are sent
to kubernetes-sig-storage-test-failures@googlegroups.com.
1. "-on-master" jobs are the closest reflection to the new Kubernetes version.
1. Fixes to our prow.sh CI script can be tested in the [CSI hostpath
repo](https://github.com/kubernetes-csi/csi-driver-host-path) by modifying
[prow.sh](https://github.com/kubernetes-csi/csi-driver-host-path/blob/master/release-tools/prow.sh)
along with any overrides in
[.prow.sh](https://github.com/kubernetes-csi/csi-driver-host-path/blob/master/.prow.sh)
to mirror the failing environment. Once e2e tests are passing (verify-unit tests
will fail), then the prow.sh changes can be submitted to [csi-release-tools](https://github.com/kubernetes-csi/csi-release-tools).
1. Changes can then be updated in all the sidecar repos and hostpath driver repo
by following the [update
instructions](https://github.com/kubernetes-csi/csi-release-tools/blob/master/README.md#sharing-and-updating).
1. New pull and CI jobs are configured by
[gen-jobs.sh](https://github.com/kubernetes/test-infra/blob/master/config/jobs/kubernetes-csi/gen-jobs.sh).
New pull jobs that have been unverified should be initially made optional.
[Example](https://github.com/kubernetes/test-infra/pull/15055)
1. Once new pull and CI jobs have been verified, and the new Kubernetes version
is released, we can make the optional jobs required, and also remove the
Kubernetes versions that are no longer supported.

## Release Process
1. Identify all issues and ongoing PRs that should go into the release, and
drive them to resolution.
1. Download [K8s release notes
generator](https://github.com/kubernetes/release/tree/master/cmd/release-notes)
1. Generate release notes for the release. Replace arguments with the relevant
information.
```
GITHUB_TOKEN=<token> ./release-notes --start-sha=0ed6978fd199e3ca10326b82b4b8b8e916211c9b --end-sha=3cb3d2f18ed8cb40371c6d8886edcabd1f27e7b9 \
--github-org=kubernetes-csi --github-repo=external-attacher -branch=master -output out.md
```
* `--start-sha` should point to the last release from the same branch. For
example:
* `1.X-1.0` tag when releasing `1.X.0`
* `1.X.Y-1` tag when releasing `1.X.Y`
1. Compare the generated output to the new commits for the release to check if
any notable change missed a release note.
1. Reword release notes as needed. Make sure to check notes for breaking
changes and deprecations.
1. If release is a new major/minor version, create a new `CHANGELOG-<major>.<minor>.md`
file. Otherwise, add the release notes to the top of the existing CHANGELOG
file for that minor version.
1. Submit a PR for the CHANGELOG changes.
1. Submit a PR for README changes, in particular, Compatibility, Feature status,
and any other sections that may need updating.
1. Check that all [canary CI
jobs](https://k8s-testgrid.appspot.com/sig-storage-csi-ci) are passing,
and that test coverage is adequate for the changes that are going into the release.
1. Make sure that no new PRs have merged in the meantime, and no PRs are in
flight and soon to be merged.
1. Create a new release following a previous release as a template. Be sure to select the correct
branch. This requires Github release permissions as required by the prerequisites.
[external-provisioner example](https://github.com/kubernetes-csi/external-provisioner/releases/new)
1. If release was a new major/minor version, create a new `release-<minor>`
branch at that commit.
1. Update [kubernetes-csi/docs](https://github.com/kubernetes-csi/docs) sidecar
and feature pages with the new released version.
1. After all the sidecars have been released, update
CSI hostpath driver with the new sidecars in the [CSI repo](https://github.com/kubernetes-csi/csi-driver-host-path/tree/master/deploy)
and [k/k
in-tree](https://github.com/kubernetes/kubernetes/tree/master/test/e2e/testing-manifests/storage-csi/hostpath/hostpath)
Loading