Add option to set number of max unavailable pods

Applying an update to a chart release involving a pod restart, did not
work, if the number of replica was lower than 4, since the Kubernetes
default for max unavailable pods was used, which is 25 %.

This change adds options to the gerrit-master and gerrit-slave charts to
set the maxSurge and maxUnavailable options for the installed
deployments.

Change-Id: If1e80429b82ef8b205951bb629402d8929434114
diff --git a/helm-charts/gerrit-master/README.md b/helm-charts/gerrit-master/README.md
index e32e209..dc62a6d 100644
--- a/helm-charts/gerrit-master/README.md
+++ b/helm-charts/gerrit-master/README.md
@@ -140,6 +140,9 @@
 |-----------------------------------------------|-------------------------------------------------------------------------------------------------|-----------------------------------|
 | `gerritMaster.images.gerritInit`              | Image name of the Gerrit init container image                                                   | `k8s-gerrit/gerrit-init`          |
 | `gerritMaster.images.gerritMaster`            | Image name of the Gerrit master container image                                                 | `k8s-gerrit/gerrit-master`        |
+| `gerritMaster.replicas`                       | Number of replica pods to deploy                                                                | `1`                               |
+| `gerritMaster.maxSurge`                       | Max. percentage or number of pods allowed to be scheduled above the desired number              | `25%`                             |
+| `gerritMaster.maxUnavailable`                 | Max. percentage or number of pods allowed to be unavailable at a time                           | `100%`                            |
 | `gerritMaster.resources`                      | Configure the amount of resources the pod requests/is allowed                                   | `requests.cpu: 1`                 |
 |                                               |                                                                                                 | `requests.memory: 5Gi`            |
 |                                               |                                                                                                 | `limits.cpu: 1`                   |
diff --git a/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml b/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml
index 61c3193..b3120ea 100644
--- a/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml
+++ b/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml
@@ -9,6 +9,10 @@
     release: {{ .Release.Name }}
 spec:
   replicas: {{ .Values.gerritMaster.replicas | default 1 }}
+  strategy:
+    rollingUpdate:
+      maxSurge: {{ .Values.gerritMaster.maxSurge }}
+      maxUnavailable: {{ .Values.gerritMaster.maxUnavailable }}
   selector:
     matchLabels:
       app: gerrit-master
diff --git a/helm-charts/gerrit-master/values.yaml b/helm-charts/gerrit-master/values.yaml
index 8656eff..4808cfa 100644
--- a/helm-charts/gerrit-master/values.yaml
+++ b/helm-charts/gerrit-master/values.yaml
@@ -70,6 +70,12 @@
     gerritInit: k8sgerrit/gerrit-init
     gerritMaster: k8sgerrit/gerrit-master
 
+  replicas: 1
+  maxSurge: 25%
+  # For just one replica, 100 % unavailability has to be allowed for updates to
+  # work.
+  maxUnavailable: 100%
+
   # The memory limit has to be higher than the configures heap-size for Java!
   resources:
     requests:
diff --git a/helm-charts/gerrit-slave/README.md b/helm-charts/gerrit-slave/README.md
index 72e0cdb..3abf951 100644
--- a/helm-charts/gerrit-slave/README.md
+++ b/helm-charts/gerrit-slave/README.md
@@ -116,30 +116,32 @@
 
 ### Apache-Git-HTTP-Backend (Git-Backend)
 
-| Parameter                                | Description                                                                 | Default                                                                   |
-|------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------|
-| `gitBackend.image`                       | Image name of the Apache-git-http-backend container image                   | `k8s-gerrit/apache-git-http-backend`                                      |
-| `gitBackend.replicas`                    | Number of pod replicas to deploy                                            | `1`                                                                       |
-| `gitBackend.resources`                   | Configure the amount of resources the pod requests/is allowed               | `requests.cpu: 100m`                                                      |
-|                                          |                                                                             | `requests.memory: 256Mi`                                                  |
-|                                          |                                                                             | `limits.cpu: 100m`                                                        |
-|                                          |                                                                             | `limits.memory: 256Mi`                                                    |
-| `gitBackend.credentials.htpasswd`        | `.htpasswd`-file containing username/password-credentials for accessing git | `git:$apr1$O/LbLKC7$Q60GWE7OcqSEMSfe/K8xU.` (user: git, password: secret) |
-| `gitBackend.logging.persistence.enabled` | Whether to persist logs                                                     | `true`                                                                    |
-| `gitBackend.logging.persistence.size`    | Storage size for persisted logs                                             | `1Gi`                                                                     |
-| `gitBackend.service.type`                | Which kind of Service to deploy                                             | `LoadBalancer`                                                            |
-| `gitBackend.service.http.enabled`        | Whether to serve HTTP-requests (needed for Ingress)                         | `true`                                                                    |
-| `gitBackend.service.http.port`           | Port over which to expose HTTP                                              | `80`                                                                      |
-| `gitBackend.service.https.enabled`       | Whether to serve HTTPS-requests                                             | `false`                                                                   |
-| `gitBackend.service.https.port`          | Port over which to expose HTTPS                                             | `443`                                                                     |
-| `gitBackend.service.https.cert`          | Public SSL server certificate                                               | `-----BEGIN CERTIFICATE-----`                                             |
-| `gitBackend.service.https.key`           | Private SSL server certificate                                              | `-----BEGIN RSA PRIVATE KEY-----`                                         |
-| `gitBackend.ingress.enabled`             | Whether to deploy an Ingress                                                | `false`                                                                   |
-| `gitBackend.ingress.host`                | Host name to use for the Ingress (required for Ingress)                     | `nil`                                                                     |
-| `gitBackend.ingress.alias`               | Optional: ALias host name for the Ingress                                   | `nil`                                                                     |
-| `gitBackend.ingress.tls.enabled`         | Whether to enable TLS termination in the Ingress                            | `false`                                                                   |
-| `gitBackend.ingress.tls.cert`            | Public SSL server certificate                                               | `-----BEGIN CERTIFICATE-----`                                             |
-| `gitBackend.ingress.tls.key`             | Private SSL server certificate                                              | `-----BEGIN RSA PRIVATE KEY-----`                                         |
+| Parameter                                | Description                                                                        | Default                                                                   |
+|------------------------------------------|------------------------------------------------------------------------------------|---------------------------------------------------------------------------|
+| `gitBackend.image`                       | Image name of the Apache-git-http-backend container image                          | `k8s-gerrit/apache-git-http-backend`                                      |
+| `gitBackend.replicas`                    | Number of pod replicas to deploy                                                   | `1`                                                                       |
+| `gitBackend.maxSurge`                    | Max. percentage or number of pods allowed to be scheduled above the desired number | `25%`                                                                     |
+| `gitBackend.maxUnavailable`              | Max. percentage or number of pods allowed to be unavailable at a time              | `100%`                                                                    |
+| `gitBackend.resources`                   | Configure the amount of resources the pod requests/is allowed                      | `requests.cpu: 100m`                                                      |
+|                                          |                                                                                    | `requests.memory: 256Mi`                                                  |
+|                                          |                                                                                    | `limits.cpu: 100m`                                                        |
+|                                          |                                                                                    | `limits.memory: 256Mi`                                                    |
+| `gitBackend.credentials.htpasswd`        | `.htpasswd`-file containing username/password-credentials for accessing git        | `git:$apr1$O/LbLKC7$Q60GWE7OcqSEMSfe/K8xU.` (user: git, password: secret) |
+| `gitBackend.logging.persistence.enabled` | Whether to persist logs                                                            | `true`                                                                    |
+| `gitBackend.logging.persistence.size`    | Storage size for persisted logs                                                    | `1Gi`                                                                     |
+| `gitBackend.service.type`                | Which kind of Service to deploy                                                    | `LoadBalancer`                                                            |
+| `gitBackend.service.http.enabled`        | Whether to serve HTTP-requests (needed for Ingress)                                | `true`                                                                    |
+| `gitBackend.service.http.port`           | Port over which to expose HTTP                                                     | `80`                                                                      |
+| `gitBackend.service.https.enabled`       | Whether to serve HTTPS-requests                                                    | `false`                                                                   |
+| `gitBackend.service.https.port`          | Port over which to expose HTTPS                                                    | `443`                                                                     |
+| `gitBackend.service.https.cert`          | Public SSL server certificate                                                      | `-----BEGIN CERTIFICATE-----`                                             |
+| `gitBackend.service.https.key`           | Private SSL server certificate                                                     | `-----BEGIN RSA PRIVATE KEY-----`                                         |
+| `gitBackend.ingress.enabled`             | Whether to deploy an Ingress                                                       | `false`                                                                   |
+| `gitBackend.ingress.host`                | Host name to use for the Ingress (required for Ingress)                            | `nil`                                                                     |
+| `gitBackend.ingress.alias`               | Optional: ALias host name for the Ingress                                          | `nil`                                                                     |
+| `gitBackend.ingress.tls.enabled`         | Whether to enable TLS termination in the Ingress                                   | `false`                                                                   |
+| `gitBackend.ingress.tls.cert`            | Public SSL server certificate                                                      | `-----BEGIN CERTIFICATE-----`                                             |
+| `gitBackend.ingress.tls.key`             | Private SSL server certificate                                                     | `-----BEGIN RSA PRIVATE KEY-----`                                         |
 
 ***note
 At least one endpoint (HTTP and/or HTTPS) has to be enabled in the service!
@@ -175,8 +177,11 @@
 
 | Parameter                                    | Description                                                                                                              | Default                           |
 |----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|-----------------------------------|
-| `gerritMaster.images.gerritInit`             | Image name of the Gerrit init container image                                                                            | `k8s-gerrit/gerrit-init`          |
-| `gerritMaster.images.gerritSlave`            | Image name of the Gerrit slave container image                                                                           | `k8s-gerrit/gerrit-slave`         |
+| `gerritSlave.images.gerritInit`              | Image name of the Gerrit init container image                                                                            | `k8s-gerrit/gerrit-init`          |
+| `gerritSlave.images.gerritSlave`             | Image name of the Gerrit slave container image                                                                           | `k8s-gerrit/gerrit-slave`         |
+| `gerritSlave.replicas`                       | Number of pod replicas to deploy                                                                                         | `1`                               |
+| `gerritSlave.maxSurge`                       | Max. percentage or number of pods allowed to be scheduled above the desired number                                       | `25%`                             |
+| `gerritSlave.maxUnavailable`                 | Max. percentage or number of pods allowed to be unavailable at a time                                                    | `100%`                            |
 | `gerritSlave.initializeTestSite.enabled`     | Enable the initialization of a site. USE ONLY for testing, if you do not plan to replicate repositories or the database. | `true`                            |
 | `gerritSlave.resources`                      | Configure the amount of resources the pod requests/is allowed                                                            | `requests.cpu: 1`                 |
 |                                              |                                                                                                                          | `requests.memory: 5Gi`            |
diff --git a/helm-charts/gerrit-slave/templates/gerrit-slave.deployment.yaml b/helm-charts/gerrit-slave/templates/gerrit-slave.deployment.yaml
index bddb9b8..34982e4 100644
--- a/helm-charts/gerrit-slave/templates/gerrit-slave.deployment.yaml
+++ b/helm-charts/gerrit-slave/templates/gerrit-slave.deployment.yaml
@@ -9,6 +9,10 @@
     release: {{ .Release.Name }}
 spec:
   replicas: {{ .Values.gerritSlave.replicas | default 1 }}
+  strategy:
+    rollingUpdate:
+      maxSurge: {{ .Values.gerritSlave.maxSurge }}
+      maxUnavailable: {{ .Values.gerritSlave.maxUnavailable }}
   selector:
     matchLabels:
       app: gerrit-slave
diff --git a/helm-charts/gerrit-slave/templates/git-backend.deployment.yaml b/helm-charts/gerrit-slave/templates/git-backend.deployment.yaml
index 328beea..f96bf2a 100644
--- a/helm-charts/gerrit-slave/templates/git-backend.deployment.yaml
+++ b/helm-charts/gerrit-slave/templates/git-backend.deployment.yaml
@@ -9,6 +9,10 @@
     release: {{ .Release.Name }}
 spec:
   replicas: {{ .Values.gitBackend.replicas | default 1 }}
+  strategy:
+    rollingUpdate:
+      maxSurge: {{ .Values.gitBackend.maxSurge }}
+      maxUnavailable: {{ .Values.gitBackend.maxUnavailable }}
   selector:
     matchLabels:
       app: git-backend
diff --git a/helm-charts/gerrit-slave/values.yaml b/helm-charts/gerrit-slave/values.yaml
index a52576e..2e464d2 100644
--- a/helm-charts/gerrit-slave/values.yaml
+++ b/helm-charts/gerrit-slave/values.yaml
@@ -50,6 +50,10 @@
   image: k8sgerrit/apache-git-http-backend
 
   replicas: 1
+  maxSurge: 25%
+  # For just one replica, 100 % unavailability has to be allowed for updates to
+  # work.
+  maxUnavailable: 100%
 
   resources:
     requests:
@@ -133,6 +137,12 @@
     gerritInit: k8sgerrit/gerrit-init
     gerritSlave: k8sgerrit/gerrit-slave
 
+  replicas: 1
+  maxSurge: 25%
+  # For just one replica, 100 % unavailability has to be allowed for updates to
+  # work.
+  maxUnavailable: 100%
+
   # If you only intend to test the Gerrit slave and do not wish to actually
   # replicate repositories and the database, activate this option to initialize
   # a new site.