<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – Deploy Armory Continuous Deployment or Spinnaker Using Kubernetes Operators</title><link>/continuous-deployment/installation/armory-operator/</link><description>Recent content in Deploy Armory Continuous Deployment or Spinnaker Using Kubernetes Operators on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/continuous-deployment/installation/armory-operator/index.xml" rel="self" type="application/rss+xml"/><item><title>Continuous-Deployment: Install Operator and Deploy Armory Continuous Deployment Quickstart</title><link>/continuous-deployment/installation/armory-operator/op-quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-quickstart/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>The goal of this guide is to deploy Armory Continuous Deployment with bare minimum configuration. The &lt;a href="#whats-next">What&amp;rsquo;s next&lt;/a> section contains links to advanced configuration guides.&lt;/p>
&lt;ul>
&lt;li>You are familiar with &lt;a href="https://kubernetes.io/docs/concepts/extend-kubernetes/operator/">Kubernetes Operators&lt;/a>, which use custom resources to manage applications and their components.&lt;/li>
&lt;li>You understand the concept of &lt;a href="https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/">managing Kubernetes resources using manifests&lt;/a>.&lt;/li>
&lt;li>You have reviewed and met the Armory Continuous Deployment &lt;a href="/continuous-deployment/installation/system-requirements/">system requirements&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>If you are using Armory Continuous Deployment, be sure to choose the Armory Operator version that is compatible with your Armory CD and Kubernetes versions. Likewise, if you are using open source Spinnaker, choose the Spinnaker Operator that is compatible with your Spinnaker and Kubernetes versions.&lt;/p>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-0" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
aria-controls="tabs-00-00" aria-selected="true">
Armory Continuous Deployment
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
aria-controls="tabs-00-01" aria-selected="false">
Open Source Spinnaker
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-0-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Kubernetes Version&lt;/th>
&lt;th style="text-align:left">Armory Operator Version&lt;/th>
&lt;th style="text-align:left">Armory CD Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&amp;lt; 1.21&lt;/td>
&lt;td style="text-align:left">&amp;lt;= 1.6.x&lt;/td>
&lt;td style="text-align:left">&amp;lt;= 2.28.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&amp;gt;= 1.21&lt;/td>
&lt;td style="text-align:left">&amp;gt;= 1.7.x&lt;/td>
&lt;td style="text-align:left">All supported versions&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Kubernetes Version&lt;/th>
&lt;th style="text-align:left">Spinnaker Operator Version&lt;/th>
&lt;th style="text-align:left">Spinnaker Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&amp;lt; 1.21&lt;/td>
&lt;td style="text-align:left">&amp;lt;= 1.2.5&lt;/td>
&lt;td style="text-align:left">&amp;gt;= 1.27.3&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&amp;gt;= 1.21&lt;/td>
&lt;td style="text-align:left">&amp;gt;= 1.3.x&lt;/td>
&lt;td style="text-align:left">&amp;gt;= 1.27.3&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>Consult the &lt;a href="/continuous-deployment/installation/armory-operator/op-manage-operator/"}>Manage Operator&lt;/a> guide for how to upgrade your Operator version.&lt;/p>
&lt;blockquote>
&lt;p>Depending on your Kubernetes version, you may need to adjust the following instructions to use a supported Operator version.&lt;/p>
&lt;/blockquote>
&lt;h2 id="operator-installation-options">Operator installation options&lt;/h2>
&lt;p>The Operator has &lt;code>basic&lt;/code> and &lt;code>cluster&lt;/code> installation modes. The option you use depends on which namespace you want to deploy Armory Continuous Deployment or open source Spinnaker to.&lt;/p>
&lt;p>Most users choose Cluster Mode.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">&lt;/th>
&lt;th style="text-align:center">Basic Mode&lt;/th>
&lt;th style="text-align:center">Cluster Mode&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Must deploy Armory Continuous Deployment or open source Spinnaker in the same namespace as the Operator;&lt;br>permissions scoped to single namespace; suitable for a Proof of Concept (POC)&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;td style="text-align:center">❌&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Can deploy Armory Continuous Deployment or open source Spinnaker to multiple namespaces&lt;br>(requires Kubernetes ClusterRole)&lt;/td>
&lt;td style="text-align:center">❌&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Configure Armory Continuous Deployment or open source Spinnaker using a single manifest file&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Configure Armory Continuous Deployment or open source Spinnaker using Kustomize patches&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Perform pre-flight checks to prevent misconfiguration&lt;/td>
&lt;td style="text-align:center">❌&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="install-the-operator">Install the Operator&lt;/h2>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-5" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-05-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-00" role="tab"
aria-controls="tabs-05-00" aria-selected="false">
&lt;strong>Mode&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-05-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-01" role="tab"
aria-controls="tabs-05-01" aria-selected="true">
Cluster
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-05-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-02" role="tab"
aria-controls="tabs-05-02" aria-selected="false">
Basic
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-5-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-05-00" role="tabpanel" aria-labelled-by="tabs-05-00-tab" tabindex="5">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-05-01" role="tabpanel" aria-labelled-by="tabs-05-01-tab" tabindex="5">
&lt;p>You need Kubernetes &lt;code>ClusterRole&lt;/code> authority to install the Operator in &lt;code>cluster&lt;/code> mode. You should use Cluster mode to do &lt;strong>one&lt;/strong> of the following:&lt;/p>
&lt;ul>
&lt;li>Install a single Spinnaker Operator to manage an entire Kubernetes cluster of Spinnaker installations&lt;/li>
&lt;li>Install a single Armory Operator to manage an entire Kubernetes cluster of Armory CD installations&lt;/li>
&lt;/ul>
&lt;p>You can find the Operator&amp;rsquo;s deployment configuration in &lt;code>spinnaker-operator/deploy/operator/cluster&lt;/code> after you download and unpack the archive. You don&amp;rsquo;t need to update any configuration values.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Get the latest Operator release:&lt;/p>
&lt;p>&lt;strong>Armory Operator for Armory CD Installation&lt;/strong>&lt;/p>
&lt;figure>
&lt;img src="/images/proprietary.svg"/>
&lt;/figure>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>mkdir -p spinnaker-operator &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory-io/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;br>
&lt;p>&lt;strong>Spinnaker Operator for Open Source Spinnaker Installation&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>mkdir -p spinnaker-operator &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Install or update CRDs across the cluster:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl apply -f deploy/crds/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Create the namespace for the Operator:&lt;/p>
&lt;p>In &lt;code>cluster&lt;/code> mode, if you want to use a namespace other than &lt;code>spinnaker-operator&lt;/code>, you need to edit the namespace in &lt;code>deploy/operator/cluster/role_binding.yaml&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl create ns spinnaker-operator
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Install the Operator:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker-operator apply -f deploy/operator/cluster
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify that the Operator is running:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker-operator get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns output similar to the following if the pod for the Operator is running:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>NAMESPACE READY STATUS RESTARTS AGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spinnaker-operator-7cd659654b-4vktl 2/2 Running 0 6s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-05-02" role="tabpanel" aria-labelled-by="tabs-05-02-tab" tabindex="5">
&lt;p>Operator in &lt;code>basic&lt;/code> mode has permissions scoped to a single namespace, so the Operator can&amp;rsquo;t see anything in other namespaces. You must deploy Armory Continuous Deployment or open source Spinnaker to the same namespace as the Operator, in a 1:1 correlation (one Armory Operator per Armory CD; one Spinnaker Operator per open source Spinnaker install).&lt;/p>
&lt;p>You can find the Operator&amp;rsquo;s deployment configuration in &lt;code>spinnaker-operator/deploy/operator/basic&lt;/code> after you download and unpack the archive. You don&amp;rsquo;t need to update any configuration values.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Get the latest Operator release:&lt;/p>
&lt;p>&lt;strong>Armory Operator for Armory CD Installation&lt;/strong> &lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>mkdir -p spinnaker-operator &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory-io/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Spinnaker Operator for Open Source Spinnaker Installation&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>mkdir -p spinnaker-operator &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Install or update CRDs across the cluster:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl apply -f deploy/crds/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Create the namespace for the Operator:&lt;/p>
&lt;p>In &lt;code>basic&lt;/code> mode, the namespace must be &lt;code>spinnaker-operator&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl create ns spinnaker-operator
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Install the Operator:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker-operator apply -f deploy/operator/basic
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify that the Operator is running:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker-operator get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns output similar to the following if the pod for the Operator is running:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>NAMESPACE READY STATUS RESTARTS AGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spinnaker-operator-7cd659654b-4vktl 2/2 Running 0 6s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;/div>
&lt;/div>
&lt;h2 id="deploy-an-armory-continuous-deployment-instance">Deploy an Armory Continuous Deployment instance&lt;/h2>
&lt;h3 id="single-manifest-file-option">Single manifest file option&lt;/h3>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-6" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-06-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-00" role="tab"
aria-controls="tabs-06-00" aria-selected="true">
Armory Continuous Deployment
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-06-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-01" role="tab"
aria-controls="tabs-06-01" aria-selected="false">
Open Source Spinnaker
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-6-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-06-00" role="tabpanel" aria-labelled-by="tabs-06-00-tab" tabindex="6">
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;p>You can find the &lt;code>SpinnakerService.yml&lt;/code> manifest file in &lt;code>/spinnaker-operator/deploy/spinnaker/basic/&lt;/code>. You need to specify persistent storage details and the version to deploy before you can use the manifest to deploy Armory Continuous Deployment.&lt;/p>
&lt;p>The following example uses an AWS S3 bucket. You can find configuration for other storage types in the &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/">Persistent Storage&lt;/a> reference.&lt;/p>
&lt;p>You can see the list of Armory Continuous Deployment versions on the &lt;a href="/continuous-deployment/release-notes/rn-armory-spinnaker/">Release Notes&lt;/a> page.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># the version of Armory Continuous Deployment to deploy&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: &amp;lt;change-me&amp;gt; &lt;span style="color:#6272a4"># Armory Continuous Deployment stores application and pipeline definitions here. Create an S3 bucket and provide the name here.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.expose - This section defines how Armory Continuous Deployment should be publicly exposed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type: service # Kubernetes LoadBalancer type (service/ingress), note&lt;/span>: only &amp;#34;service&amp;#34; is supported for now
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Armory Operator contains Halyard to manage a portion of your Armory Continuous Deployment installation.
See &lt;a href="/continuous-deployment/installation/armory-operator/op-advanced-config/">Advanced Operator Configuration&lt;/a> if you need to override the default settings for the Halyard container for some advanced features.&lt;/p>
&lt;p>Deploy using &lt;code>kubectl&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl create ns spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker apply -f deploy/spinnaker/basic/SpinnakerService.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-06-01" role="tabpanel" aria-labelled-by="tabs-06-01-tab" tabindex="6">
&lt;p>You can find the basic &lt;code>spinnakerservice.yml&lt;/code> manifest file in &lt;code>/spinnaker-operator/deploy/spinnaker/basic/&lt;/code>.&lt;/p>
&lt;p>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 &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/">Persistent Storage&lt;/a> reference.&lt;/p>
&lt;p>You can see the list of Spinnaker versions on the Spinnaker &lt;a href="https://spinnaker.io/community/releases/versions/">Versions&lt;/a> page.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># the version of Spinnaker to deploy&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: &amp;lt;change-me&amp;gt; &lt;span style="color:#6272a4"># Spinnaker stores application and pipeline definitions here. Create an S3 bucket and provide the name here.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.expose - This section defines how Spinnaker should be publicly exposed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type: service # Kubernetes LoadBalancer type (service/ingress), note&lt;/span>: only &amp;#34;service&amp;#34; is supported for now
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Deploy using &lt;code>kubectl&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl create ns spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker apply -f deploy/spinnaker/basic/spinnakerservice.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>You can watch the installation progress by executing:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker get spinsvc spinnaker -w
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can verify pod status by executing:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> kubectl -n spinnaker get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The included manifest file is only for a very basic installation.
&lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/"}>Configure Armory Continuous Deployment Using a Manifest File&lt;/a> contains detailed manifest configuration options.&lt;/p>
&lt;h3 id="kustomize-patches-option">Kustomize patches option&lt;/h3>
&lt;blockquote>
&lt;p>This example assumes you deploy Armory Continuous Deployment to the &lt;code>spinnaker-operator&lt;/code> namespace.&lt;/p>
&lt;/blockquote>
&lt;p>Kustomize uses patch files to build a deployment file by overwriting sections of the &lt;code>spinnakerservice.yml&lt;/code> manifest file. You declare your patch files in a &lt;code>kustomization.yml&lt;/code> file, which &lt;code>kubectl&lt;/code> and Kustomize and use to build the Armory Continuous Deployment or Spinnaker manifest file.&lt;/p>
&lt;p>You can put each manifest config section in its own file. For example, if you create a &lt;code>profiles-patch.yml&lt;/code> patch with configuration for various services, you are telling Kustomize to overwrite the &lt;code>profiles&lt;/code> section of the &lt;code>spinnakerservice.yml&lt;/code> manifest with the contents of &lt;code>profiles-patch.yml&lt;/code>. Kustomize is flexible, though, so you could instead create a separate patch file for each service (&lt;code>profiles-clouddriver-patch.yml&lt;/code>, &lt;code>profiles-gate-patch.yml&lt;/code>, &lt;code>profiles-deck-patch.yml&lt;/code>, etc.), and then declare those patches in the &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;p>Kustomize is part of &lt;code>kubectl&lt;/code>, so you do not need to install Kustomize locally to build and verify your manifest file. You can run &lt;code>kubectl kustomize &amp;lt;path-to-kustomization.yml&amp;gt;&lt;/code>. This prints out the contents of the manifest file that Kustomize builds using your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;blockquote>
&lt;p>&lt;code>kubectl&lt;/code> versions up to and including v1.20 come bundled with Kustomize v2.0.3. &lt;code>kubectl&lt;/code> 1.21 comes bundled with Kustomize v4.0.5. Using Kustomize patches has been tested with &lt;code>kubectl&lt;/code> v1.19.x. and standalone Kustomize v2 and v3. You may see a &lt;code>panic&lt;/code> error if you use the &lt;code>spinnaker-kustomize-patches&lt;/code> repo with Kustomize v4.0+ or &lt;code>kubectl&lt;/code> v1.21+.&lt;/p>
&lt;/blockquote>
&lt;p>For this quickstart, you can find bare minimum patches in &lt;code>/spinnaker-operator/deploy/spinnaker/kustomize&lt;/code>. Before you deploy Armory Continuous Deployment, you need to update the &lt;code>version&lt;/code> and &lt;code>persistentStorage&lt;/code> values in &lt;code>config-patch.yml&lt;/code>.&lt;/p>
&lt;p>The following example uses an AWS S3 bucket. You can find configuration for other storage types in the &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/">Persistent Storage&lt;/a> reference.&lt;/p>
&lt;blockquote>
&lt;p>This quickstart example is suitable for a proof of concept. For production environments, you should use a robust set of Kustomize patches. See the &lt;a href="/continuous-deployment/installation/armory-operator/op-config-kustomize/">Configure Armory Continuous Deployment Using Kustomize&lt;/a> guide for details.&lt;/p>
&lt;/blockquote>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-12" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-12-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-12-00" role="tab"
aria-controls="tabs-12-00" aria-selected="true">
Armory Continuous Deployment
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-12-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-12-01" role="tab"
aria-controls="tabs-12-01" aria-selected="false">
Open Source Spinnaker
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-12-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-12-00" role="tabpanel" aria-labelled-by="tabs-12-00-tab" tabindex="12">
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;p>You can see the list of Armory Continuous Deployment versions on the &lt;a href="/continuous-deployment/release-notes/rn-armory-spinnaker/">Release Notes&lt;/a> page.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig - This section is how to specify configuration spinnaker&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.config - This section contains the contents of a deployment found in a halconfig .deploymentConfigurations[0]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># the version of Armory Continuous Deployment to be deployed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: mybucket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Armory Operator contains Halyard to manage a portion of the deployment Armory Continuous Deployment.
See &lt;a href="/continuous-deployment/installation/armory-operator/op-advanced-config/">Advanced Operator Configuration&lt;/a> if you need to override the default settings for the Halyard Container for some advanced features.&lt;/p>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-12-01" role="tabpanel" aria-labelled-by="tabs-12-01-tab" tabindex="12">
&lt;p>You can see the list of open source Spinnaker versions on the Spinnaker website&amp;rsquo;s &lt;a href="https://spinnaker.io/community/releases/versions/">Versions&lt;/a> page.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig - This section is how to specify configuration Spinnaker&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.config - This section contains the contents of a deployment found in a halconfig .deploymentConfigurations[0]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># the version of Spinnaker to be deployed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: mybucket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;ol>
&lt;li>
&lt;p>If you want to verify the contents of the manifest file, execute from the &lt;code>/spinnaker-operator/deploy/spinnaker/kustomize/&lt;/code> directory:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl kustomize .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This prints out the contents of the manifest file that Kustomize built based on your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Deploy from the &lt;code>/spinnaker-operator/deploy/spinnaker/kustomize/&lt;/code> directory:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl create ns spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker apply -k .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>You can watch the installation progress by executing:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker get spinsvc spinnaker -w
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>You can verify pod status by executing:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/continuous-deployment/installation/ae-instance-reg/">Register your Armory Continuous Deployment instance&lt;/a>.&lt;/li>
&lt;li>Learn how to &lt;a href="/continuous-deployment/installation/armory-operator/op-manage-spinnaker/"}>Manage Armory Continuous Deployment using the Operator&lt;/a>.&lt;/li>
&lt;li>See advanced manifest configuration in the &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/"}>Configure Armory Continuous Deployment Using a Manifest File&lt;/a> guide.&lt;/li>
&lt;li>See advanced configuration using Kustomize in the &lt;a href="/continuous-deployment/installation/armory-operator/op-config-kustomize/"}>Configure Armory Continuous Deployment Using Kustomize&lt;/a> guide.&lt;/li>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-troubleshooting/"}>Errors and Troubleshooting&lt;/a> guide if you encounter issues.&lt;/li>
&lt;li>If you are deploying Armory Continuous Deployment, you may need to override the default settings for the Halyard container for some advanced features. See the &lt;a href="/continuous-deployment/installation/armory-operator/op-advanced-config/"}>Advanced Operator Configuration&lt;/a> guide.&lt;/li>
&lt;li>Learn how to &lt;a href="/continuous-deployment/installation/armory-operator/op-manage-operator/"}>Manage Operator&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Configure Armory Continuous Deployment Using Kustomize</title><link>/continuous-deployment/installation/armory-operator/op-config-kustomize/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-config-kustomize/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="why-use-kustomize-patches-for-spinnaker-configuration">Why use Kustomize patches for Spinnaker configuration&lt;/h2>
&lt;p>Even though you can configure Armory Continuous Deployment or Spinnaker in a single manifest file, the advantage of using &lt;a href="https://kustomize.io/">Kustomize&lt;/a> patch files is readability, consistency across environments, and maintainability.&lt;/p>
&lt;h2 id="how-kustomize-works">How Kustomize works&lt;/h2>
&lt;p>Kustomize uses patch files to build a deployment file by overwriting sections of the &lt;code>spinnakerservice.yml&lt;/code> manifest file. You declare your patch files in a &lt;code>kustomization.yml&lt;/code> file, which &lt;code>kubectl&lt;/code> and Kustomize and use to build the Armory Continuous Deployment or Spinnaker manifest file.&lt;/p>
&lt;p>You can put each manifest config section in its own file. For example, if you create a &lt;code>profiles-patch.yml&lt;/code> patch with configuration for various services, you are telling Kustomize to overwrite the &lt;code>profiles&lt;/code> section of the &lt;code>spinnakerservice.yml&lt;/code> manifest with the contents of &lt;code>profiles-patch.yml&lt;/code>. Kustomize is flexible, though, so you could instead create a separate patch file for each service (&lt;code>profiles-clouddriver-patch.yml&lt;/code>, &lt;code>profiles-gate-patch.yml&lt;/code>, &lt;code>profiles-deck-patch.yml&lt;/code>, etc.), and then declare those patches in the &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;p>Kustomize is part of &lt;code>kubectl&lt;/code>, so you do not need to install Kustomize locally to build and verify your manifest file. You can run &lt;code>kubectl kustomize &amp;lt;path-to-kustomization.yml&amp;gt;&lt;/code>. This prints out the contents of the manifest file that Kustomize builds using your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;blockquote>
&lt;p>&lt;code>kubectl&lt;/code> versions up to and including v1.20 come bundled with Kustomize v2.0.3. &lt;code>kubectl&lt;/code> 1.21 comes bundled with Kustomize v4.0.5. Using Kustomize patches has been tested with &lt;code>kubectl&lt;/code> v1.19.x. and standalone Kustomize v2 and v3. You may see a &lt;code>panic&lt;/code> error if you use the &lt;code>spinnaker-kustomize-patches&lt;/code> repo with Kustomize v4.0+ or &lt;code>kubectl&lt;/code> v1.21+.&lt;/p>
&lt;/blockquote>
&lt;h2 id="kustomize-resources">Kustomize resources&lt;/h2>
&lt;p>You should familiarize yourself with Kustomize before you create patch files to configure Armory Continuous Deployment.&lt;/p>
&lt;ul>
&lt;li>Kustomize &lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/glossary/">Glossary&lt;/a>&lt;/li>
&lt;li>Kustomize &lt;a href="https://kubectl.docs.kubernetes.io/guides/introduction/kustomize/">introduction&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/">Kustomization file overview&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="kubernetes-requirements">Kubernetes requirements&lt;/h2>
&lt;ul>
&lt;li>You are familiar with &lt;a href="https://kubernetes.io/docs/concepts/extend-kubernetes/operator/">Kubernetes Operators&lt;/a>, which use custom resources to manage applications and their components.&lt;/li>
&lt;li>You understand the concept of &lt;a href="https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/">managing Kubernetes resources using manifests&lt;/a>.&lt;/li>
&lt;li>You have reviewed and met the Armory Continuous Deployment &lt;a href="/continuous-deployment/installation/system-requirements/">system requirements&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="spinnaker-kustomize-patches-repo">Spinnaker Kustomize patches repo&lt;/h2>
&lt;p>Armory maintains the &lt;code>spinnakaker-kustomize-patches&lt;/code> &lt;a href="https://github.com/armory/spinnaker-kustomize-patches">repo&lt;/a>, 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.&lt;/p>
&lt;blockquote>
&lt;p>Configuration in this repository is meant for Armory Continuous Delivery. To
make it compatible with Spinnaker instead, apply the
&lt;code>utilities/switch-to-oss.yml&lt;/code> patch.&lt;/p>
&lt;/blockquote>
&lt;p>To start, create your own copy of the &lt;code>spinnaker-kustomize-patches&lt;/code> repository
by clicking the &lt;code>Use this template&lt;/code> button:&lt;/p>
&lt;figure>
&lt;img src="mages/kustomize-patches-repo-clone.png"/>
&lt;/figure>
&lt;blockquote>
&lt;p>If you intend to update your copy from upstream, use &lt;strong>Fork&lt;/strong> instead. See &lt;a href="https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-from-a-template">Creating a repository from a template&lt;/a> for the difference between &lt;strong>Use this template&lt;/strong> and &lt;strong>Fork&lt;/strong>.&lt;/p>
&lt;/blockquote>
&lt;p>Once created, clone this repository to your local machine.&lt;/p>
&lt;h2 id="configure-armory-continuous-deployment">Configure Armory Continuous Deployment&lt;/h2>
&lt;p>Follow these steps to configure Armory Continuous Deployment:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="#choose-a-kustomization-file">Choose a &lt;code>kustomization.yml&lt;/code> file&lt;/a>.&lt;/li>
&lt;li>(Optional) If you are deploying open source Spinnaker, &lt;a href="#change-the-apiversion">change the &lt;code>apiVersion&lt;/code> in each patch file&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#set-the-spinnaker-version">Set the Armory Continuous Deployment (or Spinnaker) version&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#verify-resources">Verify the content of each resource file&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#verify-patches">Verify the configuration contents of each patch file&lt;/a>.&lt;/li>
&lt;/ol>
&lt;h3 id="choose-a-kustomization-file">Choose a &lt;code>kustomization&lt;/code> file&lt;/h3>
&lt;p>Before you begin configuring Armory Continuous Deployment, you need to choose or create a
&lt;code>kustomization.yml&lt;/code> file. The &lt;code>kustomization.yml&lt;/code> specifies the namespace for
Armory Continuous Deployment, a list of Kubernetes resources, and a list of patch files to
merge into the &lt;code>spinnakerservice.yml&lt;/code> manifest file. For example, the
&lt;code>recipes/kustomization-minimum.yml&lt;/code> file contains the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4">#-----------------------------------------------------------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Minimum Starting Point recipe&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Self contained Spinnaker installation with no external dependencies and no additional configuration needed.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># This is intended as a starting point for any kubernetes cluster.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Not for production use.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Features:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - One Kubernetes account (Spinnaker&amp;#39;s own cluster) for deployment targets&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - Spinnaker authentication disabled&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - Self hosted minio as a persistent storage&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - Self hosted redis backend for caching and temporal storage of services&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4">#-----------------------------------------------------------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: kustomize.config.k8s.io/v1beta1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Kustomization
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">namespace&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">components&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - core/base
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - core/persistence/in-cluster
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - targets/kubernetes/default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">patchesStrategicMerge&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - core/patches/version.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">transformers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - utilities/unique-service-account.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;ul>
&lt;li>
&lt;p>The &lt;code>components&lt;/code>
&lt;a href="https://kubectl.docs.kubernetes.io/guides/config_management/components/">section&lt;/a>
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.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The &lt;code>patchesStrategicMerge&lt;/code>
&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patchesstrategicmerge/">section&lt;/a>
contains links to files that contain partial resource
definitions. Kustomize uses these patch files to overwrite sections of
components or resources, such as the &lt;code>SpinnakerService&lt;/code> definition.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;code>spinnaker-kustomize-patches/kustomization.yml&lt;/code> is a symlink that points to
&lt;code>spinnaker-kustomize-patches/recipes/kustomization-all.yml&lt;/code>. There are
multiple &lt;code>kustomization&lt;/code> examples in the &lt;code>recipes&lt;/code> directory. Choose the one
that most closely resembles your use case and link to it. Alternately, you can
delete the symlink, move your desired Kustomization file from &lt;code>recipes&lt;/code> to the
top-level directory, and rename the file to &lt;code>kustomization.yml&lt;/code>.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
If you are in an air-gapped environment and are using MinIO to host the Armory
Continuous Deployment BOM, remove &lt;code>core/persistence/in-cluster/minio.yml&lt;/code> from the list of resources to
prevent the accidental deletion of the bucket when calling &lt;code>kubectl delete -k .&lt;/code>.
&lt;/div>
&lt;h3 id="choose-open-source-spinnaker">Choose Open Source Spinnaker&lt;/h3>
&lt;blockquote>
&lt;p>This step is required only if you are deploying open source Spinnaker.&lt;/p>
&lt;/blockquote>
&lt;p>Add the following patch to your &lt;code>kustomization.yml&lt;/code> file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">patches&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">target&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">path&lt;/span>: utilities/switch-to-oss.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="set-the-armory-continuous-deployment-version">Set the Armory Continuous Deployment version&lt;/h3>
&lt;p>In &lt;code>spinnaker-kustomize-patches/core/patches/version.yml&lt;/code>, set the &lt;a href="/continuous-deployment/release-notes/rn-armory-spinnaker/">Armory
CD version&lt;/a> or &lt;a href="https://spinnaker.io/community/releases/versions/">Spinnaker
version&lt;/a> that you want to
deploy, such as &lt;code>2.34&lt;/code> (Armory Continuous Deployment) or
&lt;code>1.25.3&lt;/code> (Spinnaker).&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2.34&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h3 id="verify-resources">Verify resources&lt;/h3>
&lt;p>Read each file linked to from your chosen &lt;code>kustomization.yml&lt;/code> file section to
make sure that the Kubernetes resource as configured works with your
environment.&lt;/p>
&lt;h3 id="verify-patches">Verify patches&lt;/h3>
&lt;p>Read each file linked to in the &lt;code>patchesStrategicMerge&lt;/code> section. You may need to update each patch configuration with values specific to you and your environment. For example, the &lt;code>kustomization-quickstart.yml&lt;/code> file described in the &lt;a href="#choose-a-kustomization-file">Choose a &lt;code>kustomization&lt;/code> file&lt;/a> section links to &lt;code>accounts/docker/patch-dockerhub.yml&lt;/code>. You need to update that patch file with your own DockerHub credentials.&lt;/p>
&lt;p>Explore the patches in various folders to see if there are any that you want to use. Remember to list additional patches in the &lt;code>patchesStrategicMerge&lt;/code> section of your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;h3 id="secrets">Secrets&lt;/h3>
&lt;p>If you want to store Spinnaker secrets in Kubernetes, we recommend using
&lt;a href="https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kustomize/">Kustomize
generators&lt;/a>.&lt;/p>
&lt;h2 id="deploy-armory-continuous-deployment">Deploy Armory Continuous Deployment&lt;/h2>
&lt;p>Once you have configured your patch files, you can deploy Armory Continuous Deployment.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Create the &lt;code>spinnaker&lt;/code> namespace:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl create ns spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you want to use a different namespace, you must update the &lt;code>namespace&lt;/code> value in your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>(Optional) Verify the Kustomize build output:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl kustomize &amp;lt;path-to-kustomization.yml&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This prints out the contents of the manifest file that Kustomize built based on your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Apply the manifest:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>kubectl apply -k &amp;lt;path-to-kustomization.yml&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Watch the install progress and see the pods being created:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker get spinsvc spinnaker -w
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/">Manifest Reference&lt;/a> for configuration options by section.&lt;/li>
&lt;li>Learn how to &lt;a href="/continuous-deployment/installation/armory-operator/op-manage-spinnaker/">manage&lt;/a> your Spinnaker instance.&lt;/li>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-troubleshooting/"}>Errors and Troubleshooting&lt;/a> guide if you encounter issues.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Configure Armory Continuous Deployment Using a Manifest File</title><link>/continuous-deployment/installation/armory-operator/op-config-manifest/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-config-manifest/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;ul>
&lt;li>This guide assumes you want to expand the manifest file used in the Quickstart.&lt;/li>
&lt;li>You know how to deploy Armory Continuous Deployment using a Kubernetes manifest file. See the Quickstart&amp;rsquo;s &lt;a href="/continuous-deployment/installation/armory-operator/op-quickstart/#single-manifest-file-option">Single manifest file section&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="kubernetes-manifest-file">Kubernetes manifest file&lt;/h2>
&lt;p>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 &lt;code>spinnakerservice.yml&lt;/code> manifest that deploys Armory Continuous Deployment.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex; background-color:#3d3f4a">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: &amp;lt;s3-bucket-name&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;ul>
&lt;li>Line 1: &lt;code>apiVersion&lt;/code> is the CRD version of the &lt;code>SpinnakerService&lt;/code> custom resource.
&lt;ul>
&lt;li>If you are deploying Armory Continuous Deployment, the value is &lt;code>spinnaker.armory.io/v1alpha2&lt;/code>; if you change this value, the Armory Operator won&amp;rsquo;t process the manifest file.&lt;/li>
&lt;li>If you are deploying Spinnaker, the value is &lt;code>spinnaker.io/v1alpha2&lt;/code>; if you change this value, the Spinnaker Operator won&amp;rsquo;t process the manifest file.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Line 8: &lt;code>spec.spinnakerConfig.config.version&lt;/code>
&lt;ul>
&lt;li>If you are using the Armory Operator, this is the &lt;a href="/continuous-deployment/release-notes/rn-armory-spinnaker/">version of Armory Continuous Deployment&lt;/a> you want to deploy; for example, 2.34.&lt;/li>
&lt;li>If you are using the Spinnaker Operator, this is the &lt;a href="https://spinnaker.io/community/releases/versions/">version of Spinnaker&lt;/a> you want to deploy; for example, &lt;code>1.25&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;details>&lt;summary>Expand to see a skeleton manifest file&lt;/summary>
&lt;p>This file is from the public &lt;code>armory/spinnaker-operator&lt;/code> &lt;a href="https://github.com/armory/spinnaker-operator/blob/master/deploy/spinnaker/complete/spinnakerservice.yml">repo&lt;/a>. You use this file to configure and deploy Spinnaker. Note that the &lt;code>apiVersion&lt;/code> is the SpinnakerService CRD used by the Spinnaker Operator.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig - This section is how to specify configuration spinnaker&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.config - This section contains the contents of a deployment found in a halconfig .deploymentConfigurations[0]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">1.28.1&lt;/span> &lt;span style="color:#6272a4"># the version of Spinnaker to be deployed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: &amp;lt;change-me&amp;gt; &lt;span style="color:#6272a4"># Change to a unique name. Spinnaker stores application and pipeline definitions here&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.profiles - This section contains the YAML of each service&amp;#39;s profile&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clouddriver&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/clouddriver.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># deck has a special key &amp;#34;settings-local.js&amp;#34; for the contents of settings-local.js&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># settings-local.js - contents of ~/.hal/default/profiles/settings-local.js&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Use the | YAML symbol to indicate a block-style multiline string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings-local.js&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> window.spinnakerSettings.feature.kustomizeEnabled = true;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/echo.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">fiat&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/fiat.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">front50&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/front50.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/gate.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">igor&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/igor.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kayenta&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/kayenta.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/orca.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rosco&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/rosco.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.service-settings - This section contains the YAML of the service&amp;#39;s service-setting&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># see https://www.spinnaker.io/reference/halyard/custom/#tweakable-service-settings for available settings&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service-settings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clouddriver&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">fiat&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">front50&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">igor&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kayenta&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rosco&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.files - This section allows you to include any other raw string files not handle above.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># The KEY is the filepath and filename of where it should be placed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - Files here will be placed into ~/.hal/default/ on halyard&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - __ is used in place of / for the path separator&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># The VALUE is the contents of the file.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - Use the | YAML symbol to indicate a block-style multiline string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - We currently only support string files&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - NOTE: Kubernetes has a manifest size limitation of 1MB&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">files&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># profiles__rosco__packer__example-packer-config.json: |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># {&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># &amp;#34;packerSetting&amp;#34;: &amp;#34;someValue&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># }&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># profiles__rosco__packer__my_custom_script.sh: |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># #!/bin/bash -e&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># echo &amp;#34;hello world!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.expose - This section defines how Spinnaker should be publicly exposed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type: service # Kubernetes LoadBalancer type (service/ingress), note&lt;/span>: only &amp;#34;service&amp;#34; is supported for now
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># annotations to be set on Kubernetes LoadBalancer type&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># they will only apply to spin-gate, spin-gate-x509, or spin-deck&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># uncomment the line below to provide an AWS SSL certificate to terminate SSL at the LoadBalancer&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4">#service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># provide an override to the exposing KubernetesService&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrides&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Provided below is the example config for the Gate-X509 configuration&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># deck:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># annotations:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># gate:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># annotations:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-backend-protocol: https # X509 requires https from LoadBalancer -&amp;gt; Gate&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># gate-x509:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># annotations:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-ssl-cert: null&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># publicPort: 443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">validation&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Patching of generated service or deployment by Spinnaker service.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Like in Kustomize, several patch types are supported. See&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># https://github.com/armory/spinnaker-operator/blob/master/doc/options.md#speckustomize&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kustomize&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># An example to change Gate&amp;#39;s image name using a strategic merge patch&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># gate:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># deployment:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># patchesStrategicMerge:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># spec:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># template:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># spec:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># containers:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - name: gate&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># image: gate:1.0.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/details>
&lt;h2 id="manifest-sections">Manifest sections&lt;/h2>
&lt;h3 id="metadataname">metadata.name&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion: apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>metadata.name&lt;/code> 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 &lt;code>prod&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ kubectl get spinsvc prod
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that you can use &lt;code>spinsvc&lt;/code> for brevity. You can also use &lt;code>spinnakerservices.spinnaker.armory.io&lt;/code> (Armory Continuous Deployment) or &lt;code>spinnakerservices.spinnaker.io&lt;/code> (Spinnaker).&lt;/p>
&lt;h3 id="specspinnakerconfig">spec.spinnakerConfig&lt;/h3>
&lt;p>Contains the same information as the &lt;code>deploymentConfigurations&lt;/code> entry in a Halyard configuration.&lt;/p>
&lt;p>For example, given the following &lt;code>~/.hal/config&lt;/code> file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">currentDeployment&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">deploymentConfigurations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">name&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2.17.1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: mybucket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The equivalent of that Halyard configuration is the following &lt;code>spec.spinnakerConfig&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion: apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2.17.1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: mybucket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>spec.spinnakerConfig.config&lt;/code> contains the following sections:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/armory/">armory&lt;/a> &lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/artifact/">artifact&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/canary-op-config/">canary&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/ci/">ci&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/deploy/">deploymentEnvironment&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/features/">features&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/metricstores/">metricStores&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/notification/">notification&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/">persistentStorage&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/">plugins&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/providers/">providers&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/pubsub/">pubsub&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/repository/">repository&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/security/">security&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/stats/">stats&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/op-webhook/">webhook&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="specspinnakerconfigprofiles">spec.spinnakerConfig.profiles&lt;/h3>
&lt;p>Configuration for each service profile. This is the equivalent of &lt;code>~/.hal/default/profiles/&amp;lt;service&amp;gt;-local.yml&lt;/code>. For example the following &lt;code>profile&lt;/code> is for Gate:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">default&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiPort&lt;/span>: &lt;span style="color:#bd93f9">8085&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that for Deck, the profile is a string under the key &lt;code>settings-local.js&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings-local.js&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> window.spinnakerSettings.feature.artifactsRewrite = true;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specspinnakerconfigservice-settings">spec.spinnakerConfig.service-settings&lt;/h3>
&lt;p>Settings for each service. This is the equivalent of &lt;code>~/.hal/default/service-settings/&amp;lt;service&amp;gt;.yml&lt;/code>. For example the following settings are for Clouddriver:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service-settings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clouddriver&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceAccountName&lt;/span>: spin-sa
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specspinnakerconfigfiles">spec.spinnakerConfig.files&lt;/h3>
&lt;p>Contents of any local files that should be added to the services. For example to reference the contents of a kubeconfig file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: cluster-1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>: cluster1-kubeconfig
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">files&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster1-kubeconfig&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> &amp;lt;FILE CONTENTS HERE&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>A double underscore (&lt;code>__&lt;/code>) in the file name is translated to a path separator (&lt;code>/&lt;/code>). For example to add custom packer templates:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">files&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles__rosco__packer__example-packer-config.json&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;packerSetting&amp;#34;: &amp;#34;someValue&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> }&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles__rosco__packer__my_custom_script.sh&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> #!/bin/bash -e
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> echo &amp;#34;hello world!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specexpose">spec.expose&lt;/h3>
&lt;p>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.&lt;/p>
&lt;p>Use the following configurations:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spec.expose.type&lt;/code>: How Armory Continuous Deploymentgets exposed. Currently, only &lt;code>service&lt;/code> is supported, which uses Kubernetes services to expose Spinnaker.&lt;/li>
&lt;li>&lt;code>spec.expose.service&lt;/code>: Service configuration&lt;/li>
&lt;li>&lt;code>spec.expose.service.type&lt;/code>: Should match a valid Kubernetes service type (i.e. &lt;code>LoadBalancer&lt;/code>, &lt;code>NodePort&lt;/code>, or &lt;code>ClusterIP&lt;/code>).&lt;/li>
&lt;li>&lt;code>spec.expose.service.annotations&lt;/code>: Map containing annotations to be added to Gate (API) and Deck (UI) services.&lt;/li>
&lt;li>&lt;code>spec.expose.service.overrides&lt;/code>: 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.&lt;/li>
&lt;/ul>
&lt;h3 id="specvalidation">spec.validation&lt;/h3>
&lt;p>&lt;strong>Currently these configurations are experimental. By default, the Operator always validates Kubernetes accounts when applying a SpinnakerService manifest.&lt;/strong>&lt;/p>
&lt;p>Validation options that apply to all validations that Operator performs:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spec.validation.failOnError&lt;/code>: Boolean. Defaults to true. If false, the validation runs and the results are logged, but the service is always considered valid.&lt;/li>
&lt;li>&lt;code>spec.validation.failFast&lt;/code>: Boolean. Defaults to false. If true, validation stops at the first error.&lt;/li>
&lt;li>&lt;code>spec.validation.frequencySeconds&lt;/code>: Optional. Integer. Define a grace period before a validation runs again. For example, if you specify a value of &lt;code>120&lt;/code> and edit the &lt;code>SpinnakerService&lt;/code> without changing an account within a 120 second window, the validation on that account does not run again.&lt;/li>
&lt;/ul>
&lt;p>Additionally, the following settings are specific to Kubernetes, Docker, AWS, AWS S3, CI tools, metric stores, persistent storage, or notification systems:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spec.validation.providers.kubernetes&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.docker&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.aws&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.s3&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.ci&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.metricStores&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.persistentStorage&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.notifications&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Supported settings are &lt;code>enabled&lt;/code> (set to false to turn off validations), &lt;code>failOnError&lt;/code>, and &lt;code>frequencySeconds&lt;/code>.&lt;/p>
&lt;p>The following example disables all Kubernetes account validations:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">validation&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specaccounts">spec.accounts&lt;/h3>
&lt;p>Support for &lt;code>SpinnakerAccount&lt;/code> CRD (&lt;strong>Experimental&lt;/strong>):&lt;/p>
&lt;ul>
&lt;li>&lt;code>spec.accounts.enabled&lt;/code>: Boolean. Defaults to false. If true, the &lt;code>SpinnakerService&lt;/code> uses all &lt;code>SpinnakerAccount&lt;/code> objects enabled.&lt;/li>
&lt;li>&lt;code>spec.accounts.dynamic&lt;/code> (experimental): Boolean. Defaults to false. If true, &lt;code>SpinnakerAccount&lt;/code> objects are available to Armory Continuous Deployment as the account is applied (without redeploying any service).&lt;/li>
&lt;/ul>
&lt;h2 id="example-manifests-for-exposing-armory-continuous-deployment">Example Manifests for exposing Armory Continuous Deployment&lt;/h2>
&lt;h3 id="load-balancer-services">Load balancer Services&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-backend-protocol&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;http&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-ports&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;80,443&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The preceding manifest generates these two services:&lt;/p>
&lt;p>&lt;em>spin-deck&lt;/em>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: deck-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>spin-gate&lt;/em>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: gate-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="different-service-types-for-deck-ui-and-gate-api">Different service types for Deck (UI) and Gate (API)&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-backend-protocol&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;http&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-ports&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;80,443&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrides&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: NodePort
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The preceding manifest generates these two services:&lt;/p>
&lt;p>&lt;em>spin-deck&lt;/em>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: deck-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>spin-gate&lt;/em>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: gate-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: NodePort
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="different-annotations-for-deck-ui-and-gate-api">Different annotations for Deck (UI) and Gate (API)&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-backend-protocol&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;http&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-ports&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;80,443&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrides&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-internal&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;true&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The preceding manifest file generates these two services:&lt;/p>
&lt;p>&lt;em>spin-deck&lt;/em>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: deck-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>spin-gate&lt;/em>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-internal&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: gate-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: Loadbalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="x509">X509&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">default&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiPort&lt;/span>: &lt;span style="color:#bd93f9">8085&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrides&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Provided below is the example config for the Gate-X509 configuration&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-cert&lt;/span>: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-cert&lt;/span>: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: https &lt;span style="color:#6272a4"># X509 requires https from LoadBalancer -&amp;gt; Gate&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate-x509&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-cert&lt;/span>: &lt;span style="color:#ff79c6">null&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">publicPort&lt;/span>: &lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/">Manifest Reference&lt;/a> for configuration options by section.&lt;/li>
&lt;li>Configure Kubernetes accounts using the &lt;a href="/continuous-deployment/installation/armory-operator/op-spin-account-crd/"}>Spinnaker Accounts CRD&lt;/a> (Experimental)&lt;/li>
&lt;li>See advanced configuration using Kustomize in the &lt;a href="/continuous-deployment/installation/armory-operator/op-config-kustomize/"}>Configure Armory Continuous Deployment Using Kustomize&lt;/a> guide.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Manage Armory Continuous Deployment using the Operator</title><link>/continuous-deployment/installation/armory-operator/op-manage-spinnaker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manage-spinnaker/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="kubernetes-tools">Kubernetes tools&lt;/h2>
&lt;p>You use &lt;a href="https://kubernetes.io/docs/reference/kubectl/">&lt;code>kubectl&lt;/code>&lt;/a> to manage the Armory Continuous Deployment or Spinnaker lifecycle like you do with other applications deployed to Kubernetes. For example:&lt;/p>
&lt;p>&lt;strong>List instances&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl get spinnakerservice --all-namespaces
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Describe instances&lt;/strong>&lt;/p>
&lt;p>You can use &lt;code>spinsvc&lt;/code> instead of &lt;code>spinnakerservice&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; describe spinsvc spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Consult the &lt;code>kubectl&lt;/code> &lt;a href="https://kubernetes.io/docs/reference/kubectl/">docs&lt;/a> for a list of commands.&lt;/p>
&lt;h2 id="deploy-armory-continuous-deployment">Deploy Armory Continuous Deployment&lt;/h2>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-1" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
aria-controls="tabs-01-00" aria-selected="true">
Manifest
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
aria-controls="tabs-01-01" aria-selected="false">
Kustomize
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-1-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;path-to-manifest-file&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubctl -n &amp;lt;namespace&amp;gt; apply -k &amp;lt;path-to-kustomize-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>You can watch the installation progress by executing:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; get spinsvc spinnaker -w
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can verify pod status by executing:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> kubectl -n &amp;lt;namespace&amp;gt; get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="upgrade-armory-continuous-deployment">Upgrade Armory Continuous Deployment&lt;/h2>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-2" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-02-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-00" role="tab"
aria-controls="tabs-02-00" aria-selected="true">
Manifest
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-02-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-01" role="tab"
aria-controls="tabs-02-01" aria-selected="false">
Kustomize
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-2-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-02-00" role="tabpanel" aria-labelled-by="tabs-02-00-tab" tabindex="2">
&lt;p>Change the &lt;code>version&lt;/code> field in your manifest file to the target version for the upgrade:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kind: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spec:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spinnakerConfig:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> config:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> version: &amp;lt;version&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Apply the updated manifest:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;path-to-manifest-file&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-02-01" role="tabpanel" aria-labelled-by="tabs-02-01-tab" tabindex="2">
&lt;p>Change the &lt;code>version&lt;/code> field in your Kustomize patch to the target version for the upgrade.&lt;/p>
&lt;p>Apply the update:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubctl -n &amp;lt;namespace&amp;gt; apply -k &amp;lt;path-to-kustomize-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>You can view the upgraded services starting up by executing &lt;code>describe&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; describe spinsvc spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Verify the upgraded version of Spinnaker:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; get spinsvc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns information similar to the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>NAME VERSION
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spinnaker 2.20.2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>VERSION&lt;/code> should reflect the target version for your upgrade.&lt;/p>
&lt;h2 id="rollback-armory-continuous-deployment">Rollback Armory Continuous Deployment&lt;/h2>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-3" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-03-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-03-00" role="tab"
aria-controls="tabs-03-00" aria-selected="true">
Manifest
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-03-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-03-01" role="tab"
aria-controls="tabs-03-01" aria-selected="false">
Kustomize
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-3-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-03-00" role="tabpanel" aria-labelled-by="tabs-03-00-tab" tabindex="3">
&lt;p>Change the &lt;code>version&lt;/code> field in your manifest file to the target version for the rollback:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kind: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spec:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spinnakerConfig:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> config:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> version: &amp;lt;version&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Apply the updated manifest:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;path-to-manifest-file&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-03-01" role="tabpanel" aria-labelled-by="tabs-03-01-tab" tabindex="3">
&lt;p>Change the &lt;code>version&lt;/code> field in your Kustomize patch to the target version for the rollback.&lt;/p>
&lt;p>Apply the update:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubctl -n &amp;lt;namespace&amp;gt; apply -k &amp;lt;path-to-kustomize-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>You can view the rolled back services starting up by executing &lt;code>describe&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; describe spinsvc spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Verify the rolled back version of Spinnaker:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; get spinsvc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns information similar to the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>NAME VERSION
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spinnaker 2.27.2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>VERSION&lt;/code> should reflect the target version for your rollback.&lt;/p>
&lt;h2 id="delete-armory-continuous-deployment">Delete Armory Continuous Deployment&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; delete spinnakerservice spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-troubleshooting/"}>Errors and Troubleshooting&lt;/a> guide if you encounter issues.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Migrate from Halyard to the Operator</title><link>/continuous-deployment/installation/armory-operator/hal-op-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/hal-op-migration/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>You need to decide if you want to overwrite the current Halyard deployment of Armory Continuous Deployment or create a test instance.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>Alternately, you can use Operator to deploy Armory Continuous Deployment to a different namespace to test out the migration. You need to create a separate data store as well as separate Gate and Deck URLs for your test instance of Armory Continuous Deployment. Once you&amp;rsquo;ve verified that Operator has deployed your test configuration as you expected, decommission the Halyard-deployed instance of Armory Continuous Deployment. Change the data store config and URLs in the manifest that Operator used to deploy your test instance to match what your decommissioned instance used. Then redeploy.&lt;/p>
&lt;p>The second method is preferred as it allows you to test everything before decommissioning Armory Continuous Deployment that you deployed using Halyard.&lt;/p>
&lt;h2 id="migrate-to-operator">Migrate to Operator&lt;/h2>
&lt;p>This guide assumes you want to deploy Armory Continuous Deployment using a single &lt;code>SpinnakerSerivce.yml&lt;/code> manifest file rather than Kustomize patches.&lt;/p>
&lt;p>The migration process from Halyard to Operator can be completed in 7 steps:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;a href="/continuous-deployment/installation/armory-operator/op-quickstart/">Install the Operator&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export configuration.&lt;/p>
&lt;p>Copy the desired profile&amp;rsquo;s content from the &lt;code>config&lt;/code> file&lt;/p>
&lt;p>For example, if you want to migrate the &lt;code>default&lt;/code> hal profile, use the following &lt;code>SpinnakerService&lt;/code> manifest structure:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">currentDeployment&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">deploymentConfigurations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">name&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Add &lt;code>&amp;lt;CONTENT&amp;gt;&lt;/code> in the &lt;code>spec.spinnakerConfig.config&lt;/code> section in the &lt;code>SpinnakerService&lt;/code> manifest as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&amp;lt;CONTENT&amp;gt;&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note: &lt;code>config&lt;/code> is under &lt;code>~/.hal&lt;/code>&lt;/p>
&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfig">&lt;code>spec.spinnakerConfig.config&lt;/code>&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export Armory Continuous Deployment profiles.&lt;/p>
&lt;p>If you have configured Armory Continuous Deployment profiles, you need to migrate these profiles to the &lt;code>SpinnakerService&lt;/code> manifest.&lt;/p>
&lt;p>First, identify the current profiles under &lt;code>~/.hal/default/profiles&lt;/code>.&lt;/p>
&lt;p>For each file, create an entry under &lt;code>spec.spinnakerConfig.profiles&lt;/code>.&lt;/p>
&lt;p>For example, you have the following profile:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ ls -a ~/.hal/default/profiles | sort
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>echo-local.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create a new entry with the name of the file without &lt;code>-local.yaml&lt;/code> as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfigprofiles">&lt;code>spec.spinnakerConfig.profiles&lt;/code>&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export Armory Continuous Deployment settings.&lt;/p>
&lt;p>If you configured Armory settings, you need to migrate these settings to the &lt;code>SpinnakerService&lt;/code> manifest also.&lt;/p>
&lt;p>First, identify the current settings under &lt;code>~/.hal/default/service-settings&lt;/code>.&lt;/p>
&lt;p>For each file, create an entry under &lt;code>spec.spinnakerConfig.service-settings&lt;/code>.&lt;/p>
&lt;p>For example, you have the following settings:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ ls -a ~/.hal/default/service-settings | sort
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>echo.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create a new entry with the name of the file without &lt;code>.yaml&lt;/code> as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service-settings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfigservice-settings">spec.spinnakerConfig.service-settings&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export local file references.&lt;/p>
&lt;p>If you have references to local files in any part of the config, like &lt;code>kubeconfigFile&lt;/code>, service account JSON files or others, you need to migrate these files to the &lt;code>SpinnakerService&lt;/code> manifest.&lt;/p>
&lt;p>For each file, create an entry under &lt;code>spec.spinnakerConfig.files&lt;/code>.&lt;/p>
&lt;p>For example, you have a Kubernetes account configured like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: prod
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dockerRegistries&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">configureImagePullSecrets&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cacheThreads&lt;/span>: &lt;span style="color:#bd93f9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespaces&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitNamespaces&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kinds&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitKinds&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">customResources&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cachingPolicies&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oAuthScopes&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">onlySpinnakerManaged&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>: /home/spinnaker/.hal/secrets/kubeconfig-prod
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: prod
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>kubeconfigFile&lt;/code> field is a reference to a physical file on the machine running Halyard. You need to create a new entry in &lt;code>files&lt;/code> section like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">files&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfig-prod&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then replace the path in the config to match the key in the &lt;code>files&lt;/code> section:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: prod
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dockerRegistries&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">configureImagePullSecrets&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cacheThreads&lt;/span>: &lt;span style="color:#bd93f9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespaces&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitNamespaces&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kinds&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitKinds&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">customResources&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cachingPolicies&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oAuthScopes&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">onlySpinnakerManaged&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>: kubeconfig-prod &lt;span style="color:#6272a4"># File name must match &amp;#34;files&amp;#34; key&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: prod
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfigfiles">spec.spinnakerConfig.files&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export Packer template files (if used).&lt;/p>
&lt;p>If you are using custom Packer templates for baking images, you need to migrate these files to the &lt;code>SpinnakerService&lt;/code> manifest.&lt;/p>
&lt;p>First, identify the current templates under &lt;code>~/.hal/default/profiles/rosco/packer&lt;/code>.&lt;/p>
&lt;p>For each file, create an entry under &lt;code>spec.spinnakerConfig.files&lt;/code>.&lt;/p>
&lt;p>For example, you have the following &lt;code>example-packer-config&lt;/code> file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ tree -v ~/.hal/default/profiles
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── echo-local.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└── rosco
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── packer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── example-packer-config.json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bd93f9">2&lt;/span> directories, &lt;span style="color:#bd93f9">2&lt;/span> files
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You need to create a new entry with the name of the file following these instructions:&lt;/p>
&lt;ul>
&lt;li>For each file, list the folder name starting with &lt;code>profiles&lt;/code>, followed by double underscores (&lt;code>__&lt;/code>) and at the very end the name of the file.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">files&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles__rosco__packer__example-packer-config.json&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfigfiles">&lt;code>spec.spinnakerConfig.files&lt;/code>&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Validate your Armory configuration if you plan to run the Operator in cluster mode:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;spinnaker service manifest&amp;gt; --dry-run&lt;span style="color:#ff79c6">=&lt;/span>server
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The validation service throws an error when something is wrong with your manifest.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Apply your SpinnakerService:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;spinnaker service&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Manage Operator</title><link>/continuous-deployment/installation/armory-operator/op-manage-operator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manage-operator/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="upgrade-the-operator">Upgrade the Operator&lt;/h2>
&lt;blockquote>
&lt;p>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 &lt;strong>unsupported&lt;/strong> upgrade method and may cause issues.&lt;/p>
&lt;/blockquote>
&lt;p>Use the &lt;code>kubectl replace&lt;/code> command to replace your Operator deployment. See the &lt;code>kubectl replace&lt;/code> &lt;a href="https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#replace">docs&lt;/a> for an explanation of this command.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Download the Operator version you want to upgrade to:&lt;/p>
&lt;p>&lt;strong>Armory Operator&lt;/strong>&lt;/p>
&lt;p>In the following command, replace &lt;code>&amp;lt;version&amp;gt;&lt;/code> with the specific version or &amp;ldquo;latest&amp;rdquo; for the most recent version.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory-io/spinnaker-operator/releases/download/&amp;lt;version&amp;gt;/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Spinnaker Operator&lt;/strong>&lt;/p>
&lt;p>In the following command, replace &lt;code>&amp;lt;version&amp;gt;&lt;/code> with the specific version or &amp;ldquo;latest&amp;rdquo; for the most recent version.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory/spinnaker-operator/releases/download/&amp;lt;version&amp;gt;/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Update CRDs across the cluster:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl replace -f deploy/crds/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Update the Operator:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker-operator replace -f deploy/operator/cluster
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="uninstall-the-operator">Uninstall the Operator&lt;/h2>
&lt;p>Uninstalling the Operator involves deleting its deployment and &lt;code>SpinnakerService&lt;/code> CRD. When you delete the Operator CRD, Kubernetes deletes any installation created by Operator. This occurs because the CRD is set as the owner of the resources, so they get garbage collected.&lt;/p>
&lt;p>You can remove this ownership relationship so that Armory Continuous Deployment is not
deleted when deleting the Operator by &lt;a href="#remove-operator-ownership-of-spinnaker-resources">removing Operator ownership of
resources&lt;/a>.&lt;/p>
&lt;h3 id="remove-operator-ownership-of-armory-continuous-deployment-resources">Remove Operator ownership of Armory Continuous Deployment resources&lt;/h3>
&lt;p>Run the following script to remove ownership of Armory resources, where &lt;code>NAMESPACE&lt;/code> is the namespace where Armory Continuous Deployment is installed:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">#! /usr/bin/env bash
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">for&lt;/span> rtype in deployment service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">for&lt;/span> r in &lt;span style="color:#ff79c6">$(&lt;/span>kubectl -n &lt;span style="color:#8be9fd;font-style:italic">$NAMESPACE&lt;/span> get &lt;span style="color:#8be9fd;font-style:italic">$rtype&lt;/span> --selector&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">app&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spin -o &lt;span style="color:#8be9fd;font-style:italic">jsonpath&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;{.items[*].metadata.name}&amp;#39;&lt;/span>&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubectl -n &lt;span style="color:#8be9fd;font-style:italic">$NAMESPACE&lt;/span> patch &lt;span style="color:#8be9fd;font-style:italic">$rtype&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">$r&lt;/span> --type json -p&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;[{&amp;#34;op&amp;#34;: &amp;#34;remove&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/metadata/ownerReferences&amp;#34;}]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">done&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">done&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After the script completes, delete the Operator and its CRDs from the Kubernetes cluster:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl delete -n &amp;lt;namespace&amp;gt; -f deploy/operator/&amp;lt;installation type&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl delete -f deploy/crds/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Spinnaker Accounts CRD</title><link>/continuous-deployment/installation/armory-operator/op-spin-account-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-spin-account-crd/</guid><description>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Experimental&lt;/h4>
The information below is written for an experimental feature. Reach out to Armory if you are interested in using this! Your feedback will help shape the development of this feature.
&lt;br>&lt;br>
&lt;b>Do not use this experimental feature in a production instance of Armory Continuous Deployment.
&lt;/b>
&lt;/div>
&lt;h2 id="spinnakeracount-custom-resource-definition-overview">&lt;code>SpinnakerAcount&lt;/code> Custom Resource Definition overview&lt;/h2>
&lt;p>The Operator comes with a &lt;code>SpinnakerAccount&lt;/code> Custom Resource for managing Kubernetes accounts that you want to use with Spinnaker. This &lt;code>SpinnakerAccount&lt;/code> resource enables defining and managing Kubernetes accounts outside of Spinnaker&amp;rsquo;s manifest file. You create a separate manifest for each Kubernetes account and &lt;code>kubectl apply&lt;/code> each manifest. &lt;code>kubectl&lt;/code> delegates to the Operator, which then processes the manifest into the requisite configuration and adds the account to Armory Continuous Deployment or Spinnaker.&lt;/p>
&lt;p>For example, you have a pipeline that provisions a Kubernetes
cluster with Terraform. If you want that new cluster to be available, you can
create a &lt;code>SpinnakerAccount&lt;/code> of type &lt;code>Kubernetes&lt;/code> in Spinnaker&amp;rsquo;s namespace.&lt;/p>
&lt;h2 id="format">Format&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerAccount
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: account-inline
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: &amp;lt;Account type&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>: {} &lt;span style="color:#6272a4"># List of permissions - see below&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings&lt;/span>: {} &lt;span style="color:#6272a4"># Settings see below&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="metadataname">&lt;code>metadata.name&lt;/code>&lt;/h3>
&lt;p>This is the name of the &lt;code>SpinnakerAccount&lt;/code>. It needs to be unique across all accounts - not just type of account as in Spinnaker.&lt;/p>
&lt;h3 id="spectype">&lt;code>spec.type&lt;/code>&lt;/h3>
&lt;p>Account type. See below for current support:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Account type&lt;/th>
&lt;th>Status&lt;/th>
&lt;th>Notes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Kubernetes&lt;/code>&lt;/td>
&lt;td>alpha&lt;/td>
&lt;td>Only the Spinnaker Kubernetes V2 provider is supported&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="specenabled">&lt;code>spec.enabled&lt;/code>&lt;/h3>
&lt;p>Determines if the account is enabled. If not enabled, &lt;code>SpinnakerService&lt;/code> doesn&amp;rsquo;t use it.&lt;/p>
&lt;h3 id="specpermissions">&lt;code>spec.permissions&lt;/code>&lt;/h3>
&lt;p>Map of authorizations similar to most accounts in Spinnaker.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>: [&lt;span style="color:#f1fa8c">&amp;#39;role1&amp;#39;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#39;role2&amp;#39;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>: [&lt;span style="color:#f1fa8c">&amp;#39;role1&amp;#39;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#39;role3&amp;#39;&lt;/span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specsettings">&lt;code>spec.settings&lt;/code>&lt;/h3>
&lt;p>Map of settings that are supported by Halyard. For instance:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: Kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cacheThreads&lt;/span>: &lt;span style="color:#bd93f9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitKinds&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - podPreset
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="speckubernetes">&lt;code>spec.kubernetes&lt;/code>&lt;/h3>
&lt;p>Auth options for Kubernetes account type. Pick only one of the options below:&lt;/p>
&lt;h4 id="speckuberneteskubeconfigfile">&lt;code>spec.kubernetes.kubeconfigFile&lt;/code>&lt;/h4>
&lt;p>References a file loaded either out of band to Clouddriver or (more likely) stored in a secret.&lt;/p>
&lt;h4 id="speckuberneteskubeconfigsecret">&lt;code>spec.kubernetes.kubeconfigSecret&lt;/code>&lt;/h4>
&lt;p>Reference to a Kubernetes secret in the same namespace that contains the kubeconfig file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: Kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigSecret&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: my-secret
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">key&lt;/span>: account1-kubeconfig
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="speckuberneteskubeconfig">&lt;code>spec.kubernetes.kubeconfig&lt;/code>&lt;/h4>
&lt;p>You can also inline the kubeconfig file if it does not contain secrets:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: Kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kind&lt;/span>: Config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clusters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">cluster&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">certificate-authority-data&lt;/span>: LS0t...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">server&lt;/span>: https://mycluster.url
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: my-cluster
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">contexts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">context&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: my-cluster
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">user&lt;/span>: my-user
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: my-context
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">current-context&lt;/span>: my-context
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">preferences&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">users&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: my-user
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">user&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">exec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiVersion&lt;/span>: client.authentication.k8s.io/v1alpha1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">args&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - token
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - -i
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - my-eks-cluster
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">command&lt;/span>: aws-iam-authenticator
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Advanced Operator Configuration</title><link>/continuous-deployment/installation/armory-operator/op-advanced-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-advanced-config/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="custom-halyard-configuration">Custom Halyard configuration&lt;/h2>
&lt;p>To override Halyard&amp;rsquo;s configuration, create a Kubernetes &lt;a href="https://kubernetes.io/docs/concepts/configuration/configmap/">ConfigMap&lt;/a> with the configuration changes you need. For example, if you&amp;rsquo;re using &lt;a href="/continuous-deployment/armory-admin/secrets/secrets-vault/">secrets management with Vault&lt;/a>(&lt;img src="/images/proprietary.svg" alt="Proprietary">), Halyard and Operator containers need your Vault configuration:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: ConfigMap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: halyard-custom-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">data&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">halyard-local.yml&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> secrets:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> vault:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: true
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> url: &amp;lt;URL of vault server&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> path: &amp;lt;cluster path&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> role: &amp;lt;k8s role&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> authMethod: KUBERNETES&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then, you can mount it in the Operator deployment and make it available to the Halyard and Operator containers:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: extensions/v1beta1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Deployment
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">template&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">containers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">volumeMounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">mountPath&lt;/span>: /opt/spinnaker/config/halyard.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: halconfig-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subPath&lt;/span>: halyard-local.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: halyard
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">volumeMounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">mountPath&lt;/span>: /opt/spinnaker/config/halyard-local.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: halconfig-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subPath&lt;/span>: halyard-local.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">volumes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">configMap&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultMode&lt;/span>: &lt;span style="color:#bd93f9">420&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: halyard-custom-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: halconfig-volume
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="patching-runtime-resources-with-kustomize">Patching Runtime Resources with Kustomize&lt;/h2>
&lt;p>Your Kubernetes cluster may require additional sidecars or configuration
present when managing Spinnaker resources. In these situations, the Armory
Operator provides the ability to patch resources during reconciliation. These
patches are executed via an embedded Kustomize instance in the Operator, and
requires no additional installation on the user&amp;rsquo;s part. You can apply Kustomize
patches at two levels of specificity:&lt;/p>
&lt;ul>
&lt;li>Spinnaker as a whole&lt;/li>
&lt;li>Individual services within Spinnaker&lt;/li>
&lt;/ul>
&lt;p>Additionally, you may make changes to the following resources generated by
the Operator:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Deployment&lt;/code> manifests&lt;/li>
&lt;li>&lt;code>Service&lt;/code> manifests&lt;/li>
&lt;/ul>
&lt;p>For example, to ensure that a &lt;code>ConfigMap&lt;/code> is present on all Spinnaker services,
you would add the following configuration block to your &lt;code>SpinnakerService&lt;/code>
config:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">kustomize&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">spinnaker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">deployment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">patchesJson6902&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> - op: add
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> path: /spec/template/spec/volumes/-
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> value:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> name: custom-volume
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> configMap:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> name: custom-volume
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> - op: add
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> path: /spec/template/spec/containers/0/volumeMounts/-
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> value:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> mountPath: /opt/spinnaker/config/foo
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> type: configMap
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> name: custom-volume&lt;/span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>The previous configuration sample indicates how to specify patches in the
&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patchesjson6902/">&lt;code>patchesJson6902&lt;/code>
format&lt;/a>,
that mounts a &lt;code>ConfigMap&lt;/code> called &lt;code>custom-volume&lt;/code> into the
&lt;code>/opt/spinnaker/config/foo&lt;/code> namespace.&lt;/p>
&lt;p>When you no longer need the patches, you can remove them from the Operator
config and they will be removed on next reconciliation for your cluster.&lt;/p>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Errors and Troubleshooting</title><link>/continuous-deployment/installation/armory-operator/op-troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-troubleshooting/</guid><description>
&lt;h2 id="reconciler-error">Reconciler error&lt;/h2>
&lt;p>You may see this error even though Operator successfully applies your manifest.
This error may be normal depending on the frequency of the error. Controllers work with a local cache that can be out of sync. The issue should resolve itself via repeated synchronization. One error may be fine since it&amp;rsquo;s in the design of the reconciler. Too many means something is wrong.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;level&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;error&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;ts&amp;#34;&lt;/span>: &lt;span style="color:#bd93f9">1592879777.6785922&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;logger&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;controller-runtime.controller&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;msg&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Reconciler error&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;controller&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;spinnakerservice-controller&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;request&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;spinnaker-migration/spinnaker&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;error&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Operation cannot be fulfilled on spinnakerservices.spinnaker.armory.io
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> \&amp;#34;spinnaker\&amp;#34;: the object has been modified; please apply your changes to the latest version and try again&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;stacktrace&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;github.com/go-logr/zapr.(*zapLogger).Error
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/github.com/go-logr/zapr/zapr.go:128
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:218
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:192
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).worker
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:171
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:152
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> k8s.io/apimachinery/pkg/util/wait.JitterUntil
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:153
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> k8s.io/apimachinery/pkg/util/wait.Until
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="kustomize-panic-error">Kustomize &lt;code>panic&lt;/code> error&lt;/h2>
&lt;p>If you installed Kustomize standalone, Kustomize v4.0+ &lt;code>kustomize build&lt;/code> throws a &lt;code>panic&lt;/code> error when it tries to parse and build using the patch files in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo. For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>panic: runtime error: index out of range &lt;span style="color:#ff79c6">[&lt;/span>145&lt;span style="color:#ff79c6">]&lt;/span> with length &lt;span style="color:#bd93f9">145&lt;/span> &lt;span style="color:#ff79c6">[&lt;/span>recovered&lt;span style="color:#ff79c6">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> panic: runtime error: index out of range &lt;span style="color:#ff79c6">[&lt;/span>145&lt;span style="color:#ff79c6">]&lt;/span> with length &lt;span style="color:#bd93f9">145&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Starting with &lt;code>kubectl&lt;/code> v1.21 , the bundled Kustomize version is v4.0.5, so if you execute &lt;code>kubectl kustomize .&lt;/code>, you also see this error.&lt;/p>
&lt;p>Solution:&lt;/p>
&lt;ul>
&lt;li>Downgrade standalone Kustomize to v3.8.10.&lt;/li>
&lt;li>Downgrade to &lt;code>kubectl&lt;/code> v1.19.&lt;/li>
&lt;/ul>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator: contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/li>
&lt;li>Spinnaker Operator: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Armory Continuous Deployment Manifest Configuration Reference</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/</guid><description/></item></channel></rss>