Skip to content
This repository has been archived by the owner on May 16, 2023. It is now read-only.

Commit

Permalink
[meta] add support for k8s 1.16 (#635)
Browse files Browse the repository at this point in the history
* add CI tests for GKE 1.16
* test Elasticsearch upgrade from 7.4.0 on K8S 1.16 due to previous version of Elasticsearch chart not compatible with K8S 1.16 (see #635 (comment))
* move Elasticsearch upgrade test logic to dedicated shell script to improve error handling
* add jq to Docker image
  • Loading branch information
jmlrt committed May 29, 2020
1 parent d5f327b commit c96be3d
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 16 deletions.
11 changes: 1 addition & 10 deletions elasticsearch/examples/upgrade/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,8 @@ include ../../../helpers/examples.mk

RELEASE := helm-es-upgrade

# Right now the version is hardcoded because helm install will ignore
# anything with an alpha tag when trying to install the latest release
# This hardcoding can be removed once we drop the alpha tag
# The "--set terminationGracePeriod=121" always makes sure that a rolling
# upgrade is forced for this test
install:
helm repo add elastic https://helm.elastic.co && \
helm upgrade --wait --timeout=600 --install $(RELEASE) elastic/elasticsearch --version 7.0.0-alpha1 --set clusterName=upgrade ; \
kubectl rollout status sts/upgrade-master --timeout=600s
helm upgrade --wait --timeout=600 --set terminationGracePeriod=121 --install $(RELEASE) ../../ --set clusterName=upgrade ; \
kubectl rollout status sts/upgrade-master --timeout=600s
./scripts/upgrade.sh --release $(RELEASE)

init:
helm init --client-only
Expand Down
18 changes: 13 additions & 5 deletions elasticsearch/examples/upgrade/README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,27 @@
# Upgrade

This example deploy a 3 nodes Elasticsearch cluster using [7.0.0-alpha1][] chart
version, then upgrade it to 7.8.0-SNAPSHOT version.
This example will deploy a 3 node Elasticsearch cluster using an old chart version,
then upgrade it to version 7.8.0-SNAPSHOT.

The following upgrades are tested:
- Upgrade from [7.0.0-alpha1][] version on K8S <1.16
- Upgrade from [7.4.0][] version on K8S >=1.16 (Elasticsearch chart < 7.4.0 are
not compatible with K8S >= 1.16)


## Usage

Running `make install` command will do both 7.0.0-alpha1 install and 7.8.0-SNAPSHOT
upgrade
Running `make install` command will do first install and 7.8.0-SNAPSHOT upgrade.

Note: [jq][] is a requirement for this make target.


## Testing

You can also run [goss integration tests][] using `make test`
You can also run [goss integration tests][] using `make test`.


[7.0.0-alpha1]: https://github.com/elastic/helm-charts/releases/tag/7.0.0-alpha1
[7.4.0]: https://github.com/elastic/helm-charts/releases/tag/7.4.0
[goss integration tests]: https://github.com/elastic/helm-charts/tree/7.x/elasticsearch/examples/upgrade/test/goss.yaml
[jq]: https://stedolan.github.io/jq/
76 changes: 76 additions & 0 deletions elasticsearch/examples/upgrade/scripts/upgrade.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#!/usr/bin/env bash

set -euo pipefail

usage() {
cat <<-EOF
USAGE:
$0 [--release <release-name>] [--from <elasticsearch-version>]
$0 --help
OPTIONS:
--release <release-name>
Name of the Helm release to install
--from <elasticsearch-version>
Elasticsearch version to use for first install
EOF
exit 1
}

RELEASE="helm-es-upgrade"
FROM=""

while [[ $# -gt 0 ]]
do
key="$1"

case $key in
--help)
usage
;;
--release)
RELEASE="$2"
shift 2
;;
--from)
FROM="$2"
shift 2
;;
*)
log "Unrecognized argument: '$key'"
usage
;;
esac
done

if ! command -v jq > /dev/null
then
echo 'jq is required to use this script'
echo 'please check https://stedolan.github.io/jq/download/ to install it'
exit 1
fi

# Elasticsearch chart < 7.4.0 are not compatible with K8S >= 1.16)
if [[ -z $FROM ]]
then
KUBE_MINOR_VERSION=$(kubectl version -o json | jq --raw-output --exit-status '.serverVersion.minor' | sed 's/[^0-9]*//g')

if [ "$KUBE_MINOR_VERSION" -lt 16 ]
then
FROM="7.0.0-alpha1"
else
FROM="7.4.0"
fi
fi

helm repo add elastic https://helm.elastic.co

# Initial install
printf "Installing Elasticsearch chart %s\n" "$FROM"
helm upgrade --wait --timeout=600 --install "$RELEASE" elastic/elasticsearch --version "$FROM" --set clusterName=upgrade
kubectl rollout status sts/upgrade-master --timeout=600s

# Upgrade
printf "Upgrading Elasticsearch chart\n"
helm upgrade --wait --timeout=600 --set terminationGracePeriod=121 --install "$RELEASE" ../../ --set clusterName=upgrade
kubectl rollout status sts/upgrade-master --timeout=600s
1 change: 1 addition & 0 deletions helpers/matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@ APM_SERVER_SUITE:
KUBERNETES_VERSION:
- '1.14'
- '1.15'
- '1.16'
8 changes: 7 additions & 1 deletion helpers/terraform/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ FROM centos:7

ENV VAULT_VERSION 0.9.3
ENV TERRAFORM_VERSION=0.11.7
ENV KUBECTL_VERSION=1.15.4
ENV KUBECTL_VERSION=1.16.10
ENV HELM_VERSION=2.16.7
ENV DOCKER_VERSION=18.09.7
ENV JQ_VERSION=1.6

RUN yum -y install \
make \
Expand Down Expand Up @@ -44,3 +45,8 @@ RUN curl -O https://download.docker.com/linux/static/stable/x86_64/docker-${DOCK
mv docker/docker /usr/local/bin && \
rm -rf docker/ && \
docker

RUN curl -O -L https://github.com/stedolan/jq/releases/download/jq-${JQ_VERSION}/jq-linux64 && \
mv jq-linux64 /usr/local/bin/jq && \
chmod a+x /usr/local/bin/jq && \
jq --version

0 comments on commit c96be3d

Please sign in to comment.