blob: 3f521b062a538683a648fb4348dbb011f791c684 [file] [log] [blame]
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ******** WARNING ******
# Only run this script on a clean testing cluster. It will test the upgrade from v0.2.8 -> v0.3.0
# ***************************
# Clear your kube environment
kubectl delete crds zookeeperclusters.zookeeper.pravega.io solrbackups.solr.apache.org solrclouds.solr.apache.org solrprometheusexporters.solr.apache.org \
solrclouds.solr.bloomberg.com solrprometheusexporters.solr.bloomberg.com solrbackups.solr.bloomberg.com solrcollections.solr.bloomberg.com solrcollectionaliases.solr.bloomberg.com; \
kubectl delete pvc --all; helm delete solr-operator apache
helm ls -a --all-namespaces | awk 'NR > 1 { print "-n "$2, $1}' | xargs -L1 helm delete
helm repo add apache-solr https://solr.apache.org/charts && helm repo update
####
## Setup an environment using the v0.2.6 Solr Operator
####
# Install the Zookeeper Operator
kubectl apply -f https://apache.github.io/solr-operator/example/dependencies/zk_operator.yaml
# Install a past version of the Solr Operator
helm install solr-operator apache-solr/solr-operator --version 0.2.6 --set ingressBaseDomain=localhost.com
kubectl rollout status deployment/solr-operator
# Install an out-of-date Solr Cloud
cat <<EOF | kubectl apply -f -
apiVersion: solr.bloomberg.com/v1beta1
kind: SolrCloud
metadata:
name: example
spec:
dataPvcSpec:
resources:
requests:
storage: "5Gi"
replicas: 3
solrImage:
tag: 8.5.0
solrJavaMem: "-Xms1g -Xmx3g"
customSolrKubeOptions:
podOptions:
resources:
limits:
memory: "1G"
requests:
cpu: "65m"
memory: "156Mi"
zookeeperRef:
provided:
chroot: "/this/will/be/auto/created"
zookeeper:
persistence:
spec:
storageClassName: "hostpath"
resources:
requests:
storage: "5Gi"
replicas: 1
zookeeperPodPolicy:
resources:
limits:
memory: "1G"
requests:
cpu: "65m"
memory: "156Mi"
EOF
# Wait for solrcloud to be ready
sleep 60
kubectl rollout status statefulset/example-solrcloud
# Install a SolrCollection and PrometheusExporter
cat <<EOF | kubectl apply -f -
apiVersion: solr.bloomberg.com/v1beta1
kind: SolrCollection
metadata:
name: example-collection-1
spec:
solrCloud: example
collection: example-collection
routerName: compositeId
autoAddReplicas: false
numShards: 2
replicationFactor: 1
maxShardsPerNode: 1
collectionConfigName: "_default"
---
apiVersion: solr.bloomberg.com/v1beta1
kind: SolrPrometheusExporter
metadata:
name: example
spec:
solrReference:
cloud:
name: "example"
numThreads: 4
image:
tag: 8.5.0
EOF
# Wait for solrmetrics to be ready
sleep 5
kubectl rollout status deployment/example-solr-metrics
####
## Upgrade the Solr Operator to v0.2.8
####
helm upgrade solr-operator apache-solr/solr-operator --version 0.2.8 --set ingressBaseDomain=localhost.com
kubectl replace -f https://solr.apache.org/operator/downloads/crds/v0.2.8/all-with-dependencies.yaml
# Wait until everything is up to date and the cluster is calm
kubectl get solrcloud -w
####
####
## Install the Apache Solr Operator separately
####
# Build the Apache release (TODO: Change to release when it is cut)
make docker-build
helm dependency build helm/solr-operator
# Uninstall Old ZK Operator
echo "Deleting all Zookeeper Operator resources, except for CRDs" && \
kubectl delete deployment zk-operator && \
kubectl delete clusterrolebinding zookeeper-operator-cluster-role-binding && \
kubectl delete clusterrole zookeeper-operator && \
kubectl delete serviceaccount zookeeper-operator
# Install new ZookeeperCluster CRD
kubectl replace -f https://raw.githubusercontent.com/pravega/zookeeper-operator/v0.2.9/deploy/crds/zookeeper.pravega.io_zookeeperclusters_crd.yaml
helm install apache helm/solr-operator --set image.tag=latest --set image.pullPolicy=Never
####
## Convert BB Solr resources to Apache Solr resources
####
kubectl get solrclouds.solr.bloomberg.com --all-namespaces -o yaml | \
sed "s#solr.bloomberg.com#solr.apache.org#g" | \
yq eval 'del(.items.[].metadata.annotations."kubectl.kubernetes.io/last-applied-configuration", .items.[].metadata.managedFields, .items.[].metadata.resourceVersion, .items.[].metadata.creationTimestamp, .items.[].metadata.generation, .items.[].metadata.selfLink, .items.[].metadata.uid, .items.[].spec.solrPodPolicy, .items.[].spec.zookeeperRef.provided.image.tag, .items.[].status)' - \
| kubectl apply -f -
kubectl get solrprometheusexporters.solr.bloomberg.com --all-namespaces -o yaml | \
sed "s#solr.bloomberg.com#solr.apache.org#g" | \
yq eval 'del(.items.[].metadata.annotations."kubectl.kubernetes.io/last-applied-configuration", .items.[].metadata.managedFields, .items.[].metadata.resourceVersion, .items.[].metadata.creationTimestamp, .items.[].metadata.generation, .items.[].metadata.selfLink, .items.[].metadata.uid, .items.[].spec.podPolicy, .items.[].status)' - \
| kubectl apply -f -
kubectl get solrbackups.solr.bloomberg.com --all-namespaces -o yaml | \
sed "s#solr.bloomberg.com#solr.apache.org#g" | \
yq eval 'del(.items.[].metadata.annotations."kubectl.kubernetes.io/last-applied-configuration", .items.[].metadata.managedFields, .items.[].metadata.resourceVersion, .items.[].metadata.creationTimestamp, .items.[].metadata.generation, .items.[].metadata.selfLink, .items.[].metadata.uid, .items.[].status)' - \
| kubectl apply -f -
####
## Uninstall the Bloomberg Solr Operator and resources
####
helm delete solr-operator
# Remove finalizers for Collections and CollectionAliases
kubectl get solrclouds.solr.bloomberg.com -o name | sed -e 's/.*\///g' | xargs -I {} kubectl patch solrclouds.solr.bloomberg.com {} --type='json' -p='[{"op": "remove", "path": "/metadata/finalizers/0"}]'
kubectl get solrcollections.solr.bloomberg.com -o name | sed -e 's/.*\///g' | xargs -I {} kubectl patch solrcollections.solr.bloomberg.com {} --type='json' -p='[{"op": "remove", "path": "/metadata/finalizers/0"}]'
kubectl get solrcollectionaliases.solr.bloomberg.com -o name | sed -e 's/.*\///g' | xargs -I {} kubectl patch solrcollectionaliases.solr.bloomberg.com {} --type='json' -p='[{"op": "remove", "path": "/metadata/finalizers/0"}]'
# Uninstall the Bloomberg resources
kubectl delete solrclouds.solr.bloomberg.com --all --all-namespaces
kubectl delete solrprometheusexporters.solr.bloomberg.com --all --all-namespaces
kubectl delete solrbackups.solr.bloomberg.com --all --all-namespaces
kubectl delete solrcollections.solr.bloomberg.com --all --all-namespaces
kubectl delete solrcollectionaliases.solr.bloomberg.com --all --all-namespaces
# Remove Bloomberg CRDs
kubectl delete crd solrclouds.solr.bloomberg.com solrprometheusexporters.solr.bloomberg.com solrbackups.solr.bloomberg.com solrcollections.solr.bloomberg.com solrcollectionaliases.solr.bloomberg.com
# Watch Solr upgrade for v0.3.0
kubectl get solr -w