From 977ded5c554892451abf26fd80f23f93e1cf76b0 Mon Sep 17 00:00:00 2001
From: Ernest Chuang <echuang@revacomm.com>
Date: Thu, 13 Apr 2023 14:42:03 +0000
Subject: [PATCH] Resolve "Define BB upgrade path/guidance"

---
 .../guides/using-bigbang/upgrading-bigbang.md | 123 ++++++++++++++++++
 1 file changed, 123 insertions(+)
 create mode 100644 docs/guides/using-bigbang/upgrading-bigbang.md

diff --git a/docs/guides/using-bigbang/upgrading-bigbang.md b/docs/guides/using-bigbang/upgrading-bigbang.md
new file mode 100644
index 0000000000..3d7bda48ed
--- /dev/null
+++ b/docs/guides/using-bigbang/upgrading-bigbang.md
@@ -0,0 +1,123 @@
+# Upgrading Big Bang
+
+## Before Upgrading
+Before upgrading Big Bang please first check the Release Notes and the Changelog to look for any notes that apply to Big Bang Updates and Package Updates.
+
+Two important things to review when upgrading:
+- "Upgrade Notices" in the Big Bang release notes: 
+  - These capture any critical notes that the Big Bang development team identified during the release process. 
+    - This may be an update to Flux which requires a "manual" application, or a change to a specific package that we deem important to include.
+- Changelog entries for individual packages that you are deploying: 
+  - Oftentimes individual packages could have breaking changes depending on your configuration. 
+  - It is important to review the changes included with those packages and determine if your configuration needs to be adjusted as a result.
+
+## Supported Upgrades
+Generally we expect upgrades to be done one minor release at a time.  If necessary, it is possible to jump past several versions provided there is careful review of the release notes in between the versions and there are no problems.
+
+NOTE: It is recommended that upgrades first be tested in a staging environment that mirrors the production environment so that errors are caught early.
+
+## Upgrading a Single Package
+Packages in Big Bang can be updated one at a time.
+Upgrading a single package in Big Bang is done by changing the tag in the values for that package.  This should be done in the overriding values in the customer template.
+
+For a git repository:
+
+```yaml
+istio:
+  sourceType: "git"
+  git:
+    repo: https://repo1.dso.mil/big-bang/product/packages/istio-controlplane.git
+    path: "./chart"
+    tag: "1.17.1-bb.1"
+
+```
+
+For a helm repository:
+
+```yaml
+istio:
+  sourceType: "helmRepo"
+  helmRepo:
+    repoName: "registry1"
+    chartName: "istio"
+    tag: "1.17.1-bb.1"
+```
+
+These values are in `chart/values.yaml` of the Big Bang helm chart.
+When using the [Customer Template](https://repo1.dso.mil/big-bang/customers/template) you can make these changes in either the base values (`bigbang/base/values.yaml`) or in each environment's values file (ex: `bigbang/dev/configmap.yaml`).
+
+## Upgrading Big Bang umbrella deployment
+To upgrade your umbrella deployment of Big Bang when using the [Customer Template](https://repo1.dso.mil/big-bang/customers/template) you have two options:
+- Edit `base/kustomization.yaml` and change the value for the [base `ref`](https://repo1.dso.mil/big-bang/customers/template/-/blob/main/base/kustomization.yaml#L4) to the new version. This will update all environments leveraging this base (dev, prod, etc).
+```yaml
+namespace: bigbang
+resources:
+  - git::https://repo1.dso.mil/platform-one/big-bang/bigbang.git//base?ref=1.57.1
+```
+
+- Edit the environment specific Kustomization (ex: `dev/kustomization.yaml`) to use the new version under the [ref/patch section](https://repo1.dso.mil/big-bang/customers/template/-/blob/main/dev/kustomization.yaml#L18-21).
+```yaml
+  spec:
+    interval: 1m
+    ref:
+      $patch: replace
+      tag: "1.57.1"
+```
+
+## Verifying the Upgrade
+After upgrading the cluster there are some places to look to verify that the upgrade was completed successfully.
+
+### Verify Helm releases 
+ - Verify all the helm releases have succeeded
+   
+   If everything has updated successfully you should see `Release reconciliation succeeded` as the status for each HelmRelease.
+```bash
+❯ k get hr -A
+NAMESPACE   NAME              AGE    READY   STATUS
+bigbang     kyverno           5h1m   True    Release reconciliation succeeded
+bigbang     kyvernopolicies   5h1m   True    Release reconciliation succeeded
+bigbang     istio-operator    5h1m   True    Release reconciliation succeeded
+bigbang     istio             5h1m   True    Release reconciliation succeeded
+```
+
+### Verify Pods
+ - Verify that there are all pods are either `Running` or `Completed`
+ - Look for any pods that recently restarted (crashing recently)
+   - Below see an example of a pod that has restarted multiple times in a short time
+```bash
+❯ k get pod -A
+NAMESPACE           NAME                                                        READY   STATUS    RESTARTS   AGE
+kube-system         local-path-provisioner-5ff76fc89d-xd85h                     1/1     Running   0          22m
+...
+monitoring          alertmanager-monitoring-monitoring-kube-alertmanager-0      3/3     Running   7          3m
+```
+
+### Verify Image Versions for Specific Packages
+ - Check for specific package versions (image version on pods)
+   - There may be cases where you are hoping to use new features in a new package version, as such it can be beneficial to validate that package did update to the new version as expected.
+   - It can also be important to validate Istio sidecar versions, especially for packages outside of Big Bang core/addons. See an example of checking the image version of the running pod below:
+```bash
+❯ k get pod -n istio-system istiod-78c5bf85fc-68xv6 -o yaml
+apiVersion: v1
+kind: Pod
+spec:
+  affinity: {}
+  containers:
+  - args:
+    image: registry1.dso.mil/ironbank/opensource/istio/pilot:1.17.1
+...
+status:
+  containerStatuses:
+  - containerID: containerd://451827d87a5209b4cb10ff074d986f00ec3bd7d36082cb49b8612e3a48eea9b7
+    image: registry1.dso.mil/ironbank/opensource/istio/pilot:1.17.1
+```
+### Check Package Usability
+ - Validate the UI for web applications loads properly.
+   - This could be through a basic `curl` check or similar to confirm UIs are up and healthy.
+ - You may configure and use certain applications in unique ways.
+   - It is important to validate those specific applications/features are functioning as expected post-upgrade.
+
+## Upgrade Troubleshooting
+Oftentimes a good place to start with troubleshooting is to identify which package had issues upgrading. After identifying the package that had problems it can be helpful to re-review the release notes and changelog for that specific package to see if any changes were missed that may have caused the upgrade issue you ran into.
+
+Specific troubleshooting steps for common issues will be added here in the future.
-- 
GitLab