Files
external-snapshotter/release-tools/SIDECAR_RELEASE_PROCESS.md
Patrick Ohly a7d5780f85 release-tools: update
Commit summary:
7c5a89c8 prow.sh: use 1.3.0 hostpath driver for testing
fdb32183 Change 'make test-vet' to call 'go vet'
5f74333a prow.sh: also configure feature gates for kubelet
84f78b12 prow.sh: generic driver installation
fa90abd0 fix incorrect link
ac8a0212 Document the process for releasing a new sidecar
6582f2ff Update hostpath driver version to get fix for connection-timeout
8191eab6 Update snapshotter to version v2.0.0
8b0316c7 Fix overriding of junit results by using unique names for each e2e run
af9549b5 Update prow hostpath driver version to 1.3.0-rc2
fc809759 Fix version_gt to work with kubernetes prefix
b98b2aed Enable snapshot tests in 1.17 to be run in non-alpha jobs.
a4e62996 fix syntax for ppc64le build
4ad69492 Improve snapshot pod running checks and improve version_gt
53888ae7 Improve README by adding an explicit Kubernetes dependency section
9a7a685e Create a kind cluster with two worker nodes so that the topology feature can be tested. Test cases that test accessing volumes from multiple nodes need to be skipped
80bba1fe Use kind v0.6.0
003c14b2 Add snapshotter CRDs after cluster setup
83a4ef15 Adding build for ppc64le
2020-02-14 17:10:33 +01:00

5.2 KiB

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 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

Updating CI Jobs

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

Our CI jobs 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.
  2. "-on-master" jobs are the closest reflection to the new Kubernetes version.
  3. Fixes to our prow.sh CI script can be tested in the CSI hostpath repo by modifying prow.sh along with any overrides in .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.
  4. Changes can then be updated in all the sidecar repos and hostpath driver repo by following the update instructions.
  5. New pull and CI jobs are configured by gen-jobs.sh. New pull jobs that have been unverified should be initially made optional. Example
  6. 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.
  2. Download K8s release notes generator
  3. 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
  4. Compare the generated output to the new commits for the release to check if any notable change missed a release note.
  5. Reword release notes as needed. Make sure to check notes for breaking changes and deprecations.
  6. 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.
  7. Submit a PR for the CHANGELOG changes.
  8. Submit a PR for README changes, in particular, Compatibility, Feature status, and any other sections that may need updating.
  9. Check that all canary CI jobs are passing, and that test coverage is adequate for the changes that are going into the release.
  10. Make sure that no new PRs have merged in the meantime, and no PRs are in flight and soon to be merged.
  11. 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
  12. If release was a new major/minor version, create a new release-<minor> branch at that commit.
  13. Update kubernetes-csi/docs sidecar and feature pages with the new released version.
  14. After all the sidecars have been released, update CSI hostpath driver with the new sidecars in the CSI repo and k/k in-tree