diff --git a/content/en/continuous-deployment/_index.md b/content/en/continuous-deployment/_index.md
index c9b236b838..44fa7713c4 100755
--- a/content/en/continuous-deployment/_index.md
+++ b/content/en/continuous-deployment/_index.md
@@ -20,9 +20,9 @@ description: >
### Kubernetes Operators for installation
-The [Armory Operator]({{< ref "armory-operator" >}}) is a Kubernetes Operator that helps you configure, deploy, and update Armory Continuous Deployment on Kubernetes clusters.
+The Armory Operator is a Kubernetes Operator that enables you to [install]({{< ref "continuous-deployment/installation/armory-operator/install-armorycd" >}}) and manage Armory Continuous Deployment on Kubernetes clusters.
-The open source [Spinnaker Operator](https://github.com/armory/spinnaker-operator) provides features to deploy and manage open source Spinnaker.
+Like the Armory Operator, the open source Spinnaker Operator is a Kubernetes Operator that enables you to [install]({{< ref "continuous-deployment/installation/armory-operator/install-spinnaker" >}}) and manage open source Spinnaker.
### Plugins for Spinnaker and Armory CD
diff --git a/content/en/continuous-deployment/armory-admin/mtls-configure.md b/content/en/continuous-deployment/armory-admin/mtls-configure.md
index a97f71cda6..4c31f4965b 100644
--- a/content/en/continuous-deployment/armory-admin/mtls-configure.md
+++ b/content/en/continuous-deployment/armory-admin/mtls-configure.md
@@ -32,7 +32,7 @@ For information about TLS, see {{< linkWithTitle "tls-configure" >}}.
## Configuring Java services
-Add the following to each Java service under `profiles` in the [SpinnakerService's profiles]({{< ref "op-config-manifest#specspinnakerconfigprofiles" >}}):
+Add the following to each Java service under `profiles` in the [SpinnakerService's profiles]({{< ref "continuous-deployment/installation/armory-operator/op-manifest-reference#specspinnakerconfigprofiles" >}}):
```yaml
# Only needed for "server" role
diff --git a/content/en/continuous-deployment/armory-admin/tls-configure.md b/content/en/continuous-deployment/armory-admin/tls-configure.md
index 0103426716..efe67a1346 100644
--- a/content/en/continuous-deployment/armory-admin/tls-configure.md
+++ b/content/en/continuous-deployment/armory-admin/tls-configure.md
@@ -40,7 +40,7 @@ Golang services need a X509 certificate (PEM format) and a private key for #1 as
## Configuring Java services
-Add the following to each Java service profile under `profiles` in the [SpinnakerService's profiles]({{< ref "op-config-manifest#specspinnakerconfigprofiles" >}}):
+Add the following to each Java service profile under `profiles` in the [SpinnakerService's profiles]({{< ref "continuous-deployment/installation/armory-operator/op-manifest-reference#specspinnakerconfigprofiles" >}}):
```yaml
# Only needed for "server" role
diff --git a/content/en/continuous-deployment/installation/_index.md b/content/en/continuous-deployment/installation/_index.md
index a023493e71..f8fe24349d 100644
--- a/content/en/continuous-deployment/installation/_index.md
+++ b/content/en/continuous-deployment/installation/_index.md
@@ -9,30 +9,33 @@ no_list: true
{{< include "armory-license.md" >}}
-## Methods for installing Armory Continuous Deployment
-
-There are several methods to install Armory Continuous Deployment or open source Spinnaker:
+## Installation tools
| Method | Environment | Description | Benefits |
|------------------------------------|-----------------------|----------------------------------------------------------------------|-----------------------------------------------------------------|
| [Armory Operator]({{< ref "armory-operator" >}}) | Kubernetes Operator that enables you to configure and manage Armory Continuous Deployment declaratively | GitOps friendly and ready for production use |
-| [Minnaker]({{< ref "minnaker" >}}) | MacOS, Linux, Windows | Spin up a whole environment on top of Rancher K3s to deploy Armory Continuous Deployment or Spinnaker | This is ideal if you do not have a Kubernetes cluster available and want to try Armory Continuous Deployment |
-| [Operator]({{< ref "armory-operator" >}}) | Kubernetes | An open source Kubernetes Operator that installs open source Spinnaker | GitOps friendly and ready for production use |
+| [Spinnaker Operator]({{< ref "armory-operator" >}}) | Kubernetes | An open source Kubernetes Operator that installs open source Spinnaker | GitOps friendly and ready for production use |
-All the preceding methods share similar configurations, and you can migrate between them if your needs change.
+The preceding tools share similar configurations.
> Armory Continuous Deployment does not generate default usernames and passwords for user accounts for any service. Manage these by configuring authentication and authorization for Armory Continuous Deployment.
-## Guides
+## Armory CD install guides
Based on your environment, use one of the following guides to help you install Armory Continuous Deployment:
| Guide | Environment | Description |
|-----------------------------------------------------------|------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
-| [Armory Operator Quickstart]({{< ref "op-quickstart" >}}) | Kubernetes, Armory Operator | Install the Armory Operator, create a Kubernetes manifest for Armory Continuous Deployment, and then deploy and manage using the Armory Operator. |
-| [Air Gapped]({{< ref "air-gapped" >}}) | Air-gapped environments that use the Armory Operator | Learn how to host your own Bill of Materials for deploying Armory Continuous Deployment in an air-gapped environment. |
-| [AWS Marketplace]({{< ref "aws-container-marketplace" >}}) | AWS, Armory Operator | Use the Armory Operator from the AWS Container Marketplace to deploy Armory Continuous Deployment in your Amazon Kubernetes (EKS) cluster. |
+| {{< linkWithLinkTitle "continuous-deployment/installation/armory-operator/install-armorycd.md" >}} | Kubernetes, Armory Operator | Install the Armory Operator, create a Kubernetes manifest for Armory Continuous Deployment, and then deploy and manage using the Armory Operator. |
+| {{< linkWithLinkTitle "continuous-deployment/installation/guide/air-gapped/_index.md" >}} | Air-gapped environments that use the Armory Operator | Learn how to host your own Bill of Materials for deploying Armory Continuous Deployment in an air-gapped environment. |
+| {{< linkWithLinkTitle "continuous-deployment/installation/guide/aws-container-marketplace.md" >}} | AWS, Armory Operator | Use the Armory Operator from the AWS Container Marketplace to deploy Armory Continuous Deployment in your Amazon Kubernetes (EKS) cluster. |
| [Armory Continuous Deployment on AWS workshop](https://armory.awsworkshop.io/) | AWS | Use AWS CloudFormation to create infrastructure and deploy Armory Continuous Deployment from the AWS Marketplace. |
-| [Install in AWS]({{< ref "install-on-aws" >}}) | AWS EKS | Use Armory Operator to deploy Armory Continuous Deployment in an AWS EKS cluster. |
-| [Install on AWS EC2 with Operator]({{< ref "operator-k3s" >}}) | AWS EC2, Armory Operator | Installation steps for using Armory Operator to install Armory CD in a Lightweight Kubernetes (K3s) instance for a Proof of Concept.
+| {{< linkWithLinkTitle "continuous-deployment/installation/guide/install-on-aws.md" >}} | AWS EKS | Use the Armory Operator to deploy Armory Continuous Deployment in an AWS EKS cluster. |
+
+## Spinnaker install guides
+
+| Guide | Environment | Description |
+|-----------------------------------------------------------|------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
+| {{< linkWithLinkTitle "continuous-deployment/installation/armory-operator/install-spinnaker.md" >}} | Kubernetes, Spinnaker Operator, Kustomize | Install the Spinnaker Operator and use it with the `spinnaker-kustomize-patches` repo to deploy Spinnaker to your Kubernetes cluster. |
+
diff --git a/content/en/continuous-deployment/installation/armory-operator/_index.md b/content/en/continuous-deployment/installation/armory-operator/_index.md
index 05caf494ec..aa589254ef 100644
--- a/content/en/continuous-deployment/installation/armory-operator/_index.md
+++ b/content/en/continuous-deployment/installation/armory-operator/_index.md
@@ -9,16 +9,16 @@ aliases:
- /docs/installation/operator/
---
-{{< include "armory-license.md" >}}
-
## What are Kubernetes Operators for Spinnaker?
From the Kubernetes [Operator pattern docs](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/): "Operators are software extensions to Kubernetes that make use of custom resources to manage applications and their components." In other words, an Operator is a Kubernetes controller that manages a specific application using a custom resource. Both the proprietary Armory Operator and the open source [Spinnaker Operator for Kubernetes](https://github.com/armory/spinnaker-operator) are custom Kubernetes Operators that you can install in your cluster.
-* The **Armory Operator** ![Proprietary](/images/proprietary.svg) extends the Spinnaker Operator's features by providing the ability to configure Armory Continuous Deployment's [features]({{< ref "continuous-deployment#what-is-armory-continuous-deployment">}}), such as Pipelines-as-Code and Policy Engine. The Armory Operator and Armory Continuous Deployment are closed source and not free to use.
* The **Spinnaker Operator** is a Kubernetes controller for deploying and managing Spinnaker. The Spinnaker Operator and Spinnaker are both open source and free to use.
+* The **Armory Operator** ![Proprietary](/images/proprietary.svg) extends the Spinnaker Operator's features by providing the ability to configure Armory Continuous Deployment's [features]({{< ref "continuous-deployment#what-is-armory-continuous-deployment">}}). The Armory Operator and Armory Continuous Deployment are closed source and not free to use.
+
+{{< include "armory-license.md" >}}
-## Advantages to using a Kubernetes Operator for Armory Continuous Deployment deployment
+## Advantages to using a Kubernetes Operator for deployment
* Use a Kubernetes manifest to deploy and manage Armory Continuous Deployment or Spinnaker.
* Use `kubectl` to deploy, manage, and access Armory Continuous Deployment or Spinnaker like you would with any other app deployed on Kubernetes.
@@ -29,6 +29,8 @@ From the Kubernetes [Operator pattern docs](https://kubernetes.io/docs/concepts/
The Operator is a custom controller of Kubernetes kind [`Deployment`](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/). The Operator works with a [Kubernetes custom resource](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) named `SpinnakerService` to deploy and manage Armory Continuous Deployment or Spinnaker in your cluster.
+The Operator uses Halyard to deploy Armory CD or Spinnaker. See [Custom Halyard Configuration]({{< ref "op-advanced-config.md" >}}) if you need to modify Halyard.
+
### `SpinnakerService` Custom Resource Definition
The `SpinnakerService` CRD declares the resource's names, the scope of the resource, and the structural schema of the `spinnakerservice.yml` [Kubernetes manifest](https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/) that contains your Spinnaker configuration:
@@ -52,12 +54,12 @@ spec:
You can view the entire `SpinnakerService` CRD in the public `spinnaker-operator` [repo](https://github.com/armory/spinnaker-operator/blob/master/deploy/crds/spinnaker.io_spinnakerservices_crd.yaml).
-### Spinnnaker manifest
+### Spinnaker manifest
You have the following options for creating the Spinnaker manifest:
-* Create the manifest YAML file yourself using an [example](https://github.com/armory/spinnaker-operator/blob/master/deploy/spinnaker/basic/spinnakerservice.yml) `spinnakerservice.yml` as a starting point.
-* Create a collection of patch files that [Kustomize](https://kustomize.io/) uses to overwrite sections of the `spinnakerservice.yml` manifest. Kustomize is part of `kubectl`.
+* Create a collection of patch files that [Kustomize](https://kustomize.io/) uses to overwrite sections of the `spinnakerservice.yml` manifest. Kustomize is part of `kubectl`. Armory maintains a public `spinnaker-kustomize-patches` [repo](https://github.com/armory/spinnaker-kustomize-patches).
+* Create the manifest YAML file yourself using an [example](https://github.com/armory/spinnaker-operator/blob/master/deploy/spinnaker/complete/spinnakerservice.yml) `spinnakerservice.yml` as a starting point.
Regardless of the option you use to configure Spinnaker, the `spinnakerservice.yml` manifest specifies that the Kubernetes kind is `SpinnakerService`:
@@ -68,8 +70,6 @@ metadata:
name: spinnaker
```
-You can view the rest of the basic file in the `spinnaker-operator` [repo](https://github.com/armory/spinnaker-operator/blob/master/deploy/spinnaker/basic/spinnakerservice.yml).
-
At the highest level, when you use `kubectl` to apply the manifest:
1. `kubectl` parses `spinnakerservice.yml` and sees that the kind is `SpinnakerService`.
@@ -78,12 +78,29 @@ At the highest level, when you use `kubectl` to apply the manifest:
The Armory Operator's `SpinnakerService` CRD and Armory Continuous Deployment `SpinnakerService.yml` are slightly different than their open source counterparts so that `kubectl` knows to delegate to the Armory Operator.
-## Comparison of the Spinnaker Operator and the Armory Operator
+## Comparison of the Armory Operator and the Spinnaker Operator
Use the Armory Operator if you want to deploy Armory Continuous Deployment and use its proprietary features.
{{% include "armory-operator/op-feature-compare.md" %}}
+## Operator installation modes
+
+Each Operator has `basic` and `cluster` installation modes. The option you use depends on which namespace you want to deploy Armory CD or Spinnaker to.
+
+
+| |Basic Mode | Cluster Mode |
+|:-------------------------------------------------------- |:------------------:|:---------------:|
+| Permissions scoped to single namespace Must deploy Armory CD or Spinnaker in the same namespace as the Operator Suitable for a Proof of Concept (POC) | ✅ | ❌ |
+| Can deploy Armory CD or Spinnaker to multiple namespaces (requires Kubernetes ClusterRole) | ❌ | ✅ |
+| Configure Armory CD or Spinnaker using Kustomize patches | ✅ | ✅ |
+| Configure Armory CD or Spinnaker using a single manifest file | ✅ | ✅ |
+| Perform pre-flight checks to prevent misconfiguration | ❌ | ✅ |
+
+
## {{% heading "nextSteps" %}}
+
* {{< linkWithTitle "continuous-deployment/installation/system-requirements.md" >}}
-* {{< linkWithTitle "op-quickstart.md" >}}
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/install-armorycd.md" >}}
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/install-spinnaker.md" >}}
+
diff --git a/content/en/continuous-deployment/installation/armory-operator/hal-op-migration.md b/content/en/continuous-deployment/installation/armory-operator/hal-op-migration.md
index baf4ad6e23..d6e37fc334 100644
--- a/content/en/continuous-deployment/installation/armory-operator/hal-op-migration.md
+++ b/content/en/continuous-deployment/installation/armory-operator/hal-op-migration.md
@@ -6,10 +6,10 @@ description: >
Migrate your Armory Continuous Deployment or Spinnaker installation from Halyard to the Operator.
---
-{{< include "armory-operator/os-operator-blurb.md">}}
-
## {{% heading "prereq" %}}
+{{< include "armory-operator/os-operator-blurb.md">}}
+
You need to decide if you want to overwrite the current Halyard deployment of Armory Continuous Deployment or create a test instance.
If you choose to overwrite your current instance, you need to take downtime to clean up the namespace that the Halyard-deployed Armory Continuous Deployment is in so Operator can deploy Armory Continuous Deployment without collision.
@@ -20,11 +20,17 @@ The second method is preferred as it allows you to test everything before decomm
## Migrate to Operator
-This guide assumes you want to deploy Armory Continuous Deployment using a single `SpinnakerSerivce.yml` manifest file rather than Kustomize patches.
+This guide assumes you want to deploy Armory Continuous Deployment using a single `SpinnakerService.yml` manifest file rather than Kustomize patches.
The migration process from Halyard to Operator can be completed in 7 steps:
-1. [Install the Operator]({{< ref "op-quickstart" >}}).
+1. Deploy the Armory Operator.
+
+ Decide which [Armory Operator release](https://github.com/armory/spinnaker-operator/releases) you need based on the compatibility matrix.
+
+ {{< include "armory-operator/operator-compat-matrix.md" >}}
+
+ {{< include "armory-operator/armory-op-install-cluster.md" >}}
1. Export configuration.
Copy the desired profile's content from the `config` file
@@ -49,7 +55,7 @@ The migration process from Halyard to Operator can be completed in 7 steps:
Note: `config` is under `~/.hal`
- You can see more details in [`spec.spinnakerConfig.config`]({{< ref "op-config-manifest#specspinnakerconfig" >}}).
+ You can see more details in [`spec.spinnakerConfig.config`]({{< ref "op-manifest-reference#specspinnakerconfig" >}}).
1. Export Armory Continuous Deployment profiles.
@@ -76,7 +82,7 @@ The migration process from Halyard to Operator can be completed in 7 steps:
```
- You can see more details in [`spec.spinnakerConfig.profiles`]({{< ref "op-config-manifest#specspinnakerconfigprofiles" >}}).
+ You can see more details in [`spec.spinnakerConfig.profiles`]({{< ref "op-manifest-reference#specspinnakerconfigprofiles" >}}).
1. Export Armory Continuous Deployment settings.
@@ -103,7 +109,7 @@ The migration process from Halyard to Operator can be completed in 7 steps:
```
- You can see more details in [spec.spinnakerConfig.service-settings]({{< ref "op-config-manifest#specspinnakerconfigservice-settings" >}}).
+ You can see more details in [spec.spinnakerConfig.service-settings]({{< ref "op-manifest-reference#specspinnakerconfigservice-settings" >}}).
1. Export local file references.
@@ -171,7 +177,7 @@ The migration process from Halyard to Operator can be completed in 7 steps:
primaryAccount: prod
```
- You can see more details in [spec.spinnakerConfig.files]({{< ref "op-config-manifest#specspinnakerconfigfiles" >}}).
+ You can see more details in [spec.spinnakerConfig.files]({{< ref "op-manifest-reference#specspinnakerconfigfiles" >}}).
1. Export Packer template files (if used).
@@ -205,9 +211,9 @@ The migration process from Halyard to Operator can be completed in 7 steps:
```
- You can see more details in [`spec.spinnakerConfig.files`]({{< ref "op-config-manifest#specspinnakerconfigfiles" >}}).
+ You can see more details in [`spec.spinnakerConfig.files`]({{< ref "op-manifest-reference#specspinnakerconfigfiles" >}}).
-1. Validate your Armory configuration if you plan to run the Operator in cluster mode:
+1. Validate your Armory CD configuration if you plan to run the Operator in cluster mode:
```bash
kubectl -n apply -f --dry-run=server
diff --git a/content/en/continuous-deployment/installation/armory-operator/install-armorycd.md b/content/en/continuous-deployment/installation/armory-operator/install-armorycd.md
new file mode 100644
index 0000000000..9232785dba
--- /dev/null
+++ b/content/en/continuous-deployment/installation/armory-operator/install-armorycd.md
@@ -0,0 +1,167 @@
+---
+title: Install Armory CD using the Armory Operator and Kustomize patches
+linkTitle: Install Armory CD
+weight: 1
+description: >
+ This guide describes how to deploy a basic Armory CD instance using the Armory Operator and Kustomize patches. You can use this instance as a starting point for configuring advanced features.
+aliases:
+ - /continuous-deployment/installation/armory-operator/op-config-kustomize/
+ - /continuous-deployment/installation/armory-operator/op-quickstart/
+---
+
+## Why use Kustomize patches for Armory CD configuration
+
+{{< include "armory-operator/why-use-kustomize.md" >}}
+
+## Objectives
+
+1. Meet the requirements listed in the [{{% heading "prereq" %}}](#before-you-begin) section.
+1. [Deploy the Armory Operator](#deploy-the-spinnaker-operator).
+1. [Get the spinnaker-kustomize-patches repo](#get-the-spinnaker-kustomize-patches-repo) that contains the Kustomize patches.
+1. [Configure Armory CD](#configure-armory-cd).
+1. [Deploy Armory CD](#deploy-armory-cd).
+1. [Port-forward](#port-forward-to-expose-spinnaker-services-locally) to expose Spinnaker services.
+1. Explore [advanced config options](#advanced-config-options)
+
+## {{% heading "prereq" %}}
+
+### How Kustomize works
+
+{{< include "armory-operator/how-kustomize-works.md" >}}
+
+### Kustomize resources
+
+You should familiarize yourself with Kustomize before you create patch files to configure Armory CD.
+
+* Kustomize [Glossary](https://kubectl.docs.kubernetes.io/references/kustomize/glossary/)
+* Kustomize [introduction](https://kubectl.docs.kubernetes.io/guides/introduction/kustomize/)
+* [Kustomization file overview](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/)
+
+### Kubernetes requirements
+
+{{% include "armory-operator/k8s-reqs.md" %}}
+
+### Kubernetes compatibility matrix
+
+{{< include "armory-operator/operator-compat-matrix.md" >}}
+
+## Deploy the Armory Operator
+
+Decide which Armory Operator release you need based on the compatibility matrix and the
+{{< linkWithTitle "continuous-deployment/release-notes/rn-armory-operator" >}}. Then install the Armory Operator in [cluster mode]({{< ref "continuous-deployment/installation/armory-operator#operator-installation-modes" >}}).
+
+{{< include "armory-operator/armory-op-install-cluster.md" >}}
+
+## Get the spinnaker-kustomize-patches repo
+
+{{% include "armory-operator/spin-kust-repo.md" %}}
+
+## Configure Armory CD
+
+Follow these steps to configure Armory CD:
+
+1. [Choose a `kustomization.yml` file](#choose-a-kustomization-file).
+1. [Set the Armory CD version](#set-the-spinnaker-version).
+1. [Verify the content of each resource file](#verify-resources).
+1. [Verify the configuration contents of each patch file](#verify-patches).
+
+### Choose a `kustomization` file
+
+Before you begin configuring Armory CD, you need to choose or create a `kustomization.yml` file. The `kustomization.yml` specifies the namespace for Armory CD, a list of Kubernetes resources, and a list of patch files to
+merge into the `spinnakerservice.yml` manifest file.
+
+#### Kustomization file breakdown
+
+The `recipes/kustomization-minimum.yml` recipe contains the bare minimum that you need to install Armory CD.
+
+{{< github repo="armory/spinnaker-kustomize-patches" file="/recipes/kustomization-minimum.yml" lang="yaml" options="" >}}
+
+* The `components` [section](https://kubectl.docs.kubernetes.io/guides/config_management/components/) contains paths to directories that define collections of Kubernetes resources, such as: in-cluster Spinnaker persistence with Minio, Kubernetes
+ Service Account, and patches to enable the cluster in Spinnaker.
+* The `patchesStrategicMerge` [section](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patchesstrategicmerge/) contains links to files that contain partial resource definitions. Kustomize uses these patch files to overwrite sections of components or resources, such as the `SpinnakerService` definition.
+* The `transformers` section contains links to files that define Kustomize [_transformers_](https://kubectl.docs.kubernetes.io/references/kustomize/glossary/#transformer).
+
+{{% alert title="Warning" color="warning" %}}
+If you are in an air-gapped environment and are using MinIO to host the Armory
+CD BOM, remove `core/persistence/in-cluster/minio.yml` from the list of resources to
+prevent the accidental deletion of the bucket when calling `kubectl delete -k
+.`.
+{{% /alert %}}
+
+There are several example kustomization files in the `recipes` directory. `kustomization-all.yml` lists the most common options. Most are commented out, so be sure to uncomment the features and software you want to install.
+
+#### Set the kustomization file
+
+The `kustomization.yml` file in the project root is a symlink to `recipes/kustomization-all.yml`, which contains patches for If you don't want to use `kustomization-all.yml`, choose a recipe that most closely resembles your use case and update the symlink:
+
+```bash
+ ln -vfns ./recipes/.yml kustomization.yml
+ ```
+
+Alternately, you can delete the symlink, move your desired Kustomization file from `recipes` to the top-level directory, and rename the file to `kustomization.yml`.
+
+### Set the Armory CD version
+
+In `spinnaker-kustomize-patches/core/patches/version.yml`, set the [Armory CD version]({{< ref "rn-armory-spinnaker" >}}) that you want to deploy, such as `{{< param "armory-version-exact" >}}`.
+
+{{< prism lang="yaml" line="8" >}}
+kind: SpinnakerService
+metadata:
+ name: spinnaker
+spec:
+ spinnakerConfig:
+ config:
+ version: {{< param "armory-version-exact" >}}
+{{< /prism >}}
+
+### Verify resources
+
+Read each file linked to from your chosen `kustomization.yml` file section to make sure that the Kubernetes resource as configured works with your environment.
+
+### Verify patches
+
+Read each file linked to in the `patchesStrategicMerge` section of the kustomization file that you choose. You may need to update each patch configuration with values specific to you and your environment. For example, the `kustomization-quickstart.yml` file described in the [Choose a `kustomization` file](#choose-a-kustomization-file) section links to `accounts/docker/patch-dockerhub.yml`. You need to update that patch file with your own DockerHub credentials.
+
+Explore the patches in various folders to see if there are any that you want to use. Remember to list additional patches in the `patchesStrategicMerge` section of your `kustomization.yml` file.
+
+### Secrets
+
+If you want to store Armory CD secrets in Kubernetes, you should use a [Kustomize `secretGenerator`](https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kustomize/) and define your secrets in the kustomization file for your component.
+
+## Deploy Armory CD
+
+{{% include "armory-operator/deploy-spin-kust.md" %}}
+
+## Expose Spinnaker services
+
+If you haven't included a patch to expose Armory CD services, you need to `port-forward` to access the Armory CD UI and API.
+
+Expose Deck for the UI:
+
+```bash
+kubectl port-forward svc/spin-deck 9000:9000 -n spinnaker
+```
+
+Expose Gate for the API:
+
+```bash
+kubectl port-forward svc/spin-gate 8084:8084 -n spinnaker
+```
+
+## Advanced configuration
+
+
+
+`spinnaker-patches-repo/recipes/kustomization-all.yml` contains many examples of advanced configuration.
+
+## Help resources
+
+* Contact [Armory Support](https://support.armory.io/) or use the [Spinnaker Slack](https://join.spinnaker.io/) `#armory` channel.
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/op-troubleshooting.md" >}}
+
+## {{% heading "nextSteps" %}}
+
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/manage-armorycd.md" >}}
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/op-manage-operator.md" >}}
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/hal-op-migration.md" >}}
+
diff --git a/content/en/continuous-deployment/installation/armory-operator/install-spinnaker.md b/content/en/continuous-deployment/installation/armory-operator/install-spinnaker.md
new file mode 100644
index 0000000000..5740d40ec4
--- /dev/null
+++ b/content/en/continuous-deployment/installation/armory-operator/install-spinnaker.md
@@ -0,0 +1,175 @@
+---
+title: Install Spinnaker using the Spinnaker Operator and Kustomize patches
+linkTitle: Install Spinnaker
+weight: 5
+description: >
+ This guide describes how to deploy a basic Spinnaker instance using the Spinnaker Operator and Kustomize patches. You can use this basic instance for testing or as a starting point for configuring advanced features.
+---
+
+## Why use Kustomize patches for Spinnaker configuration
+
+{{< include "armory-operator/why-use-kustomize.md" >}}
+
+See {{< linkWithTitle "continuous-deployment/installation/armory-operator/hal-op-migration.md" >}} if you have an existing Halyard-managed Spinnaker instance that you want to migrate to management using the Spinnaker Operator.
+
+## Objectives
+
+1. Meet the requirements listed in the [{{% heading "prereq" %}}](#before-you-begin) section.
+1. [Deploy the Spinnaker Operator](#deploy-the-spinnaker-operator).
+1. [Get the spinnaker-kustomize-patches repo](#get-the-spinnaker-kustomize-patches-repo).
+1. [Configure Spinnaker](#configure-spinnaker).
+1. [Deploy Spinnaker](#deploy-spinnaker).
+1. [Port-forward](#port-forward-to-expose-spinnaker-services-locally) to expose Spinnaker services.
+1. Explore [advanced config options](#advanced-config-options)
+
+## {{% heading "prereq" %}}
+
+### How Kustomize works
+
+{{< include "armory-operator/how-kustomize-works.md" >}}
+
+### Kustomize resources
+
+You should familiarize yourself with Kustomize before you create patch files to configure Armory Continuous Deployment.
+
+* Kustomize [Glossary](https://kubectl.docs.kubernetes.io/references/kustomize/glossary/)
+* Kustomize [introduction](https://kubectl.docs.kubernetes.io/guides/introduction/kustomize/)
+* [Kustomization file overview](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/)
+
+### Kubernetes requirements
+
+* You are familiar with [Kubernetes Operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/), which use custom resources to manage applications and their components.
+* You understand the concept of [managing Kubernetes resources using manifests](https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/).
+* You have read how Armory's operator [deploys Spinnaker]({{< ref "/continuous-deployment/installation/armory-operator#how-the-armory-operator-and-the-spinnaker-operator-work" >}}).
+* You have a cluster with at least least 4 cores and 16GB of RAM available.
+
+
+## Deploy the Spinnaker Operator
+
+Decide which Spinnaker Operator release you need based on the compatibility matrix:
+
+{{< include "armory-operator/operator-compat-matrix.md" >}}
+
+{{< tabpane text=true right=true >}}
+{{< tab header="**Operator Mode**:" disabled=true />}}
+{{% tab header="Cluster" text=true %}}
+{{< include "armory-operator/spin-op-install-cluster.md" >}}
+{{% /tab %}}
+{{% tab header="Basic" text=true %}}
+{{< include "armory-operator/spin-op-install-basic.md" >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Get the spinnaker-kustomize-patches repo
+
+{{% include "armory-operator/spin-kust-repo.md" %}}
+
+## Configure Spinnaker
+
+You can find a basic recipe for deploying Spinnaker in `recipes/kustomization-oss-minimum.yml`.
+
+{{< github repo="armory/spinnaker-kustomize-patches" file="/recipes/kustomization-oss-minimum.yml" lang="yaml" options="" >}}
+
+* The `components` [section](https://kubectl.docs.kubernetes.io/guides/config_management/components/)
+ contains paths to directories that define collections of Kubernetes resources.
+* The `patchesStrategicMerge` [section](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patchesstrategicmerge/) contains links to files that contain partial resource definitions. Kustomize uses these patch files to overwrite sections of components or resources, such as the `SpinnakerService` definition.
+* The `patches` [section](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patches/) is a list of files that Kustomize executes to add or replace fields on resources. The `utilities/switch-to-oss.yml` patch instructs Kustomize to replace `apiVersion: spinnaker.armory.io/v1alpha2` with `apiVersion: spinnaker.io/v1alpha2` in the SpinnakerService manifest.
+
+**What this recipe does**
+
+* Configures MinIO as the persistent storage provider (instead of Redis or cloud storage)
+
+**What this recipe does not do**
+
+* Configure Clouddriver or other services to use a SQL backend
+* Configure a LoadBalancer to expose Spinnaker services
+
+### Spinnaker version
+
+To change the Spinnaker version, update `spec.spinnakerConfig.config.version` in `core/patches/oss-version.yml`.
+
+### Secrets
+
+If you want to store Armory CD secrets in Kubernetes, you should use a [Kustomize `secretGenerator`](https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kustomize/) and define your secrets in the kustomization file for your component.
+
+## Deploy Spinnaker
+
+Execute all commands from the root of `spinnaker-kustomize-patches`.
+
+1. Set the kustomize recipe.
+
+ The `kustomization.yml` file in the project root is a symlink to `recipes/kustomization-all.yml`. Update to point to `recipes/kustomization-oss-minimum.yml`.
+
+ ```bash
+ ln -vfns ./recipes/kustomization-oss-minimum.yml kustomization.yml
+ ```
+
+1. Create the namespace
+
+ ```bash
+ kubectl create ns spinnaker
+ ```
+
+1. (Optional) Verify the Kustomize build output.
+
+ ```bash
+ kubectl kustomize
+ ```
+
+ This prints out the contents of the manifest file that Kustomize built based on your `kustomization.yml` file.
+
+1. Apply the manifest:
+
+ ```bash
+ kubectl apply -k .
+ ```
+
+1. (Optional) Watch installation progress.
+
+ ```bash
+ kubectl -n spinnaker get spinsvc spinnaker -w
+ ```
+
+## Expose Spinnaker services
+
+Because the minimum recipe doesn't expose Spinnaker services, you need to `port-forward` to access the Spinnaker UI and API.
+
+Expose Deck for the UI:
+
+```bash
+kubectl port-forward svc/spin-deck 9000:9000 -n spinnaker
+```
+
+Expose Gate for the API:
+
+```bash
+kubectl port-forward svc/spin-gate 8084:8084 -n spinnaker
+```
+
+Alternately, you can follow your cloud provider's guide for publicly exposing an app.
+
+## Access the Spinnaker UI
+
+If you used `port-forward`, you can access the UI at `http://localhost:9000`.
+
+## Help resources
+
+[Spinnaker Slack](https://join.spinnaker.io/) `#kubernetes-operator` channel.
+
+## Advanced configuration
+
+
+
+`spinnaker-patches-repo/recipes/kustomization-all.yml` contains many examples of advanced configuration.
+
+## Help resources
+
+* Use the [Spinnaker Slack](https://join.spinnaker.io/) `#kubernetes-operator` or `#armory` channel.
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/op-troubleshooting.md" >}}
+
+## {{% heading "nextSteps" %}}
+
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/manage-spinnaker.md" >}}
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/op-manage-operator.md" >}}
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/hal-op-migration.md" >}}
diff --git a/content/en/continuous-deployment/installation/armory-operator/op-manage-spinnaker.md b/content/en/continuous-deployment/installation/armory-operator/manage-armorycd.md
similarity index 59%
rename from content/en/continuous-deployment/installation/armory-operator/op-manage-spinnaker.md
rename to content/en/continuous-deployment/installation/armory-operator/manage-armorycd.md
index 4ad34dc0f8..d29390df91 100644
--- a/content/en/continuous-deployment/installation/armory-operator/op-manage-spinnaker.md
+++ b/content/en/continuous-deployment/installation/armory-operator/manage-armorycd.md
@@ -1,13 +1,13 @@
---
-title: Manage Armory Continuous Deployment using the Operator
-linkTitle: Manage Armory Continuous Deployment
-weight: 15
+title: Manage Armory Continuous Deployment using the Armory Operator
+linkTitle: Manage Armory CD
+weight: 1
description: >
- Manage, upgrade, or uninstall Armory Continuous Deployment or Spinnaker using the Operator.
+ Manage, upgrade, or uninstall Armory Continuous Deployment using the Armory Operator.
+aliases:
+ - /continuous-deployment/installation/armory-operator/op-manage-spinnaker/
---
-{{< include "armory-operator/os-operator-blurb.md">}}
-
## Kubernetes tools
You use [`kubectl`](https://kubernetes.io/docs/reference/kubectl/) to manage the Armory Continuous Deployment or Spinnaker lifecycle like you do with other applications deployed to Kubernetes. For example:
@@ -28,41 +28,22 @@ kubectl -n describe spinsvc spinnaker
Consult the `kubectl` [docs](https://kubernetes.io/docs/reference/kubectl/) for a list of commands.
-## Deploy Armory Continuous Deployment
-
-{{< tabs name="deploy" >}}
-{{% tabbody name="Manifest" %}}
-
-```bash
-kubectl -n apply -f
-```
-
-{{% /tabbody %}}
-{{% tabbody name="Kustomize" %}}
+## Upgrade
-```bash
-kubctl -n apply -k
-```
+{{< tabpane text=true right=true >}}
+{{< tab header="**Method**:" disabled=true />}}
+{{% tab header="Kustomize" text=true %}}
-{{% /tabbody %}}
-{{< /tabs >}}
+Change the `version` value in `spinnaker-kustomize-patches/core/patches/version.yml` to the target version for the upgrade.
-You can watch the installation progress by executing:
+From the root of your `spinnaker-kustomize-patches` directory, apply the update:
```bash
-kubectl -n get spinsvc spinnaker -w
+kubctl -n apply -k .
```
-You can verify pod status by executing:
-
-```bash
- kubectl -n get pods
- ```
-
-## Upgrade Armory Continuous Deployment
-
-{{< tabs name="upgrade" >}}
-{{% tabbody name="Manifest" %}}
+{{% /tab %}}
+{{% tab header="Manifest" text=true %}}
Change the `version` field in your manifest file to the target version for the upgrade:
@@ -82,19 +63,8 @@ Apply the updated manifest:
kubectl -n apply -f
```
-{{% /tabbody %}}
-{{% tabbody name="Kustomize" %}}
-
-Change the `version` field in your Kustomize patch to the target version for the upgrade.
-
-Apply the update:
-
-```bash
-kubctl -n apply -k
-```
-
-{{% /tabbody %}}
-{{< /tabs >}}
+{{% /tab %}}
+{{< /tabpane >}}
You can view the upgraded services starting up by executing `describe`:
@@ -117,10 +87,21 @@ spinnaker 2.20.2
`VERSION` should reflect the target version for your upgrade.
-## Rollback Armory Continuous Deployment
+## Rollback
+{{< tabpane text=true right=true >}}
+{{< tab header="**Method**:" disabled=true />}}
+{{% tab header="Kustomize" text=true %}}
+
+Change the `version` value in `spinnaker-kustomize-patches/core/patches/version.yml` to the target version for the upgrade.
+
+From the root of your `spinnaker-kustomize-patches` directory, apply the update:
+
+```bash
+kubctl -n apply -k .
+```
-{{< tabs name="rollback" >}}
-{{% tabbody name="Manifest" %}}
+{{% /tab %}}
+{{% tab header="Manifest" text=true %}}
Change the `version` field in your manifest file to the target version for the rollback:
@@ -140,19 +121,8 @@ Apply the updated manifest:
kubectl -n apply -f
```
-{{% /tabbody %}}
-{{% tabbody name="Kustomize" %}}
-
-Change the `version` field in your Kustomize patch to the target version for the rollback.
-
-Apply the update:
-
-```bash
-kubctl -n apply -k
-```
-
-{{% /tabbody %}}
-{{< /tabs >}}
+{{% /tab %}}
+{{< /tabpane >}}
You can view the rolled back services starting up by executing `describe`:
@@ -176,12 +146,14 @@ spinnaker 2.27.2
`VERSION` should reflect the target version for your rollback.
-## Delete Armory Continuous Deployment
+## Remove
```bash
kubectl -n delete spinnakerservice spinnaker
```
+
+
## Help resources
{{% include "armory-operator/help-resources.md" %}}
diff --git a/content/en/continuous-deployment/installation/armory-operator/manage-spinnaker.md b/content/en/continuous-deployment/installation/armory-operator/manage-spinnaker.md
new file mode 100644
index 0000000000..830f52f044
--- /dev/null
+++ b/content/en/continuous-deployment/installation/armory-operator/manage-spinnaker.md
@@ -0,0 +1,58 @@
+---
+title: Manage Spinnaker using the Spinnaker Operator
+linkTitle: Manage Spinnaker
+weight: 5
+description: >
+ Manage, upgrade, or uninstall Spinnaker using the Spinnaker Operator for Kubernetes.
+---
+
+## Kubernetes tools
+
+You use [`kubectl`](https://kubernetes.io/docs/reference/kubectl/) to manage the Armory Continuous Deployment or Spinnaker lifecycle like you do with other applications deployed to Kubernetes. For example:
+
+**List instances**
+
+```bash
+kubectl get spinnakerservice --all-namespaces
+```
+
+**Describe instances**
+
+You can use `spinsvc` instead of `spinnakerservice`:
+
+```bash
+kubectl -n describe spinsvc spinnaker
+```
+
+Consult the `kubectl` [docs](https://kubernetes.io/docs/reference/kubectl/) for a list of commands.
+
+## Upgrade
+
+Change the `version` value in `spinnaker-kustomize-patches/core/patches/oss-version.yml` to the target version for the upgrade.
+
+From the root of your `spinnaker-kustomize-patches` directory, apply the update:
+
+```bash
+kubctl -n apply -k .
+```
+
+## Rollback
+
+Change the `version` value in `spinnaker-kustomize-patches/core/patches/oss-version.yml` to the target version for the upgrade.
+
+From the root of your `spinnaker-kustomize-patches` directory, apply the update:
+
+```bash
+kubctl -n apply -k .
+```
+
+## Remove
+
+```bash
+kubectl -n delete spinnakerservice spinnaker
+```
+
+## Help resources
+
+* Use the [Spinnaker Slack](https://join.spinnaker.io/) `#kubernetes-operator` or `#armory` channel.
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/op-troubleshooting.md" >}}
diff --git a/content/en/continuous-deployment/installation/armory-operator/op-advanced-config.md b/content/en/continuous-deployment/installation/armory-operator/op-advanced-config.md
index 4593e0593a..4fcc6f347d 100644
--- a/content/en/continuous-deployment/installation/armory-operator/op-advanced-config.md
+++ b/content/en/continuous-deployment/installation/armory-operator/op-advanced-config.md
@@ -1,7 +1,7 @@
---
title: Advanced Operator Configuration
-linkTitle: Advanced Operator Config
-weight: 80
+linkTitle: Operator Config
+weight: 10
description: >
Learn how to configure the Armory Operator for specialized use cases.
aliases:
diff --git a/content/en/continuous-deployment/installation/armory-operator/op-config-kustomize.md b/content/en/continuous-deployment/installation/armory-operator/op-config-kustomize.md
index fb43bf4cbb..510cb2052b 100644
--- a/content/en/continuous-deployment/installation/armory-operator/op-config-kustomize.md
+++ b/content/en/continuous-deployment/installation/armory-operator/op-config-kustomize.md
@@ -4,6 +4,7 @@ linkTitle: Config Using Kustomize
weight: 5
description: >
This guide describes how to configure Armory Continuous Deployment or Spinnaker using Kustomize patches.
+draft: true
---
{{< include "armory-operator/os-operator-blurb.md">}}
@@ -112,9 +113,7 @@ spec:
### Verify resources
-Read each file linked to from your chosen `kustomization.yml` file section to
-make sure that the Kubernetes resource as configured works with your
-environment.
+Read each file linked to from your chosen `kustomization.yml` file section to make sure that the Kubernetes resource as configured works with your environment.
### Verify patches
diff --git a/content/en/continuous-deployment/installation/armory-operator/op-config-manifest.md b/content/en/continuous-deployment/installation/armory-operator/op-config-manifest.md
index a6e1cdc9f3..db7b552b5a 100644
--- a/content/en/continuous-deployment/installation/armory-operator/op-config-manifest.md
+++ b/content/en/continuous-deployment/installation/armory-operator/op-config-manifest.md
@@ -7,6 +7,7 @@ aliases:
- /installation/armory-operator/op-manifest-reference/operator-config
description: >
This guide describes the fields in the `SpinnakerService` manifest that the the Armory Operator uses to deploy Armory Continuous Deployment or the Spinnaker Operator uses to deploy Spinnaker.
+draft: true
---
{{< include "armory-operator/os-operator-blurb.md" >}}
diff --git a/content/en/continuous-deployment/installation/armory-operator/op-manage-operator.md b/content/en/continuous-deployment/installation/armory-operator/op-manage-operator.md
index 29bd5625dd..5044ac2a5e 100644
--- a/content/en/continuous-deployment/installation/armory-operator/op-manage-operator.md
+++ b/content/en/continuous-deployment/installation/armory-operator/op-manage-operator.md
@@ -1,13 +1,46 @@
---
-title: Manage Operator
-linkTitle: Manage Operator
-weight: 50
+title: Install or Upgrade the Armory Operator or Spinnaker Operator
+linkTitle: Install/Upgrade Operator
+weight: 10
description: >
- Manage, upgrade, or uninstall the Armory Operator.
+ Install, upgrade, or uninstall the Armory Operator or Spinnaker Operator.
---
{{< include "armory-operator/os-operator-blurb.md" >}}
+## Compatibility matrix
+
+{{< include "armory-operator/operator-compat-matrix.md" >}}
+
+## Install the Armory Operator
+
+Decide which Armory Operator release you need based on the compatibility matrix and then follow the directions for [cluster mode or basic mode]({{< ref "continuous-deployment/installation/armory-operator#operator-installation-modes" >}}).
+
+{{< tabpane text=true right=true >}}
+{{< tab header="**Operator Mode**:" disabled=true />}}
+{{% tab header="Cluster" text=true %}}
+{{< include "armory-operator/armory-op-install-cluster.md" >}}
+{{% /tab %}}
+{{% tab header="Basic" text=true %}}
+{{< include "armory-operator/armory-op-install-basic.md" >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+## Install the Spinnaker Operator
+
+Decide which Spinnaker Operator release you need based on the compatibility matrix and then follow the directions for [cluster mode or basic mode]({{< ref "continuous-deployment/installation/armory-operator#operator-installation-modes" >}}).
+
+{{< tabpane text=true right=true >}}
+{{< tab header="**Operator Mode**:" disabled=true />}}
+{{% tab header="Cluster" text=true %}}
+{{< include "armory-operator/spin-op-install-cluster.md" >}}
+{{% /tab %}}
+{{% tab header="Basic" text=true %}}
+{{< include "armory-operator/spin-op-install-basic.md" >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
## Upgrade the Operator
>Do not manually change Docker image tags in your existing manifest files. Operator computes the compatible Halyard version, so manually updating image tags is an **unsupported** upgrade method and may cause issues.
@@ -18,27 +51,27 @@ Use the `kubectl replace` command to replace your Operator deployment. See the `
**Armory Operator**
- In the following command, replace `` with the specific version or "latest" for the most recent version.
+ In the following command, replace `` with the specific version or "latest" for the most recent version.
```bash
- bash -c 'curl -L https://github.com/armory-io/spinnaker-operator/releases/download//manifests.tgz | tar -xz'
+ bash -c 'curl -L https://github.com/armory-io/spinnaker-operator/releases/download//manifests.tgz | tar -xz'
```
**Spinnaker Operator**
- In the following command, replace `` with the specific version or "latest" for the most recent version.
+ In the following command, replace `` with the specific version or "latest" for the most recent version.
```bash
- bash -c 'curl -L https://github.com/armory/spinnaker-operator/releases/download//manifests.tgz | tar -xz'
+ bash -c 'curl -L https://github.com/armory/spinnaker-operator/releases/download//manifests.tgz | tar -xz'
```
-1. Update CRDs across the cluster:
+1. Update CRDs across the cluster using `kubectl replace`:
```bash
kubectl replace -f deploy/crds/
```
-1. Update the Operator:
+1. Update the Operator using `kubectl replace`:
```bash
kubectl -n spinnaker-operator replace -f deploy/operator/cluster
diff --git a/content/en/continuous-deployment/installation/armory-operator/op-manifest-reference/_index.md b/content/en/continuous-deployment/installation/armory-operator/op-manifest-reference/_index.md
index e365c31ee9..2cf0ab9f7f 100644
--- a/content/en/continuous-deployment/installation/armory-operator/op-manifest-reference/_index.md
+++ b/content/en/continuous-deployment/installation/armory-operator/op-manifest-reference/_index.md
@@ -6,4 +6,511 @@ description: >
This section describes the fields in the `SpinnakerService` manifest that the Operator uses to deploy Armory Continuous Deployment for Spinnaker on your Kubernetes cluster.
aliases:
- /operator_reference/
+ - /continuous-deployment/installation/armory-operator/op-config-manifest/
---
+
+## Kubernetes manifest file
+
+{{< include "armory-operator/os-operator-blurb.md" >}}
+
+The structure of the manifest file is the same whether you are using the Armory Operator or the Spinnaker Operator. The value of certain keys, though, depends on whether you are deploying Armory Continuous Deployment or Spinnaker. The following snippet is the first several lines from a `spinnakerservice.yml` manifest that deploys Armory Continuous Deployment.
+
+{{< prism lang="yaml" line="1,8" >}}
+apiVersion: spinnaker.armory.io/{{< param "operator-extended-crd-version" >}}
+kind: SpinnakerService
+metadata:
+ name: spinnaker
+spec:
+ spinnakerConfig:
+ config:
+ version:
+ persistentStorage:
+ persistentStoreType: s3
+ s3:
+ bucket:
+ rootFolder: front50
+{{< /prism >}}
+
+* Line 1: `apiVersion` is the CRD version of the `SpinnakerService` custom resource.
+ * If you are deploying Armory Continuous Deployment, the value is `spinnaker.armory.io/{{< param "operator-extended-crd-version" >}}`; if you change this value, the Armory Operator won't process the manifest file.
+ * If you are deploying Spinnaker, the value is `spinnaker.io/{{< param "operator-oss-crd-version" >}}`; if you change this value, the Spinnaker Operator won't process the manifest file.
+* Line 8: `spec.spinnakerConfig.config.version`
+ * If you are using the Armory Operator, this is the [version of Armory Continuous Deployment]({{< ref "rn-armory-spinnaker" >}}) you want to deploy; for example, {{< param "armory-version-exact" >}}.
+ * If you are using the Spinnaker Operator, this is the [version of Spinnaker](https://spinnaker.io/community/releases/versions/) you want to deploy; for example, `1.25`.
+
+
+Expand to see a skeleton manifest file
+
+This file is from the public `armory/spinnaker-operator` [repo](https://github.com/armory/spinnaker-operator/blob/master/deploy/spinnaker/complete/spinnakerservice.yml). You use this file to configure and deploy Spinnaker. Note that the `apiVersion` is the SpinnakerService CRD used by the Spinnaker Operator.
+
+{{< github repo="armory/spinnaker-operator" file="/deploy/spinnaker/complete/spinnakerservice.yml" lang="yaml" options="" >}}
+
+
+
+## Manifest sections
+
+
+### metadata.name
+
+```yaml
+apiVersion: apiVersion: spinnaker.armory.io/{{< param "operator-extended-crd-version" >}}
+kind: SpinnakerService
+metadata:
+ name: spinnaker
+```
+
+`metadata.name` is the name of your Armory Continuous Deployment service. Use this name to view, edit, or delete Armory Continuous Deployment. The following example uses the name `prod`:
+
+```bash
+$ kubectl get spinsvc prod
+```
+
+Note that you can use `spinsvc` for brevity. You can also use `spinnakerservices.spinnaker.armory.io` (Armory Continuous Deployment) or `spinnakerservices.spinnaker.io` (Spinnaker).
+
+### spec.spinnakerConfig
+
+Contains the same information as the `deploymentConfigurations` entry in a Halyard configuration.
+
+For example, given the following `~/.hal/config` file:
+
+```yaml
+currentDeployment: default
+deploymentConfigurations:
+- name: default
+ version: 2.17.1
+ persistentStorage:
+ persistentStoreType: s3
+ s3:
+ bucket: mybucket
+ rootFolder: front50
+```
+
+The equivalent of that Halyard configuration is the following `spec.spinnakerConfig`:
+
+```yaml
+apiVersion: apiVersion: spinnaker.armory.io/{{< param "operator-extended-crd-version" >}}
+kind: SpinnakerService
+metadata:
+ name: spinnaker
+spec:
+ spinnakerConfig:
+ config:
+ version: 2.17.1
+ persistentStorage:
+ persistentStoreType: s3
+ s3:
+ bucket: mybucket
+ rootFolder: front50
+```
+
+`spec.spinnakerConfig.config` contains the following sections:
+
+* [armory]({{< ref "armory" >}}) ![Proprietary](/images/proprietary.svg)
+* [artifact]({{< ref "artifact" >}})
+* [canary]({{< ref "canary-op-config" >}})
+* [ci]({{< ref "ci" >}})
+* [deploymentEnvironment]({{< ref "continuous-deployment/installation/armory-operator/op-manifest-reference/deploy" >}})
+* [features]({{< ref "features" >}})
+* [metricStores]({{< ref "metricstores" >}})
+* [notification]({{< ref "notification" >}})
+* [persistentStorage]({{< ref "persistent-storage" >}})
+* [plugins]({{< ref "plugins" >}})
+* [providers]({{< ref "providers" >}})
+* [pubsub]({{< ref "pubsub" >}})
+* [repository]({{< ref "repository" >}})
+* [security]({{< ref "continuous-deployment/installation/armory-operator/op-manifest-reference/security" >}})
+* [stats]({{< ref "stats" >}})
+* [webhook]({{< ref "op-webhook" >}})
+
+### spec.spinnakerConfig.profiles
+
+Configuration for each service profile. This is the equivalent of `~/.hal/default/profiles/-local.yml`. For example the following `profile` is for Gate:
+
+```yaml
+spec:
+ spinnakerConfig:
+ config:
+ ...
+ profiles:
+ gate:
+ default:
+ apiPort: 8085
+```
+Note that for Deck, the profile is a string under the key `settings-local.js`:
+
+```yaml
+spec:
+ spinnakerConfig:
+ config:
+ ...
+ profiles:
+ deck:
+ settings-local.js: |
+ window.spinnakerSettings.feature.artifactsRewrite = true;
+```
+
+### spec.spinnakerConfig.service-settings
+
+Settings for each service. This is the equivalent of `~/.hal/default/service-settings/.yml`. For example the following settings are for Clouddriver:
+
+```yaml
+spec:
+ spinnakerConfig:
+ config:
+ ...
+ service-settings:
+ clouddriver:
+ kubernetes:
+ serviceAccountName: spin-sa
+```
+
+### spec.spinnakerConfig.files
+
+Contents of any local files that should be added to the services. For example to reference the contents of a kubeconfig file:
+
+```yaml
+spec:
+ spinnakerConfig:
+ config:
+ providers:
+ kubernetes:
+ enabled: true
+ accounts:
+ - name: cluster-1
+ kubeconfigFile: cluster1-kubeconfig
+ ...
+ files:
+ cluster1-kubeconfig: |
+
+```
+
+A double underscore (`__`) in the file name is translated to a path separator (`/`). For example to add custom packer templates:
+
+```yaml
+ files: {}
+ profiles__rosco__packer__example-packer-config.json: |
+ {
+ "packerSetting": "someValue"
+ }
+ profiles__rosco__packer__my_custom_script.sh: |
+ #!/bin/bash -e
+ echo "hello world!"
+```
+
+### spec.expose
+Optional. Controls how Armory Continuous Deploymentgets exposed. If you omit it, no load balancer gets created. If this section gets removed, the Load Balancer does not get deleted.
+
+Use the following configurations:
+
+- `spec.expose.type`: How Armory Continuous Deploymentgets exposed. Currently, only `service` is supported, which uses Kubernetes services to expose Spinnaker.
+- `spec.expose.service`: Service configuration
+- `spec.expose.service.type`: Should match a valid Kubernetes service type (i.e. `LoadBalancer`, `NodePort`, or `ClusterIP`).
+- `spec.expose.service.annotations`: Map containing annotations to be added to Gate (API) and Deck (UI) services.
+- `spec.expose.service.overrides`: Map with key for overriding the service type and specifying extra annotations: Armory Continuous Deploymentservice name (Gate or Deck) and value. By default, all services receive the same annotations. You can override annotations for a Deck (UI) or Gate (API) services.
+
+### spec.validation
+
+**Currently these configurations are experimental. By default, the Operator always validates Kubernetes accounts when applying a SpinnakerService manifest.**
+
+Validation options that apply to all validations that Operator performs:
+
+- `spec.validation.failOnError`: Boolean. Defaults to true. If false, the validation runs and the results are logged, but the service is always considered valid.
+- `spec.validation.failFast`: Boolean. Defaults to false. If true, validation stops at the first error.
+- `spec.validation.frequencySeconds`: Optional. Integer. Define a grace period before a validation runs again. For example, if you specify a value of `120` and edit the `SpinnakerService` without changing an account within a 120 second window, the validation on that account does not run again.
+
+Additionally, the following settings are specific to Kubernetes, Docker, AWS, AWS S3, CI tools, metric stores, persistent storage, or notification systems:
+- `spec.validation.providers.kubernetes`
+- `spec.validation.providers.docker`
+- `spec.validation.providers.aws`
+- `spec.validation.providers.s3`
+- `spec.validation.providers.ci`
+- `spec.validation.providers.metricStores`
+- `spec.validation.providers.persistentStorage`
+- `spec.validation.providers.notifications`
+
+Supported settings are `enabled` (set to false to turn off validations), `failOnError`, and `frequencySeconds`.
+
+The following example disables all Kubernetes account validations:
+```yaml
+spec:
+ validation:
+ providers:
+ kubernetes:
+ enabled: false
+```
+### spec.accounts
+
+Support for `SpinnakerAccount` CRD (**Experimental**):
+
+- `spec.accounts.enabled`: Boolean. Defaults to false. If true, the `SpinnakerService` uses all `SpinnakerAccount` objects enabled.
+- `spec.accounts.dynamic` (experimental): Boolean. Defaults to false. If true, `SpinnakerAccount` objects are available to Armory Continuous Deployment as the account is applied (without redeploying any service).
+
+## Example Manifests for exposing Armory Continuous Deployment
+
+### Load balancer Services
+
+```yaml
+spec:
+ expose:
+ type: service
+ service:
+ type: LoadBalancer
+ annotations:
+ "service.beta.kubernetes.io/aws-load-balancer-backend-protocol": "http"
+ "service.beta.kubernetes.io/aws-load-balancer-ssl-ports": "80,443"
+ "service.beta.kubernetes.io/aws-load-balancer-ssl-cert": "arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+```
+
+The preceding manifest generates these two services:
+
+*spin-deck*
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
+ service.beta.kubernetes.io/aws-load-balancer-ssl-ports: 80,443
+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert": arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ labels:
+ app: spin
+ cluster: spin-deck
+ name: spin-deck
+spec:
+ ports:
+ - name: deck-tcp
+ nodePort: xxxxx
+ port: 9000
+ protocol: TCP
+ targetPort: 9000
+ selector:
+ app: spin
+ cluster: spin-deck
+ sessionAffinity: None
+ type: LoadBalancer
+```
+
+*spin-gate*
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
+ service.beta.kubernetes.io/aws-load-balancer-ssl-ports: 80,443
+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert": arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ labels:
+ app: spin
+ cluster: spin-gate
+ name: spin-gate
+spec:
+ ports:
+ - name: gate-tcp
+ nodePort: xxxxx
+ port: 8084
+ protocol: TCP
+ targetPort: 8084
+ selector:
+ app: spin
+ cluster: spin-gate
+ sessionAffinity: None
+ type: LoadBalancer
+```
+
+
+### Different service types for Deck (UI) and Gate (API)
+
+```yaml
+spec:
+ expose:
+ type: service
+ service:
+ type: LoadBalancer
+ annotations:
+ "service.beta.kubernetes.io/aws-load-balancer-backend-protocol": "http"
+ "service.beta.kubernetes.io/aws-load-balancer-ssl-ports": "80,443"
+ "service.beta.kubernetes.io/aws-load-balancer-ssl-cert": "arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ overrides:
+ gate:
+ type: NodePort
+```
+
+The preceding manifest generates these two services:
+
+*spin-deck*
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
+ service.beta.kubernetes.io/aws-load-balancer-ssl-ports: 80,443
+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert": arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ labels:
+ app: spin
+ cluster: spin-deck
+ name: spin-deck
+ spec:
+ ports:
+ - name: deck-tcp
+ nodePort: xxxxx
+ port: 9000
+ protocol: TCP
+ targetPort: 9000
+ selector:
+ app: spin
+ cluster: spin-deck
+ sessionAffinity: None
+ type: LoadBalancer
+```
+
+*spin-gate*
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
+ service.beta.kubernetes.io/aws-load-balancer-ssl-ports: 80,443
+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert": arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ labels:
+ app: spin
+ cluster: spin-gate
+ name: spin-gate
+spec:
+ ports:
+ - name: gate-tcp
+ nodePort: xxxxx
+ port: 8084
+ protocol: TCP
+ targetPort: 8084
+ selector:
+ app: spin
+ cluster: spin-gate
+ sessionAffinity: None
+ type: NodePort
+```
+
+### Different annotations for Deck (UI) and Gate (API)
+
+```yaml
+spec:
+ expose:
+ type: service
+ service:
+ type: LoadBalancer
+ annotations:
+ "service.beta.kubernetes.io/aws-load-balancer-backend-protocol": "http"
+ "service.beta.kubernetes.io/aws-load-balancer-ssl-ports": "80,443"
+ "service.beta.kubernetes.io/aws-load-balancer-ssl-cert": "arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ overrides:
+ gate:
+ annotations:
+ "service.beta.kubernetes.io/aws-load-balancer-internal": "true"
+```
+
+The preceding manifest file generates these two services:
+
+*spin-deck*
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
+ service.beta.kubernetes.io/aws-load-balancer-ssl-ports: 80,443
+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert": arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ labels:
+ app: spin
+ cluster: spin-deck
+ name: spin-deck
+spec:
+ ports:
+ - name: deck-tcp
+ nodePort: xxxxx
+ port: 9000
+ protocol: TCP
+ targetPort: 9000
+ selector:
+ app: spin
+ cluster: spin-deck
+ sessionAffinity: None
+ type: LoadBalancer
+```
+
+*spin-gate*
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
+ service.beta.kubernetes.io/aws-load-balancer-ssl-ports: 80,443
+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert": arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ service.beta.kubernetes.io/aws-load-balancer-internal: true
+ labels:
+ app: spin
+ cluster: spin-gate
+ name: spin-gate
+spec:
+ ports:
+ - name: gate-tcp
+ nodePort: xxxxx
+ port: 8084
+ protocol: TCP
+ targetPort: 8084
+ selector:
+ app: spin
+ cluster: spin-gate
+ sessionAffinity: None
+ type: Loadbalancer
+```
+## X509
+
+```yaml
+spec:
+ config:
+ profiles:
+ gate:
+ default:
+ apiPort: 8085
+ expose:
+ type: service
+ service:
+ type: LoadBalancer
+
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
+
+ overrides:
+ # Provided below is the example config for the Gate-X509 configuration
+ deck:
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
+ gate:
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: https # X509 requires https from LoadBalancer -> Gate
+ gate-x509:
+ annotations:
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert: null
+ publicPort: 443
+```
+
+## Help resources
+
+{{% include "armory-operator/help-resources.md" %}}
+
+## {{% heading "nextSteps" %}}
+
+* Configure Kubernetes accounts using the {{< linkWithTitle "op-spin-account-crd.md" >}} (Experimental)
+
+
diff --git a/content/en/continuous-deployment/installation/armory-operator/op-quickstart.md b/content/en/continuous-deployment/installation/armory-operator/op-quickstart.md
index a55d98a53a..8cde0e04d2 100644
--- a/content/en/continuous-deployment/installation/armory-operator/op-quickstart.md
+++ b/content/en/continuous-deployment/installation/armory-operator/op-quickstart.md
@@ -1,13 +1,12 @@
---
title: Install Operator and Deploy Armory Continuous Deployment Quickstart
-linkTitle: Quickstart
+linkTitle: Armory CD Quickstart Orig
weight: 1
description: >
Install the Operator, create a Kubernetes manifest for Armory Continuous Deployment or Spinnaker, and then deploy using the Operator.
+draft: true
---
-{{< include "armory-operator/os-operator-blurb.md" >}}
-
## {{% heading "prereq" %}}
The goal of this guide is to deploy Armory Continuous Deployment with bare minimum configuration. The [What's next](#whats-next) section contains links to advanced configuration guides.
@@ -20,42 +19,22 @@ the supported combinations of Kubernetes, Operator, and Armory Continuous Deploy
{{< include "armory-operator/operator-compat-matrix.md" >}}
-## Operator installation options
-
-The Operator has `basic` and `cluster` installation modes. The option you use depends on which namespace you want to deploy Armory Continuous Deployment or Spinnaker to.
-
-
-| |Basic Mode | Cluster Mode |
-|:-------------------------------------------------------- |:------------------:|:---------------:|
-| Must deploy Armory Continuous Deployment in the same namespace as the Operator; permissions scoped to single namespace; suitable for a Proof of Concept (POC) | ✅ | ❌ |
-| Can deploy Armory Continuous Deployment to multiple namespaces (requires Kubernetes ClusterRole) | ❌ | ✅ |
-| Configure Armory Continuous Deployment using a single manifest file | ✅ | ✅ |
-| Configure Armory Continuous Deployment using Kustomize patches | ✅ | ✅ |
-| Perform pre-flight checks to prevent misconfiguration | ❌ | ✅ |
-
-
-
## {{% heading "installOperator" %}}
-{{< tabs name="install-operator" >}}
-{{% tabbody name="Cluster Mode"%}}
-{{% include "armory-operator/op-install-cluster.md" %}}
-{{% /tabbody %}}
-{{% tabbody name="Basic Mode"%}}
-{{% include "armory-operator/op-install-basic.md" %}}
-{{% /tabbody %}}
-{{< /tabs >}}
+{{< tabpane text=true right=true >}}
+ {{< tab header="**Mode**:" disabled=true />}}
+ {{% tab header="Cluster" text=true %}}
+ {{< include "armory-operator/armory-op-install-cluster.md" >}}
+ {{% /tab %}}
+ {{% tab header="Basic" text=true %}}
+ {{< include "armory-operator/armory-op-install-basic.md" >}}
+ {{% /tab %}}
+{{< /tabpane >}}
## Deploy an Armory Continuous Deployment instance
### Single manifest file option
-{{< tabs name="deploy-spinnaker-manifest" >}}
-
-{{% tabbody name="Armory Continuous Deployment"%}}
-
-![Proprietary](/images/proprietary.svg)
-
You can find the `SpinnakerService.yml` manifest file in `/spinnaker-operator/deploy/spinnaker/basic/`. You need to specify persistent storage details and the version to deploy before you can use the manifest to deploy Armory Continuous Deployment.
The following example uses an AWS S3 bucket. You can find configuration for other storage types in the [Persistent Storage]({{< ref "persistent-storage" >}}) reference.
@@ -93,46 +72,6 @@ kubectl create ns spinnaker
kubectl -n spinnaker apply -f deploy/spinnaker/basic/SpinnakerService.yml
```
-{{% /tabbody %}}
-{{% tabbody name="Spinnaker"%}}
-
-You can find the basic `spinnakerservice.yml` manifest file in `/spinnaker-operator/deploy/spinnaker/basic/`.
-
-You need to specify persistent storage details and the version to deploy before you can use the manifest to deploy Spinnaker. The following example uses an AWS S3 bucket. You can find configuration for other storage types in the [Persistent Storage]({{< ref "persistent-storage" >}}) reference.
-
-You can see the list of Spinnaker versions on the Spinnaker [Versions](https://spinnaker.io/community/releases/versions/) page.
-
-```yaml
-apiVersion: spinnaker.io/{{< param "operator-oss-crd-version" >}}
-kind: SpinnakerService
-metadata:
- name: spinnaker
-spec:
- spinnakerConfig:
- config:
- version: # the version of Spinnaker to deploy
- persistentStorage:
- persistentStoreType: s3
- s3:
- bucket: # Spinnaker stores application and pipeline definitions here. Create an S3 bucket and provide the name here.
- rootFolder: front50
- # spec.expose - This section defines how Spinnaker should be publicly exposed
- expose:
- type: service # Kubernetes LoadBalancer type (service/ingress), note: only "service" is supported for now
- service:
- type: LoadBalancer
-```
-
-Deploy using `kubectl`:
-
-```bash
-kubectl create ns spinnaker
-kubectl -n spinnaker apply -f deploy/spinnaker/basic/spinnakerservice.yml
-```
-
-{{% /tabbody %}}
-{{< /tabs >}}
-
You can watch the installation progress by executing:
```bash
@@ -148,74 +87,6 @@ You can verify pod status by executing:
The included manifest file is only for a very basic installation.
{{< linkWithTitle "op-config-manifest.md" >}} contains detailed manifest configuration options.
-### Kustomize patches option
-
-> This example assumes you deploy Armory Continuous Deployment to the `spinnaker-operator` namespace.
-
-{{< include "armory-operator/how-kustomize-works.md" >}}
-
-{{% include "armory-operator/kust-ver-note.md" %}}
-
-For this quickstart, you can find bare minimum patches in `/spinnaker-operator/deploy/spinnaker/kustomize`. Before you deploy Armory Continuous Deployment, you need to update the `version` and `persistentStorage` values in `config-patch.yml`.
-
-The following example uses an AWS S3 bucket. You can find configuration for other storage types in the [Persistent Storage]({{< ref "persistent-storage" >}}) reference.
-
->This quickstart example is suitable for a proof of concept. For production environments, you should use a robust set of Kustomize patches. See the [Configure Armory Continuous Deployment Using Kustomize]({{< ref "op-config-Kustomize" >}}) guide for details.
-
-{{< tabs name="deploy-spinnaker-kustomize" >}}
-
-{{% tabbody name="Armory Continuous Deployment"%}}
-![Proprietary](/images/proprietary.svg)
-
-You can see the list of Armory Continuous Deployment versions on the [Release Notes]({{< ref "rn-armory-spinnaker" >}}) page.
-
-```yaml
-apiVersion: spinnaker.armory.io/{{< param "operator-extended-crd-version">}}
-kind: SpinnakerService
-metadata:
- name: spinnaker
-spec:
- # spec.spinnakerConfig - This section is how to specify configuration spinnaker
- spinnakerConfig:
- # spec.spinnakerConfig.config - This section contains the contents of a deployment found in a halconfig .deploymentConfigurations[0]
- config:
- version: # the version of Armory Continuous Deployment to be deployed
- persistentStorage:
- persistentStoreType: s3
- s3:
- bucket: mybucket
- rootFolder: front50
-```
-
-The Armory Operator uses Halyard to deploy Armory Continuous Deployment.
-See [Custom Halyard Configuration]({{< ref "op-advanced-config.md" >}}) if you need to modify Halyard so you can use Armory Continuous Deployment features.
-
-{{% /tabbody %}}
-{{% tabbody name="Spinnaker"%}}
-
-You can see the list of Spinnaker versions on the Spinnaker [Versions](https://spinnaker.io/community/releases/versions/) page.
-
-```yaml
-apiVersion: spinnaker.io/{{< param "operator-oss-crd-version" >}}
-kind: SpinnakerService
-metadata:
- name: spinnaker
-spec:
- # spec.spinnakerConfig - This section is how to specify configuration Spinnaker
- spinnakerConfig:
- # spec.spinnakerConfig.config - This section contains the contents of a deployment found in a halconfig .deploymentConfigurations[0]
- config:
- version: # the version of Spinnaker to be deployed
- persistentStorage:
- persistentStoreType: s3
- s3:
- bucket: mybucket
- rootFolder: front50
-```
-
-{{% /tabbody %}}
-{{< /tabs >}}
-
1. If you want to verify the contents of the manifest file, execute from the `/spinnaker-operator/deploy/spinnaker/kustomize/` directory:
```bash
diff --git a/content/en/continuous-deployment/installation/armory-operator/op-spin-account-crd.md b/content/en/continuous-deployment/installation/armory-operator/op-spin-account-crd.md
index 9a6a99357d..ee0184b4f6 100644
--- a/content/en/continuous-deployment/installation/armory-operator/op-spin-account-crd.md
+++ b/content/en/continuous-deployment/installation/armory-operator/op-spin-account-crd.md
@@ -1,7 +1,7 @@
---
title: Spinnaker Accounts CRD
linkTitle: Spinnaker Accounts CRD
-weight: 50
+weight: 20
description: >
Define and manage Kubernetes accounts outside of a manifest file.
---
diff --git a/content/en/continuous-deployment/installation/armory-operator/op-troubleshooting.md b/content/en/continuous-deployment/installation/armory-operator/op-troubleshooting.md
index ea496ae5f0..cc84fb7faa 100644
--- a/content/en/continuous-deployment/installation/armory-operator/op-troubleshooting.md
+++ b/content/en/continuous-deployment/installation/armory-operator/op-troubleshooting.md
@@ -1,6 +1,6 @@
---
title: Errors and Troubleshooting
-weight: 80
+weight: 99
description: "This guide shows which errors are OK to ignore, how to troubleshoot Operator installation and manifest deployment, and where to ask for help."
---
diff --git a/content/en/continuous-deployment/installation/armory-operator/quickstart-armorycd.md b/content/en/continuous-deployment/installation/armory-operator/quickstart-armorycd.md
new file mode 100644
index 0000000000..edf6639386
--- /dev/null
+++ b/content/en/continuous-deployment/installation/armory-operator/quickstart-armorycd.md
@@ -0,0 +1,136 @@
+---
+title: Armory CD Quickstart Script
+linkTitle: Armory CD Quickstart
+weight: 1
+description: >
+ Use an "all-in-one" script to install a basic Armory Continuous Deployment instance for evaluation.
+aliases:
+ - /continuous-deployment/installation/armory-operator/op-quickstart.md
+draft: true
+---
+
+
+
+## Quickstart overview
+
+This guide shows you how to install Armory CD using an install script that deploys the Armory Operator in cluster mode and then Armory CD. This is useful for a proofs of concept, but you should not use this script for a production environment.
+
+## Objectives
+
+1. Meet the requirements listed in the [{{% heading "prereq" %}}](#before-you-begin) section.
+1. [Get the repo](#get-the-repo).
+1. [Configure Armory CD](#configure-armory-cd).
+1. [Deploy Armory CD](#deploy-armory-cd).
+
+## {{% heading "prereq" %}}
+
+* Make sure your environment meets or exceeds Armory CD [system requirements]({{< ref "continuous-deployment/installation/system-requirements" >}}).
+* Make sure your Kubernetes version is compatible with the latest Armory Operator version.
+
+ {{< include "armory-operator/operator-compat-matrix.md" >}}
+
+## Get the repo
+
+{{% include "armory-operator/spin-kust-repo.md" %}}
+
+## Configure Armory CD
+
+You can find a basic recipe for deploying Armory CD in `recipes/kustomization-minimum.yml`.
+
+{{< github repo="armory/spinnaker-kustomize-patches" file="/recipes/kustomization-minimum.yml" lang="yaml" options="" >}}
+
+* The `components` [section](https://kubectl.docs.kubernetes.io/guides/config_management/components/)
+ contains paths to directories that define collections of Kubernetes resources.
+* The `patchesStrategicMerge` [section](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patchesstrategicmerge/) contains links to files that contain partial resource definitions. Kustomize uses these patch files to overwrite sections of components or resources, such as the `SpinnakerService` definition.
+
+### What this recipe does
+
+* Configures MinIO as the persistent storage provider (instead of Redis or cloud storage)
+
+### What this recipe does not do
+
+* Configure Clouddriver or other services to use a SQL backend
+* Configure a LoadBalancer to expose Spinnaker services
+
+### Update recipe symlink
+
+Navigate to the root of your `spinnaker-kustomize-patches` directory. Update the `kustomization.yml` symlink to point to `recipes/kustomization-minimum.yml`:
+
+```bash
+ln -vfns ./recipes/kustomization-minimum.yml kustomization.yml
+```
+
+### Armory CD version
+
+To change the Armory CD version, update `spec.spinnakerConfig.config.version` in `core/patches/version.yml`.
+
+## Deploy Armory CD
+
+The `deploy.sh` script does the following:
+
+* Deploys the latest Armory Operator to the `spinnaker-operator` namespace.
+* Uses the `recipes/kustomization-minimum.yml` recipe to deploy a basic Armory CD instance to the `spinnaker` namespace.
+
+The install process creates the necessary Kubernetes roles and secrets.
+
+{{< tabpane text=true right=true >}}
+{{< tab header="**Environment**:" disabled=true />}}
+{{% tab header="Cloud/Server" text=true %}}
+
+Execute the all-in-one installation script:
+
+```bash
+./deploy.sh
+```
+
+
+{{% /tab %}}
+{{% tab header="Laptop" text=true %}}
+
+If you are installing Armory CD into a cluster running on your laptop, you may have to install the Armory Operator first due to lack of resources.
+
+{{< include "armory-operator/armory-op-install-cluster.md" >}}
+
+After the Armory Operator has successfully deployed, set you can then run the `deploy` script, passing in a parameter to not install the Armory Operator:
+
+```bash
+export SPIN_OP_DEPLOY=0
+./deploy.sh
+```
+{{% /tab %}}
+{{< /tabpane >}}
+
+The script writes output to `deploy_log.txt`.
+
+## Expose Spinnaker services
+
+Because the minimum recipe doesn't expose Spinnaker services, you need to `port-forward` to access the Spinnaker UI and API.
+
+Expose Deck for the UI:
+
+```bash
+kubectl port-forward svc/spin-deck 9000:9000 -n spinnaker
+```
+
+Expose Gate for the API:
+
+```bash
+kubectl port-forward svc/spin-gate 8084:8084 -n spinnaker
+```
+
+Alternately, you can follow your cloud provider's guide for publicly exposing an app.
+
+## Access the Spinnaker UI
+
+If you used `port-forward`, you can access the UI at `http://localhost:9000`.
+
+## Help resources
+
+[Spinnaker Slack](https://join.spinnaker.io/) `#armory` channel.
+
+
+## {{% heading "nextSteps" %}}
+
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/op-manage-spinnaker.md" >}}
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/op-manage-operator.md" >}}
+* {{< linkWithTitle "continuous-deployment/installation/armory-operator/hal-op-migration.md" >}}
\ No newline at end of file
diff --git a/content/en/continuous-deployment/installation/guide/air-gapped/ag-operator.md b/content/en/continuous-deployment/installation/guide/air-gapped/ag-operator.md
index 6a43a48580..e136769779 100644
--- a/content/en/continuous-deployment/installation/guide/air-gapped/ag-operator.md
+++ b/content/en/continuous-deployment/installation/guide/air-gapped/ag-operator.md
@@ -22,7 +22,7 @@ This guide details how you can host the Armory Continuous Deployment Bill of Mat
## {{% heading "prereq" %}}
-* You are familiar with the [Armory Operator]({{< ref "armory-operator" >}}) and [configuring Armory Continuous Deployment using Kustomize patches]({{< ref "op-config-kustomize" >}}).
+* You are familiar with the [Armory Operator]({{< ref "armory-operator" >}}) and [configuring Armory Continuous Deployment using Kustomize patches]({{< ref "continuous-deployment/installation/armory-operator/install-armorycd" >}}).
* You have read the [introduction]({{< ref "air-gapped" >}}) to air-gapped environments.
* You have public internet access.
* You have administrator access to your Kubernetes cluster.
@@ -374,4 +374,4 @@ Contact [Armory Support](https://support.armory.io/) or use the [Spinnaker Slack
## {{% heading "nextSteps" %}}
-[Configure and deploy Armory Continuous Deployment using Kustomize patches]({{< ref "op-config-kustomize#configure-armory-enterprise">}}).
+{{< linkWithTitle "continuous-deployment/installation/armory-operator/install-armorycd.md" >}}
diff --git a/content/en/continuous-deployment/installation/guide/operator-k3s.md b/content/en/continuous-deployment/installation/guide/operator-k3s.md
index 7c9512994b..0e3ee2f876 100644
--- a/content/en/continuous-deployment/installation/guide/operator-k3s.md
+++ b/content/en/continuous-deployment/installation/guide/operator-k3s.md
@@ -4,6 +4,7 @@ linkTitle: Install in AWS EC2 using Operator
weight: 50
description: >
Use the Armory Operator to deploy Spinnaker or Armory Continuous Deployment in a Lightweight Kubernetes (K3s) instance running on an AWS EC2 virtual machine. This environment is for proofs of concept and development.
+draft: true
---
{{< include "armory-license.md" >}}
@@ -12,7 +13,7 @@ description: >
This guide walks you through using the [Armory Operator]({{< ref "armory-operator" >}}) to install Armory Continuous Deployment in a [Lightweight Kubernetes (K3s)](https://k3s.io/) instance running on an AWS EC2 instance. The environment is for POCs and development only. It is **not** meant for production environments.
-See the [Armory Operator Quickstart]({{< ref "op-quickstart" >}}) guide for how to install Armory Continuous Deployment using the Armory Operator in a regular Kubernetes environment.
+See {{< linkWithTitle "continuous-deployment/installation/armory-operator/install-armorycd.md" >}} for how to install Armory Continuous Deployment using the Armory Operator in a regular Kubernetes environment.
If you want to install open source SpinnakerTM, use the open source [Spinnaker Operator](https://github.com/armory/spinnaker-operator) instead of the Armory Operator.
@@ -159,7 +160,7 @@ Install the Armory Operator in _basic_ mode, which installs Armory into a single
Edit the `SpinnakerService.yml` manifest file located in the `~/spinnaker-operator/deploy/spinnaker/basic` directory.
-You can find detailed configuration information in the {{< linkWithTitle "op-config-manifest.md" >}} guide.
+You can find detailed configuration information in {{< linkWithTitle "continuous-deployment/installation/armory-operator/op-manifest-reference/_index.md" >}}.
### Update Armory version and S3 bucket name
diff --git a/content/en/continuous-deployment/installation/minnaker.md b/content/en/continuous-deployment/installation/minnaker.md
deleted file mode 100644
index 9e8ea9cf02..0000000000
--- a/content/en/continuous-deployment/installation/minnaker.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Install Spinnaker on Lightweight Kubernetes using Minnaker
-linkTitle: Minnaker
-weight: 4
-description: >
- Install Spinnaker or Armory Continuous Deployment for Spinnaker in less than 10 minutes in a Lightweight Kubernetes (k3s) environment using the all-in-one, open source command line tool called Minnaker.
----
-
-## Install Spinnaker in 10 minutes using Minnaker
-
-Armory Minnaker is an easy to use installation script that leverages the power of **Kubernetes** with the simplicity of a _Virtual Machine_. Minnaker makes it easy to install Spinnaker and lets you scale your deployment into a medium to large deployment down the road.
-
-The Kubernetes environment that gets installed on your behalf is based on [Rancher's K3s](https://k3s.io/). You do not need to know how to set up Kubernetes. Minnaker takes care of the hard parts for you, allowing you to get Spinnaker up and running in under 10 minutes.
-
-Watch _Spinnaker in 10 minutes or less with Project Minnaker_ for a demo of using Minnaker to install Spinnaker on cloud platforms as well as VMWare Fusion running locally.
-
-
-
-
-### Prerequisites for running Minnaker
-
-Your VM should have 4 vCPUs, 16G of memory and 30G of HDD space.
-
-### Getting started
-
-Check out the [GitHub project](https://github.com/armory/minnaker) for more information. After you install Minnaker, use the [AWS Quick Start]({{< ref "Armory-Spinnaker-Quickstart-1" >}}) to learn how to configure Armory to deploy to AWS.
diff --git a/content/en/continuous-deployment/installation/system-requirements.md b/content/en/continuous-deployment/installation/system-requirements.md
index ab6694dcda..acbdb0e298 100644
--- a/content/en/continuous-deployment/installation/system-requirements.md
+++ b/content/en/continuous-deployment/installation/system-requirements.md
@@ -67,10 +67,7 @@ Armory recommends a minimum of 3 nodes that match the following profile:
## kubectl
-To install and manage Armory Continuous Deployment, Armory recommends using the [Armory Operator with Kustomize]({{< ref "op-config-kustomize" >}}) and tailoring the Kustomize files to meet the requirements of your instance and environment. This installation method supports the following versions of `kubectl`: 1.16 to 1.19.
-
-
-It is possible to use the Operator to [install Armory Continuous Deployment without the Kustomize repo]({{< ref "op-config-manifest" >}}). In that case, any actively maintained version of `kubectl` is supported.
+To install and manage Armory Continuous Deployment, Armory recommends using the [Armory Operator with Kustomize]({{< ref "continuous-deployment/installation/armory-operator/install-armorycd" >}}) and tailoring the Kustomize files to meet the requirements of your instance and environment.
## Networking
diff --git a/content/en/continuous-deployment/release-notes/rn-armory-spinnaker/armoryspinnaker_v2-28-0.md b/content/en/continuous-deployment/release-notes/rn-armory-spinnaker/armoryspinnaker_v2-28-0.md
index f88a0ade5e..bd9ace8a16 100644
--- a/content/en/continuous-deployment/release-notes/rn-armory-spinnaker/armoryspinnaker_v2-28-0.md
+++ b/content/en/continuous-deployment/release-notes/rn-armory-spinnaker/armoryspinnaker_v2-28-0.md
@@ -10,7 +10,7 @@ description: >
## 2022/07/20 Release Notes
-> Note: If you're experiencing production issues after upgrading Spinnaker, rollback to a [previous working version]({{< ref "op-manage-spinnaker#rollback-armory-enterprise" >}}) and please report issues to [http://go.armory.io/support](http://go.armory.io/support).
+> Note: If you're experiencing production issues after upgrading Spinnaker, rollback to a [previous working version]({{< ref "manage-armorycd#rollback-armory-enterprise" >}}) and please report issues to [http://go.armory.io/support](http://go.armory.io/support).
## Required Operator version
diff --git a/content/en/contribute/create/guides/shortcodes/tabs/index.md b/content/en/contribute/create/guides/shortcodes/tabs/index.md
index 050b16025a..74b58b5fb9 100644
--- a/content/en/contribute/create/guides/shortcodes/tabs/index.md
+++ b/content/en/contribute/create/guides/shortcodes/tabs/index.md
@@ -20,10 +20,10 @@ Examples of including markdown files using the armory/docs `include` shortcode.
{{* tabpane text=true right=true >}}
{{< tab header="**Mode**:" disabled=true />}}
{{% tab header="Cluster" text=true %}}
- {{% include "armory-operator/op-install-cluster.md" %}}
+ {{% include "armory-operator/armory-op-install-cluster.md" %}}
{{% /tab %}}
{{% tab header="Basic" text=true %}}
- {{% include "armory-operator/op-install-basic.md" %}}
+ {{% include "armory-operator/armory-op-install-basic.md" %}}
{{% /tab %}}
{{< /tabpane */>}}
```
@@ -32,10 +32,10 @@ Examples of including markdown files using the armory/docs `include` shortcode.
{{< tabpane text=true right=true >}}
{{< tab header="**Mode**:" disabled=true />}}
{{% tab header="Cluster" text=true %}}
- {{% include "armory-operator/op-install-cluster.md" %}}
+ {{% include "armory-operator/armory-op-install-cluster.md" %}}
{{% /tab %}}
{{% tab header="Basic" text=true %}}
- {{% include "armory-operator/op-install-basic.md" %}}
+ {{% include "armory-operator/armory-op-install-basic.md" %}}
{{% /tab %}}
{{< /tabpane >}}
@@ -45,10 +45,10 @@ Examples of including markdown files using the armory/docs `include` shortcode.
{{* tabpane text=true right=true >}}
{{< tab header="**Mode**:" disabled=true />}}
{{% tab header="Cluster" text=true %}}
- {{< include "armory-operator/op-install-cluster.md" >}}
+ {{< include "armory-operator/armory-op-install-cluster.md" >}}
{{% /tab %}}
{{% tab header="Basic" text=true %}}
- {{< include "armory-operator/op-install-basic.md" >}}
+ {{< include "armory-operator/armory-op-install-basic.md" >}}
{{% /tab %}}
{{< /tabpane */>}}
@@ -59,10 +59,10 @@ Examples of including markdown files using the armory/docs `include` shortcode.
{{< tabpane text=true right=true >}}
{{< tab header="**Mode**:" disabled=true />}}
{{% tab header="Cluster" text=true %}}
- {{< include "armory-operator/op-install-cluster.md" >}}
+ {{< include "armory-operator/armory-op-install-cluster.md" >}}
{{% /tab %}}
{{% tab header="Basic" text=true %}}
- {{< include "armory-operator/op-install-basic.md" >}}
+ {{< include "armory-operator/armory-op-install-basic.md" >}}
{{% /tab %}}
{{< /tabpane >}}
@@ -72,10 +72,10 @@ Examples of including markdown files using the armory/docs `include` shortcode.
{{* tabpane text=true right=true >}}
{{< tab header="**Mode**:" disabled=true />}}
{{% tab header="Cluster" text=true %}}
- {{% readfile file="/includes/armory-operator/op-install-cluster.md" %}}
+ {{% readfile file="/includes/armory-operator/armory-op-install-cluster.md" %}}
{{% /tab %}}
{{% tab header="Basic" text=true %}}
- {{% readfile file="/includes/armory-operator/op-install-basic.md" %}}
+ {{% readfile file="/includes/armory-operator/armory-op-install-basic.md" %}}
{{% /tab %}}
{{< /tabpane */>}}
```
@@ -84,10 +84,10 @@ Examples of including markdown files using the armory/docs `include` shortcode.
{{< tabpane text=true right=true >}}
{{< tab header="**Mode**:" disabled=true />}}
{{% tab header="Cluster" text=true %}}
- {{% readfile file="/includes/armory-operator/op-install-cluster.md" %}}
+ {{% readfile file="/includes/armory-operator/armory-op-install-cluster.md" %}}
{{% /tab %}}
{{% tab header="Basic" text=true %}}
- {{% readfile file="/includes/armory-operator/op-install-basic.md" %}}
+ {{% readfile file="/includes/armory-operator/armory-op-install-basic.md" %}}
{{% /tab %}}
{{< /tabpane >}}
@@ -100,7 +100,7 @@ Examples of including markdown files using the armory/docs `include` shortcode.
{{< readfile file="/includes/plugins/scale-agent/api-overview.md" >}}
{{% /tab %}}
{{% tab header="Basic" text=true %}}
- {{< readfile file="/includes/armory-operator/op-install-basic.md" >}}
+ {{< readfile file="/includes/armory-operator/armory-op-install-basic.md" >}}
{{% /tab %}}
{{< /tabpane */>}}
@@ -114,7 +114,7 @@ Examples of including markdown files using the armory/docs `include` shortcode.
{{< readfile "/includes/plugins/scale-agent/api-overview.md" >}}
{{% /tab %}}
{{% tab header="Basic" text=true %}}
- {{< readfile file="/includes/armory-operator/op-install-basic.md" >}}
+ {{< readfile file="/includes/armory-operator/armory-op-install-basic.md" >}}
{{% /tab %}}
{{< /tabpane >}}
diff --git a/content/en/includes/armory-operator/op-install-basic.md b/content/en/includes/armory-operator/armory-op-install-basic.md
similarity index 56%
rename from content/en/includes/armory-operator/op-install-basic.md
rename to content/en/includes/armory-operator/armory-op-install-basic.md
index 0baa7abb0a..dc2d62de49 100644
--- a/content/en/includes/armory-operator/op-install-basic.md
+++ b/content/en/includes/armory-operator/armory-op-install-basic.md
@@ -1,33 +1,26 @@
-Operator in `basic` mode has permissions scoped to a single namespace, so the Operator can't see anything in other namespaces. You must deploy Armory Continuous Deployment to the same namespace as the Operator.
+Operator in `basic` mode has permissions scoped to a single namespace, so the Operator can't see anything in other namespaces. You must deploy Armory Continuous Deployment to the same namespace as the Armory Operator.
-You can find the Operator's deployment configuration in `spinnaker-operator/deploy/operator/basic` after you download and unpack the archive. You don't need to update any configuration values.
+You can find the Armory Operator's deployment configuration in `spinnaker-operator/deploy/operator/basic` after you download and unpack the archive. You don't need to update any configuration values.
-1. Get the latest Operator release:
+1. Download the Armory Operator.
- **Armory Operator** ![Proprietary](/images/proprietary.svg)
+ In the following example, replace `` with a specific release version.
```bash
mkdir -p spinnaker-operator && cd spinnaker-operator
- bash -c 'curl -L https://github.com/armory-io/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz'
+ bash -c 'curl -L https://github.com/armory-io/spinnaker-operator/releases/v/download/manifests.tgz | tar -xz'
```
- **Spinnaker Operator**
-
- ```bash
- mkdir -p spinnaker-operator && cd spinnaker-operator
- bash -c 'curl -L https://github.com/armory/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz'
- ```
-
-1. Install or update CRDs across the cluster:
+1. Install or update CRDs across the cluster.
```bash
kubectl apply -f deploy/crds/
```
-1. Create the namespace for the Operator:
+1. Create the namespace for the Armory Operator.
In `basic` mode, the namespace must be `spinnaker-operator`.
@@ -35,17 +28,17 @@ You can find the Operator's deployment configuration in `spinnaker-operator/depl
kubectl create ns spinnaker-operator
```
-1. Install the Operator:
+1. Install the Armory Operator.
```bash
kubectl -n spinnaker-operator apply -f deploy/operator/basic
```
-1. Verify that the Operator is running:
+1. Verify that the Armory Operator is running.
```bash
- kubectl -n spinnaker-operator get pods
+ kubectl get pods -n spinnaker-operator | grep operator
```
The command returns output similar to the following if the pod for the Operator is running:
diff --git a/content/en/includes/armory-operator/armory-op-install-cluster.md b/content/en/includes/armory-operator/armory-op-install-cluster.md
new file mode 100644
index 0000000000..a1f4c61e27
--- /dev/null
+++ b/content/en/includes/armory-operator/armory-op-install-cluster.md
@@ -0,0 +1,48 @@
+
+You need Kubernetes `ClusterRole` authority to install the Armory Operator in [cluster mode]({{< ref "continuous-deployment/installation/armory-operator#operator-installation-modes" >}}).
+
+You can find the Armory Operator's deployment configuration in `spinnaker-operator/deploy/operator/cluster` after you download and unpack the archive. You don't need to update any configuration values.
+
+1. Download the Armory Operator.
+
+ In the following example, replace `` with a specific release version.
+
+ ```bash
+ mkdir -p spinnaker-operator && cd spinnaker-operator
+ bash -c 'curl -L https://github.com/armory-io/spinnaker-operator/releases/v/download/manifests.tgz | tar -xz'
+ ```
+
+1. Install or update CRDs across the cluster.
+
+ ```bash
+ kubectl apply -f deploy/crds/
+ ```
+
+1. Create the namespace for the Armory Operator.
+
+ In cluster mode, if you want to use a namespace other than `spinnaker-operator`, you need to edit the namespace in `deploy/operator/cluster/role_binding.yaml`.
+
+ ```bash
+ kubectl create ns spinnaker-operator
+ ```
+
+1. Install the Armory Operator.
+
+ ```bash
+ kubectl -n spinnaker-operator apply -f deploy/operator/cluster
+ ```
+
+1. Verify that the Armory Operator is running.
+
+ ```bash
+ kubectl get pods -n spinnaker-operator | grep operator
+ ```
+
+ The command returns output similar to the following if the pod for the Operator is running:
+
+ ```
+ NAMESPACE READY STATUS RESTARTS AGE
+ spinnaker-operator-7cd659654b-4vktl 2/2 Running 0 6s
+ ```
diff --git a/content/en/includes/armory-operator/deploy-spin-kust.md b/content/en/includes/armory-operator/deploy-spin-kust.md
index 6c6e275003..513315f7f4 100644
--- a/content/en/includes/armory-operator/deploy-spin-kust.md
+++ b/content/en/includes/armory-operator/deploy-spin-kust.md
@@ -18,7 +18,7 @@ Once you have configured your patch files, you can deploy Armory Continuous Depl
1. Apply the manifest:
- ```yaml
+ ```bash
kubectl apply -k
```
diff --git a/content/en/includes/armory-operator/k8s-reqs.md b/content/en/includes/armory-operator/k8s-reqs.md
index 11e51d8de3..383c4c1651 100644
--- a/content/en/includes/armory-operator/k8s-reqs.md
+++ b/content/en/includes/armory-operator/k8s-reqs.md
@@ -1,3 +1,4 @@
* You are familiar with [Kubernetes Operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/), which use custom resources to manage applications and their components.
* You understand the concept of [managing Kubernetes resources using manifests](https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/).
-* You have reviewed and met the Armory Continuous Deployment [system requirements]({{< ref "continuous-deployment/installation/system-requirements" >}}).
\ No newline at end of file
+* You have reviewed and met the Armory Continuous Deployment [system requirements]({{< ref "continuous-deployment/installation/system-requirements" >}}).
+
diff --git a/content/en/includes/armory-operator/op-install-cluster.md b/content/en/includes/armory-operator/op-install-cluster.md
deleted file mode 100644
index 2573d95f21..0000000000
--- a/content/en/includes/armory-operator/op-install-cluster.md
+++ /dev/null
@@ -1,55 +0,0 @@
-
-You need Kubernetes `ClusterRole` authority to install the Operator in `cluster` mode.
-
-You can find the Operator's deployment configuration in `spinnaker-operator/deploy/operator/cluster` after you download and unpack the archive. You don't need to update any configuration values.
-
-1. Get the latest Operator release:
-
- **Armory Operator** ![Proprietary](/images/proprietary.svg)
-
- ```bash
- mkdir -p spinnaker-operator && cd spinnaker-operator
- bash -c 'curl -L https://github.com/armory-io/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz'
- ```
-
- **Spinnaker Operator**
-
- ```bash
- mkdir -p spinnaker-operator && cd spinnaker-operator
- bash -c 'curl -L https://github.com/armory/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz'
- ```
-
-1. Install or update CRDs across the cluster:
-
- ```bash
- kubectl apply -f deploy/crds/
- ```
-
-1. Create the namespace for the Operator:
-
- In `cluster` mode, if you want to use a namespace other than `spinnaker-operator`, you need to edit the namespace in `deploy/operator/cluster/role_binding.yaml`.
-
- ```bash
- kubectl create ns spinnaker-operator
- ```
-
-1. Install the Operator:
-
- ```bash
- kubectl -n spinnaker-operator apply -f deploy/operator/cluster
- ```
-
-1. Verify that the Operator is running:
-
- ```bash
- kubectl -n spinnaker-operator get pods
- ```
-
- The command returns output similar to the following if the pod for the Operator is running:
-
- ```
- NAMESPACE READY STATUS RESTARTS AGE
- spinnaker-operator-7cd659654b-4vktl 2/2 Running 0 6s
- ```
diff --git a/content/en/includes/armory-operator/operator-compat-matrix.md b/content/en/includes/armory-operator/operator-compat-matrix.md
index bdad2afc65..339ebb1881 100755
--- a/content/en/includes/armory-operator/operator-compat-matrix.md
+++ b/content/en/includes/armory-operator/operator-compat-matrix.md
@@ -1,9 +1,7 @@
| Kubernetes Version | Armory Operator Version | Armory CD Version | Spinnaker Operator Version | Spinnaker Version |
| :------------------------- | :----------------------------- | :----------------- | :------------------------ | :----------------- |
-| < 1.21 | <= 1.6.x | <= 2.28.0 | <= 1.2.5 | >= 1.27.3 |
| >= 1.21 | >= 1.7.x | All supported versions | >= 1.3.x | >= 1.27.3 |
-
-Consult the {{< linkWithTitle "op-manage-operator.md" >}} guide for how to upgrade your Operator version.
+| < 1.21 | <= 1.6.x | <= 2.28.0 | <= 1.2.5 | >= 1.27.3 |
diff --git a/content/en/includes/armory-operator/spin-kust-repo.md b/content/en/includes/armory-operator/spin-kust-repo.md
index c6aea9ec48..d71f720e41 100644
--- a/content/en/includes/armory-operator/spin-kust-repo.md
+++ b/content/en/includes/armory-operator/spin-kust-repo.md
@@ -1,9 +1,5 @@
Armory maintains the `spinnakaker-kustomize-patches` [repo](https://github.com/armory/spinnaker-kustomize-patches), which contains common configuration options for Armory Continuous Deployment or Spinnaker as well as helper scripts. The patches in this repo give you a reliable starting point when adding and removing features.
->Configuration in this repository is meant for Armory Continuous Delivery. To
->make it compatible with Spinnaker instead, apply the
->`utilities/switch-to-oss.yml` patch.
-
To start, create your own copy of the `spinnaker-kustomize-patches` repository
by clicking the `Use this template` button:
diff --git a/content/en/includes/armory-operator/spin-op-install-basic.md b/content/en/includes/armory-operator/spin-op-install-basic.md
new file mode 100644
index 0000000000..944f94b7ad
--- /dev/null
+++ b/content/en/includes/armory-operator/spin-op-install-basic.md
@@ -0,0 +1,49 @@
+
+Operator in `basic` mode has permissions scoped to a single namespace, so the Operator can't see anything in other namespaces. You must deploy Armory Continuous Deployment to the same namespace as the Armory Operator.
+
+You can find the Spinnaker Operator's deployment configuration in `spinnaker-operator/deploy/operator/basic` after you download and unpack the archive. You don't need to update any configuration values.
+
+1. Download the Spinnaker Operator.
+
+ In the following example, replace `` with a specific release version or `latest`.
+
+ ```bash
+ mkdir -p spinnaker-operator && cd spinnaker-operator
+ bash -c 'curl -L https://github.com/armory/spinnaker-operator/releases//download/manifests.tgz | tar -xz'
+ ```
+
+1. Install or update CRDs across the cluster.
+
+ ```bash
+ kubectl apply -f deploy/crds/
+ ```
+
+1. Create the namespace for the Spinnaker Operator.
+
+ In `basic` mode, the namespace must be `spinnaker-operator`.
+
+ ```bash
+ kubectl create ns spinnaker-operator
+ ```
+
+1. Install the Spinnaker Operator.
+
+ ```bash
+ kubectl -n spinnaker-operator apply -f deploy/operator/basic
+ ```
+
+
+1. Verify that the Spinnaker Operator is running.
+
+ ```bash
+ kubectl get pods -n spinnaker-operator | grep operator
+ ```
+
+ The command returns output similar to the following if the pod for the Operator is running:
+
+ ```
+ NAMESPACE READY STATUS RESTARTS AGE
+ spinnaker-operator-7cd659654b-4vktl 2/2 Running 0 6s
+ ```
diff --git a/content/en/includes/armory-operator/spin-op-install-cluster.md b/content/en/includes/armory-operator/spin-op-install-cluster.md
new file mode 100644
index 0000000000..c2cd7edf6d
--- /dev/null
+++ b/content/en/includes/armory-operator/spin-op-install-cluster.md
@@ -0,0 +1,49 @@
+
+You need Kubernetes `ClusterRole` authority to install the Spinnaker Operator in [cluster mode]({{< ref "continuous-deployment/installation/armory-operator#operator-installation-modes" >}}).
+
+You can find the Spinnaker Operator's deployment configuration in `spinnaker-operator/deploy/operator/cluster` after you download and unpack the archive. You don't need to update any configuration values.
+
+1. Download the Spinnaker Operator.
+
+ In the following example, replace `` with a specific release version or `latest`.
+
+ ```bash
+ mkdir -p spinnaker-operator && cd spinnaker-operator
+ bash -c 'curl -L https://github.com/armory/spinnaker-operator/releases//download/manifests.tgz | tar -xz'
+ ```
+
+1. Install or update CRDs across the cluster:
+
+ ```bash
+ kubectl apply -f deploy/crds/
+ ```
+
+1. Create the namespace for the Spinnaker Operator:
+
+ In cluster mode, if you want to use a namespace other than `spinnaker-operator`, you need to edit the namespace in `deploy/operator/cluster/role_binding.yaml`.
+
+ ```bash
+ kubectl create ns spinnaker-operator
+ ```
+
+1. Install the Spinnaker Operator:
+
+ ```bash
+ kubectl -n spinnaker-operator apply -f deploy/operator/cluster
+ ```
+
+1. Verify that the Spinnaker Operator is running:
+
+ ```bash
+ kubectl get pods -n spinnaker-operator | grep operator
+ ```
+
+ The command returns output similar to the following if the pod for the Operator is running:
+
+ ```
+ NAMESPACE READY STATUS RESTARTS AGE
+ spinnaker-operator-7cd659654b-4vktl 2/2 Running 0 6s
+ ```
+
diff --git a/content/en/includes/armory-operator/spin-operator-compat.md b/content/en/includes/armory-operator/spin-operator-compat.md
deleted file mode 100644
index 5a61e46f48..0000000000
--- a/content/en/includes/armory-operator/spin-operator-compat.md
+++ /dev/null
@@ -1,4 +0,0 @@
-| Kubernetes Version | Spinnaker Operator Version | Spinnaker Version |
-| :------------------------- | :----------------------------- | :-------------------------------- |
-| 1.22+ | 1.3+ | 1.27+ |
-| 1.21 | 1.2.5 | 1.27+ |
\ No newline at end of file
diff --git a/content/en/plugins/scale-agent/install/quickstart.md b/content/en/plugins/scale-agent/install/quickstart.md
index 5c8631af9a..9544adcf3b 100644
--- a/content/en/plugins/scale-agent/install/quickstart.md
+++ b/content/en/plugins/scale-agent/install/quickstart.md
@@ -54,7 +54,7 @@ This guide shows you how to statically add an account to the Scale Agent service
Decide which [Spinnaker Operator release](https://github.com/armory/spinnaker-operator/releases) you need based on the Kubernetes version you are using.
-{{< readfile file="/includes/armory-operator/spin-operator-compat.md" >}}
+{{< readfile file="/includes/armory-operator/operator-compat-matrix.md" >}}
1. Fetch the Spinnaker Operator.