Skip to content

Commit 156952d

Browse files
authored
Prepare upgrade guide for 7.0 (terraform-google-modules#407)
BREAKING CHANGE: Minimum beta provider version increased to 3.1 to allow surge upgrades.
1 parent a99352a commit 156952d

File tree

6 files changed

+466
-4
lines changed

6 files changed

+466
-4
lines changed

autogen/main/versions.tf.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ terraform {
1919

2020
required_providers {
2121
{% if beta_cluster %}
22-
google-beta = ">= 2.18, <4.0.0"
22+
google-beta = ">= 3.1, <4.0.0"
2323
{% else %}
2424
google = ">= 2.18, <4.0.0"
2525
{% endif %}

docs/upgrading_to_v7.0.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Upgrading to v7.0
2+
3+
The v7.0 release of *kubernetes-engine* is a backwards incompatible
4+
release.
5+
6+
## Provider Version
7+
Support for Google provider versions older than v3.1 has been removed due to the introduction of Surge Upgrade features.
8+
9+
## Surge Upgrades (beta)
10+
In order to support [Surge Upgrades](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-upgrades#surge) on beta clusters, an `upgrade_settings` block has been added to all node pools. This will show up in `terraform plan`:
11+
12+
```
13+
+ upgrade_settings {
14+
+ max_surge = 1
15+
+ max_unavailable = 0
16+
}
17+
```
18+
19+
The new default behavior will upgrade 1 node at a time. You can tune this behaviour using the new `max_surge` and `max_unavailable` settings on the node pool input.
20+
21+
Note that changing upgrade settings can be done in-place (without forcing a node pool recreation).
22+
23+
### Node Pool for_each
24+
The `google_container_node_pool` resource has been updated to use `for_each` instead of `count`. This allows adding/removing node pools without causing a diff on unrelated node pools.
25+
26+
Updating to this new format requires running a state migration. Note that this migration **must** be run with **Terraform v0.12.20**. You can use a [script](../helpers/migrate7.py) we provided to automatically make the required state migration.
27+
28+
1. Download the script
29+
30+
```sh
31+
curl -O https://raw.githubusercontent.com/terraform-google-modules/terraform-google-kubernetes-engine/v7.0.0/helpers/migrate7.py
32+
chmod +x migrate7.py
33+
```
34+
35+
2. Run the script in dryrun mode to confirm the expected changes:
36+
37+
```sh
38+
$ ./migrate7.py --dryrun
39+
40+
---- Migrating the following modules:
41+
-- module.gke-cluster-dev.module.gke
42+
---- Commands to run:
43+
terraform state mv -state terraform.tfstate "module.gke-cluster-dev.module.gke.google_container_cluster.zonal_primary[0]" "module.gke-cluster-dev.module.gke.google_container_cluster.primary[0]"
44+
terraform state mv "module.gke-cluster-dev.module.gke.google_container_node_pool.zonal_pools[0]" "module.gke-cluster-dev.module.gke.google_container_node_pool.pools[0]"
45+
```
46+
47+
3. Execute the migration script
48+
49+
```sh
50+
$ ./migrate7.py
51+
52+
---- Migrating the following modules:
53+
-- module.gke-cluster-dev.module.gke
54+
---- Commands to run:
55+
Move "module.gke-cluster-dev.module.gke.google_container_cluster.zonal_primary[0]" to "module.gke-cluster-dev.module.gke.google_container_cluster.primary[0]"
56+
Successfully moved 1 object(s).
57+
Move "module.gke-cluster-dev.module.gke.google_container_node_pool.zonal_pools[0]" to "module.gke-cluster-dev.module.gke.google_container_node_pool.pools[0]"
58+
Successfully moved 1 object(s).
59+
Move "module.gke-cluster-dev.module.gke.null_resource.wait_for_zonal_cluster" to "module.gke-cluster-dev.module.gke.null_resource.wait_for_cluster"
60+
Successfully moved 1 object(s).
61+
```
62+
63+
4. Run `terraform plan` to confirm no changes are expected.

0 commit comments

Comments
 (0)