<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – Get Started with the Armory Scale Agent for Spinnaker and Kubernetes</title><link>/plugins/scale-agent/install/</link><description>Recent content in Get Started with the Armory Scale Agent for Spinnaker and Kubernetes on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/plugins/scale-agent/install/index.xml" rel="self" type="application/rss+xml"/><item><title>Plugins: Quick Start: Spinnaker and the Armory Scale Agent</title><link>/plugins/scale-agent/install/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/install/quickstart/</guid><description>
&lt;h2 id="quick-start-overview">Quick start overview&lt;/h2>
&lt;p>In this guide, you deploy a basic instance of Spinnaker 1.28+ and the corresponding Scale Agent plugin and service. You can evaluate:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/">Dynamic accounts&lt;/a> for dynamically adding and managing Kubernetes accounts&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/#automatic-account-migration">Automated scanning&lt;/a> for newly created accounts in Clouddriver and migrating those accounts to Scale Agent management&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/#clouddriver-account-management-api-request-interception">Intercepting and processing requests&lt;/a> sent to Clouddriver&amp;rsquo;s &lt;code>&amp;lt;GATE-URL&amp;gt;/credentials&lt;/code> endpoint&lt;/li>
&lt;/ul>
&lt;h3 id="objectives">Objectives&lt;/h3>
&lt;ol>
&lt;li>Meet the requirements listed in the &lt;a href="#before-you-begin">Before you begin&lt;/a> section.&lt;/li>
&lt;li>&lt;a href="#options-for-migrating-accounts">Learn the options for migrating Clouddriver accounts to the Scale Agent&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#deploy-the-spinnaker-operator">Deploy the Spinnaker Operator&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#get-the-spinnaker-kustomize-patches-repo">Get the spinnaker-kustomize-patches repo&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#configure-spinnaker">Configure Spinnaker&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#deploy-spinnaker">Deploy Spinnaker and the Scale Agent&lt;/a>.&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>Since this guide is for installing the Armory Scale Agent in a test environment, it does not include &lt;a href="/plugins/scale-agent/tasks/configure-mtls/">mTLS configuration&lt;/a>. The Scale Agent service and plugin do not communicate securely.&lt;/p>
&lt;/blockquote>
&lt;h2 id="before-you-begin">Before you begin&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 read how Armory&amp;rsquo;s operators &lt;a href="/continuous-deployment/installation/armory-operator/#how-the-armory-operator-and-the-spinnaker-operator-work">deploy Spinnaker or Armory CD&lt;/a>.&lt;/li>
&lt;li>You have a cluster with at least least 4 cores and 16 GB of RAM available.&lt;/li>
&lt;/ul>
&lt;h2 id="options-for-migrating-kubernetes-accounts">Options for migrating Kubernetes accounts&lt;/h2>
&lt;p>In Spinnaker, you can configure Kubernetes accounts in multiple places:&lt;/p>
&lt;ul>
&lt;li>Clouddriver configuration files: &lt;code>clouddriver.yml&lt;/code>, &lt;code>clouddriver-local.yml&lt;/code>, &lt;code>spinnaker.yml&lt;/code>, &lt;code>spinnaker-local.yml&lt;/code>&lt;/li>
&lt;li>Clouddriver database: &lt;code>clouddriver.accounts&lt;/code> table&lt;/li>
&lt;li>Spring Cloud Config Server reading accounts from Git, Vault, or another supported backend&lt;/li>
&lt;li>Plugins&lt;/li>
&lt;/ul>
&lt;p>You have the following options for migrating accounts to the Scale Agent:&lt;/p>
&lt;ol>
&lt;li>You can configure the Scale Agent service to manage specific accounts by adding those accounts to a ConfigMap. This approach means you should remove the accounts from the Clouddriver credential source before you deploy the service.&lt;/li>
&lt;li>You can &lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/">dynamically migrate accounts&lt;/a> after the service has been deployed. This requires &lt;code>kubectl&lt;/code> access to the cluster so you can port-forward the endpoint to your local machine.&lt;/li>
&lt;/ol>
&lt;p>This guide shows you how to statically add an account to the Scale Agent service configuration before deployment.&lt;/p>
&lt;h2 id="deploy-the-spinnaker-operator">Deploy the Spinnaker Operator&lt;/h2>
&lt;p>Decide which &lt;a href="https://github.com/armory/spinnaker-operator/releases">Spinnaker Operator release&lt;/a> you need based on the Kubernetes version you are using.&lt;/p>
&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">1.22+&lt;/td>
&lt;td style="text-align:left">1.3+&lt;/td>
&lt;td style="text-align:left">1.27+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">1.21&lt;/td>
&lt;td style="text-align:left">1.2.5&lt;/td>
&lt;td style="text-align:left">1.27+&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ol>
&lt;li>
&lt;p>Fetch the Spinnaker Operator.&lt;/p>
&lt;p>Replace &lt;code>&amp;lt;release-version&amp;gt;&lt;/code> with a specific version or use &lt;code>latest&lt;/code> to fetch the latest release.&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/&amp;lt;release-version&amp;gt;/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>From the root of your &lt;code>spinnaker-operator&lt;/code> directory, install the Spinnaker Operator CRDs cluster-wide.&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>Install the Spinnaker Operator in namespace &lt;code>spinnaker&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/operator/cluster
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify that the Spinnaker Operator is running before you deploy 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 get pods -n spinnaker | grep operator
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Output is similar to:&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>spinnaker-operator-79599cbf55-js5pg 2/2 Running &lt;span style="color:#bd93f9">0&lt;/span> 159m
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="get-the-spinnaker-kustomize-patches-repo">Get the 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-spinnaker">Configure Spinnaker&lt;/h2>
&lt;p>You can find the recipe for deploying Spinnaker and the Scale Agent in &lt;code>recipes/kustomization-oss-agent.yml&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:#6272a4">#-------------------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Minimum Starting Point Recipe with Armory Scale Agent.&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&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># additional configuration needed. This is intended as a starting point for any&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># kubernetes cluster. 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"># - Spinnaker Operator&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) using the Scale Agent&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">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - infrastructure/mysql.yml &lt;span style="color:#6272a4"># (Optional, not for production use). MySQL server needed if using SQL backend in Spinnaker&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">components&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - core/base &lt;span style="color:#6272a4"># Defines base configuration across the cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - core/persistence/in-cluster &lt;span style="color:#6272a4"># Enables persistence using MinIO in-cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - targets/kubernetes/scale-agent &lt;span style="color:#6272a4"># Enables the plugin version of the Scale Agent&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">patchesStrategicMerge&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - core/patches/oss-version.yml &lt;span style="color:#6272a4"># Sets the OSS version to use &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - persistence/patch-sql-clouddriver.yml &lt;span style="color:#6272a4"># setup clouddriver to use SQL for storage&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">transformers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - utilities/unique-service-account.yml &lt;span style="color:#6272a4"># Ensures that ServiceAccounts are unique &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"># This patch ensures that the correct OSS apiVersion is used.&lt;/span>
&lt;/span>&lt;/span>&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;ul>
&lt;li>The &lt;code>resources&lt;/code> &lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/resource/">section&lt;/a> contains files that install apps that you want Spinnaker to use, such as MySQL.&lt;/li>
&lt;li>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. This section contains a link to the &lt;code>targets/kubernetes/scale-agent&lt;/code> directory, which contains the Scale Agent installation files.&lt;/li>
&lt;li>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;/li>
&lt;li>The &lt;code>patches&lt;/code> &lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patches/">section&lt;/a> is a list of files that Kustomize executes to add or replace fields on resources. The &lt;code>utilities/switch-to-oss.yml&lt;/code> patch instructs Kustomize to replace &lt;code>apiVersion: spinnaker.armory.io/v1alpha2&lt;/code> with &lt;code>apiVersion: spinnaker.io/v1alpha2&lt;/code> in the SpinnakerService manifest.&lt;/li>
&lt;li>The &lt;code>transformers&lt;/code> section contains links to files that define Kustomize &lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/glossary/#transformer">&lt;em>transformers&lt;/em>&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h3 id="what-this-recipe-does">What this recipe does&lt;/h3>
&lt;ul>
&lt;li>Configures MinIO as the persistent storage provider (instead of Redis or cloud storage)&lt;/li>
&lt;li>Installs MySQL and configures Clouddriver to use MySQL&lt;/li>
&lt;li>Enables Clouddriver Account Management&lt;/li>
&lt;li>Installs the plugin&lt;/li>
&lt;li>Creates a ServiceAccount, ClusterRole, and ClusterRoleBinding for the Scale Agent service&lt;/li>
&lt;li>Deploys the service&lt;/li>
&lt;/ul>
&lt;h3 id="what-this-recipe-does-not-do">What this recipe does not do&lt;/h3>
&lt;ul>
&lt;li>Publicly expose Spinnaker services&lt;/li>
&lt;li>Configure mTLS; communication between the plugin and service is not secure&lt;/li>
&lt;/ul>
&lt;h3 id="spinnaker-version">Spinnaker version&lt;/h3>
&lt;p>To change the Spinnaker version, update &lt;code>spec.spinnakerConfig.config.version&lt;/code> in &lt;code>core/patches/oss-version.yml&lt;/code>.&lt;/p>
&lt;p>If you chose a Spinnaker version earlier than 1.28, you should modify the &lt;code>targets/kubernetes/scale-agent/plugin-config&lt;/code> file to disable Clouddriver Account Management as in the following 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-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">clouddriver&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">account&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">storage&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 style="color:#6272a4"># This enables Clouddriver Account Management; requires Armory CD 2.28+ or Spinnaker 1.28+&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="configure-your-kubernetes-account">Configure your Kubernetes account&lt;/h3>
&lt;p>You should configure a Kubernetes account or accounts for the Scale Agent service to manage. You do this in &lt;code>targets/kubernetes/scale-agent/armory-agent.yml&lt;/code>.&lt;/p>
&lt;p>Add your Kubernetes accounts to the &lt;code>kubernetes.accounts&lt;/code> section. 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-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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>: /kubeconfigfiles/kubeconfig
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: agent-demo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="deploy-spinnaker">Deploy Spinnaker&lt;/h2>
&lt;p>Execute all commands from the root of &lt;code>spinnaker-kustomize-patches&lt;/code>.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Set the kustomize recipe.&lt;/p>
&lt;p>The &lt;code>kustomization.yml&lt;/code> file in the project root is a symlink to &lt;code>recipes/kustomization-all.yml&lt;/code>. Update to point to &lt;code>recipes/kustomization-oss-agent.yml&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>ln -vfns ./recipes/kustomization-oss-agent.yml kustomization.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&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 kustomization.yml
&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&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-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl apply -k .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify the installation.&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 &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">echo&lt;/span> &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span> &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> kubectl -n spinnaker get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can also access the Clouddriver log to verify that the plugin is running and communicating with the service.&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 logs deployment/spin-clouddriver | grep -E &lt;span style="color:#f1fa8c">&amp;#34;Start plugin|Starting Kubesvc plugin|Registering agent with&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="confirm-success">Confirm success&lt;/h2>
&lt;p>If you haven&amp;rsquo;t publicly exposed Spinnaker based on your cloud provider&amp;rsquo;s guides, you should &lt;code>port-forward&lt;/code> in order to access the Spinnaker UI and API:&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:#6272a4"># port-forward for the UI&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl port-forward svc/spin-deck 9000:9000 -n spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># port-forward for the API&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl port-forward svc/spin-gate 8084:8084 -n spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create a pipeline with a &lt;code>Deploy manifest&lt;/code> stage. You should see your target cluster available in the &lt;code>Accounts&lt;/code> list. Deploy a static manifest.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/"}>Dynamic Accounts Architecture and Features&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/migrate-accounts/"}>Migrate Clouddriver Kubernetes Accounts to the Armory Scale Agent&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/troubleshooting/"}>Troubleshoot the Armory Scale Agent Service and Plugin&lt;/a> page if you run into issues.&lt;/li>
&lt;/ul></description></item><item><title>Plugins: Install the Armory Scale Agent in an Existing Spinnaker Instance</title><link>/plugins/scale-agent/install/install-spin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/install/install-spin/</guid><description>
&lt;h2 id="how-to-get-started-using-the-scale-agent-with-open-source-spinnaker">How to get started using the Scale Agent with open source Spinnaker&lt;/h2>
&lt;p>This guide assumes you want to evaluate the Scale Agent with an existing Spinnaker test instance. With that in mind:&lt;/p>
&lt;ol>
&lt;li>Your Spinnaker test instance is running in the &lt;code>spinnaker&lt;/code> namespace.&lt;/li>
&lt;li>You have Kubernetes accounts configured in Clouddriver so you can evaluate account migration.&lt;/li>
&lt;li>You are going to deploy the Scale Agent service in the same cluster and namespace as your Spinnaker test instance.&lt;/li>
&lt;/ol>
&lt;p>The following features require Spinnaker 1.28+ and &lt;a href="https://spinnaker.io/docs/setup/other_config/accounts/">Clouddriver Account Management&lt;/a>:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/#automatic-account-migration">Automated scanning&lt;/a> for newly created accounts in Clouddriver and migrating those accounts to Scale Agent management&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/#clouddriver-account-management-api-request-interception">Intercepting and processing requests&lt;/a> sent to Clouddriver&amp;rsquo;s &lt;code>&amp;lt;GATE-URL&amp;gt;/credentials&lt;/code> endpoint&lt;/li>
&lt;/ul>
&lt;h3 id="objectives">Objectives&lt;/h3>
&lt;ol>
&lt;li>Meet the prerequisites outlined in the Before you begin section.&lt;/li>
&lt;li>&lt;a href="#install-the-plugin">Configure the Clouddriver plugin in your &lt;code>clouddriver-local.yml&lt;/code> file and deploy using Halyard&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#options-for-migrating-accounts">Learn the options for migrating Clouddriver accounts to the Scale Agent&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#deploy-the-armory-scale-agent-service">Configure and deploy the Scale Agent service&lt;/a> in the cluster and namespace where Spinnaker is running (&lt;a href="/plugins/scale-agent/install/advanced/modes/#spinnaker-service-mode">Spinnaker Service mode&lt;/a>).&lt;/li>
&lt;li>&lt;a href="#confirm-success">Confirm success&lt;/a>.&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>Since this guide is for installing the Armory Scale Agent in a test environment, it does not include &lt;a href="/plugins/scale-agent/tasks/configure-mtls/">mTLS configuration&lt;/a>. The Armory Agent service and plugin do not communicate securely.&lt;/p>
&lt;/blockquote>
&lt;h3 id="before-you-begin">Before you begin&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>You are familiar with how plugins work in Spinnaker. See open source Spinnaker&amp;rsquo;s &lt;a href="https://spinnaker.io/docs/guides/user/plugins-users/">Plugin User Guide&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You have read the Scale Agent &lt;a href="/plugins/scale-agent/">overview&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You have configured Clouddriver to use MySQL or PostgreSQL. See the &lt;a href="/continuous-deployment/armory-admin/clouddriver-sql-configure/"}>Configure Clouddriver to use a SQL Database&lt;/a> guide for instructions. The Scale Agent plugin uses the SQL database to store cache data and dynamically created Kubernetes accounts.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For Clouddriver pods, you have mounted a service account with permissions to &lt;code>list&lt;/code> and &lt;code>watch&lt;/code> the Kubernetes kind &lt;code>Endpoint&lt;/code> in the namespace where Clouddriver 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-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: rbac.authorization.k8s.io/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Role
&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>: spin-sa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">rules&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - endpoints
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify that there is a Kubernetes Service with prefix name &lt;code>spin-clouddriver&lt;/code> (configurable) routing HTTP traffic to Clouddriver pods, having a port with name &lt;code>http&lt;/code> (configurable).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You have at least one Kubernetes cluster to serve as your deployment target cluster.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Choose the Scale Agent version that is compatible with your Spinnaker version.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Armory CD (Spinnaker) Version&lt;/th>
&lt;th style="text-align:left">Scale Agent Plugin Version&lt;/th>
&lt;th style="text-align:left">Scale Agent Service Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">2.28.x (1.28.x)&lt;/td>
&lt;td style="text-align:left">0.11.56&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">1.29.x&lt;/td>
&lt;td style="text-align:left">0.12.21&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">2.30.x (1.30.x)&lt;/td>
&lt;td style="text-align:left">0.13.20&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">2.31.x (1.31.x)&lt;/td>
&lt;td style="text-align:left">0.14.1&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">2.32.x (1.32.x)&lt;/td>
&lt;td style="text-align:left">0.14.1&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">2.35.x (1.35.x)&lt;/td>
&lt;td style="text-align:left">0.16.2&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Database compatibility:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">MySQL&lt;/th>
&lt;th style="text-align:left">PostgreSQL&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">5.7; AWS Aurora&lt;/td>
&lt;td style="text-align:left">10&amp;#43;&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/li>
&lt;/ul>
&lt;h2 id="install-the-plugin">Install the plugin&lt;/h2>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
The Scale Agent plugin extends Clouddriver. When Halyard adds a plugin to a Spinnaker installation, it adds the plugin repository information to each service. This means that when you restart Spinnaker, each service restarts, downloads the plugin, and checks if an extension exists for that service. Each service restarting is not ideal for large Spinnaker installations due to service restart times. To avoid each service restarting and downloading the plugin, configure the plugin in Clouddriver’s local profile.
&lt;/div>
&lt;blockquote>
&lt;p>This guide show how to install the plugin using a plugin repository. You can also &lt;a href="/plugins/scale-agent/install/advanced/plugin-docker/">install the plugin from Docker&lt;/a> if you want to cache the plugin and run security scans on it before installation.&lt;/p>
&lt;/blockquote>
&lt;p>If you don&amp;rsquo;t have a Clouddriver local profile, create one in the same directory as the other Halyard configuration files. This is usually &lt;code>~/.hal/default/profiles&lt;/code> on the machine where Halyard is running.&lt;/p>
&lt;p>Add the following to your &lt;code>clouddriver-local.yml&lt;/code> file:&lt;/p>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-11" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-11-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-11-00" role="tab"
aria-controls="tabs-11-00" aria-selected="false">
&lt;strong>Spinnaker Version&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-11-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-11-01" role="tab"
aria-controls="tabs-11-01" aria-selected="true">
1.28+
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-11-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-11-02" role="tab"
aria-controls="tabs-11-02" aria-selected="false">
1.27
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-11-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-11-00" role="tabpanel" aria-labelled-by="tabs-11-00-tab" tabindex="11">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-11-01" role="tabpanel" aria-labelled-by="tabs-11-01-tab" tabindex="11">
&lt;p>This code snippet includes enabling Clouddriver Account Management configuration so you can evaluate the Scale Agent&amp;rsquo;s interceptor and automatic scanning features.&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">spinnaker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">extensibility&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory-agent-k8s-spinplug-releases&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">url&lt;/span>: https://raw.githubusercontent.com/armory-io/agent-k8s-spinplug-releases/master/repositories.json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">Armory.Kubesvc&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">version&lt;/span>: &lt;span style="color:#bd93f9">0.16.2&lt;/span> &lt;span style="color:#6272a4"># check compatibility matrix for your Armory CD version&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">extensions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory.kubesvc&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:#6272a4"># Plugin config&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubesvc&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spinnaker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">extensibility&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory-agent-k8s-spinplug-releases&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">url&lt;/span>: https://raw.githubusercontent.com/armory-io/agent-k8s-spinplug-releases/master/repositories.json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">Armory.Kubesvc&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">version&lt;/span>: &lt;span style="color:#bd93f9">0.11.32&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">extensions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory.kubesvc&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">kubesvc&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&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">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:#6272a4"># enable Clouddriver Account Management https://spinnaker.io/docs/setup/other_config/accounts/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">account&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">storage&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;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-11-02" role="tabpanel" aria-labelled-by="tabs-11-02-tab" tabindex="11">
&lt;p>This code snippet &lt;strong>does not&lt;/strong> enable Clouddriver Account Management, which is not supported in Spinnaker versions 1.27.x and earlier.&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">spinnaker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">extensibility&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory-agent-k8s-spinplug-releases&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">url&lt;/span>: https://raw.githubusercontent.com/armory-io/agent-k8s-spinplug-releases/master/repositories.json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">Armory.Kubesvc&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">version&lt;/span>: &lt;span style="color:#bd93f9">0.14.1&lt;/span> &lt;span style="color:#6272a4"># check compatibility matrix for your Spinnaker version&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">extensions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory.kubesvc&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">kubesvc&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&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">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Save your file and apply your changes by running &lt;code>hal deploy apply&lt;/code>. Kubernetes terminates the existing Clouddriver pod and creates a new one. You can validate plugin installation by executing &lt;code>kubectl -n spinnaker logs deployments/spin-clouddriver | grep &amp;quot;Plugin&amp;quot;&lt;/code>. Output is similar to:&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>org.pf4j.AbstractPluginManager : Plugin &lt;span style="color:#f1fa8c">&amp;#39;Armory.Kubesvc@0.11.32&amp;#39;&lt;/span> resolved
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>org.pf4j.AbstractPluginManager : Start plugin &lt;span style="color:#f1fa8c">&amp;#39;Armory.Kubesvc@0.11.32&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>io.armory.kubesvc.KubesvcPlugin : Starting Kubesvc plugin...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="expose-clouddriver-as-a-loadbalancer">Expose Clouddriver as a LoadBalancer&lt;/h3>
&lt;p>To expose Clouddriver as a Kubernetes-type LoadBalancer, &lt;code>kubectl&lt;/code> apply the following 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>&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">namespace&lt;/span>: spinnaker
&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-clouddriver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-clouddriver-grpc
&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>: grpc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">9091&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">9091&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-clouddriver
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;blockquote>
&lt;p>Various cloud providers may require additional annotations for LoadBalancer. Consult your cloud provider&amp;rsquo;s documentation.&lt;/p>
&lt;/blockquote>
&lt;p>Apply the manifest using &lt;code>kubectl&lt;/code>.&lt;/p>
&lt;h3 id="get-the-loadbalancer-ip-address">Get the LoadBalancer IP address&lt;/h3>
&lt;p>Use &lt;code>kubectl get svc spin-clouddriver-grpc -n spinnaker&lt;/code> to make note of the LoadBalancer IP external address. You need this address when you configure the Scale Agent service.&lt;/p>
&lt;h3 id="confirm-clouddriver-is-listening">Confirm Clouddriver is listening&lt;/h3>
&lt;p>Use &lt;code>netcat&lt;/code> to confirm Clouddriver is listening on port 9091 by executing &lt;code>nc -zv [LB address] 9091&lt;/code>. Perform this check from a node in your Spinnaker cluster and one in your target cluster.&lt;/p>
&lt;h2 id="options-for-migrating-accounts">Options for migrating accounts&lt;/h2>
&lt;p>In Spinnaker, you can configure Kubernetes accounts in multiple places:&lt;/p>
&lt;ul>
&lt;li>Clouddriver configuration files: &lt;code>clouddriver.yml&lt;/code>, &lt;code>clouddriver-local.yml&lt;/code>, &lt;code>spinnaker.yml&lt;/code>, &lt;code>spinnaker-local.yml&lt;/code>&lt;/li>
&lt;li>Clouddriver database: &lt;code>clouddriver.accounts&lt;/code> table&lt;/li>
&lt;li>Spring Cloud Config Server reading accounts from Git, Vault, or another supported backend&lt;/li>
&lt;li>Plugins&lt;/li>
&lt;/ul>
&lt;p>You have the following options for migrating accounts:&lt;/p>
&lt;ol>
&lt;li>You can configure the Scale Agent service to manage specific accounts by adding those accounts to a ConfigMap. This approach means you should remove the accounts from the Clouddriver credential source before you deploy the service.&lt;/li>
&lt;li>You can &lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/">dynamically migrate accounts&lt;/a> after the service has been deployed. This requires &lt;code>kubectl&lt;/code> access to the cluster so you can port-forward the endpoint to your local machine.&lt;/li>
&lt;/ol>
&lt;p>This guide shows you how to statically add an account to the Scale Agent service configuration before deployment.&lt;/p>
&lt;h2 id="deploy-the-service-using-manifests">Deploy the service using manifests&lt;/h2>
&lt;p>The Scale Agent service &lt;em>can&lt;/em> run with most features on the &lt;a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/">default ServiceAccount&lt;/a>. However, if you want the Scale Agent service to load balance connections or assign a precise Zone ID, the Scale Agent service needs permissions to get Pods, Deployments, ReplicaSets, and Namespaces in your cluster. Rather than modifying the default ServiceAccount permissions, Armory recommends creating a new ServiceAccount, ClusterRole, and ClusterRoleBinding for the Scale Agent.&lt;/p>
&lt;h3 id="configure-permissions">Configure permissions&lt;/h3>
&lt;p>The following manifest creates a ServiceAccount, ClusterRole, and ClusterRoleBinding. Apply the manifest in your &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-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Create agent cluster role&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: rbac.authorizati
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: rbac.authorization.k8s.io/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: ClusterRole
&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>: scale-agent-cluster-role
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">rules&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - configmaps
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - endpoints
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - events
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ingresses
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ingresses/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - jobs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - jobs/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - namespaces
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - namespaces/finalize
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - namespaces/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - pods
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - pods/log
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - pods/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - secrets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - services
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - services/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - services/finalizers
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - batch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - jobs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - jobs/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - apps
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - extensions
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - daemonsets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - daemonsets/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - deployments
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - deployments/finalizers
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - deployments/scale
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - deployments/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - replicasets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - replicasets/finalizers
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - replicasets/scale
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - replicasets/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - statefulsets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - statefulsets/finalizers
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - statefulsets/scale
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - statefulsets/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - monitoring.coreos.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - servicemonitors
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - spinnaker.armory.io
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - spinnakerservices
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - apiextensions.k8s.io
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - customresourcedefinitions
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admissionregistration.k8s.io
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - validatingwebhookconfigurations
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - argoproj.io
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;*&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"># Create agent service account&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>: ServiceAccount
&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">namespace&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: scale-agent-sa
&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"># Bind agent cluster role and service account&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: ClusterRoleBinding
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: rbac.authorization.k8s.io/v1
&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>: scale-agent-cluster-role-binding
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">subjects&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kind&lt;/span>: ServiceAccount
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: scale-agent-sa
&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 style="color:#ff79c6">roleRef&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiGroup&lt;/span>: rbac.authorization.k8s.io
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kind&lt;/span>: ClusterRole
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: scale-agent-cluster-role
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 id="configure-the-service">Configure the service&lt;/h3>
&lt;p>Configure the Armory Scale Agent service using a &lt;a href="https://kubernetes.io/docs/concepts/configuration/configmap/">ConfigMap&lt;/a>. In the &lt;code>data&lt;/code> section, configure the LoadBalancer and and the Kubernetes account you want the Scale Agent to manage.&lt;/p>
&lt;p>Define &lt;code>armory-agent.yml&lt;/code> in the &lt;code>data&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">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>: armory-agent-config
&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 style="color:#ff79c6">data&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory-agent.yml&lt;/span>: |
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Clouddriver plugin LoadBalancer&lt;/strong>&lt;/p>
&lt;p>Replace &lt;strong>&lt;LoadBalancer-exposed-address>&lt;/strong> with the IP address you obtained in the &lt;a href="#get-the-loadbalancer-ip-address">Get the LoadBalancer IP address section&lt;/a>.&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>: armory-agent-config
&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 style="color:#ff79c6">data&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory-agent.yaml&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"> clouddriver:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> grpc: &amp;lt;LoadBalancer-exposed-address&amp;gt;:9091
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> insecure: true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Kubernetes account&lt;/strong>&lt;/p>
&lt;p>Add your Kubernetes account configuration. This account should not exist in 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">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>: armory-agent-config
&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 style="color:#ff79c6">data&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory-agent.yaml&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"> clouddriver:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> grpc: &amp;lt;LoadBalancer-exposed-address&amp;gt;:9091
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> insecure: true
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> kubernetes:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> accounts:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> - name:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> kubeconfigFile:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> insecure:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> context:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> oAuthScopes:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> serviceAccount: true
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> serviceAccountName: spin-sa
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> namespaces: []
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> omitNamespaces: []
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> onlyNamespacedResources:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> kinds: []
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> omitKinds: []
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> customResourceDefinitions: [{kind:}]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> metrics:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> permissions: []
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> maxResumableResourceAgeMs:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> onlySpinnakerManaged:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> noProxy:&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See the &lt;a href="/plugins/scale-agent/reference/config/service-options/#configuration-options">Agent options&lt;/a> for field explanations.&lt;/p>
&lt;p>Apply the manifest in your &lt;code>spinnaker&lt;/code> namespace.&lt;/p>
&lt;h3 id="deploy-the-armory-scale-agent-service">Deploy the Armory Scale Agent service&lt;/h3>
&lt;p>Apply the following manifest in your &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-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: apps/v1
&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">namespace&lt;/span>: spinnaker
&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">app.kubernetes.io/name&lt;/span>: armory-agent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app.kubernetes.io/part-of&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-armory-agent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-armory-agent
&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">replicas&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">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">matchLabels&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-armory-agent
&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">metadata&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">app.kubernetes.io/name&lt;/span>: armory-agent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app.kubernetes.io/part-of&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-armory-agent
&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">serviceAccount&lt;/span>: scale-agent-sa
&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">image&lt;/span>: armory/agent-k8s:&amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># must be compatible with your Armory CD version&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">imagePullPolicy&lt;/span>: IfNotPresent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: armory-agent
&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>: health
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">containerPort&lt;/span>: &lt;span style="color:#bd93f9">8082&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">name&lt;/span>: metrics
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">containerPort&lt;/span>: &lt;span style="color:#bd93f9">8008&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">readinessProbe&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">httpGet&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: health
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">path&lt;/span>: /health
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">failureThreshold&lt;/span>: &lt;span style="color:#bd93f9">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">periodSeconds&lt;/span>: &lt;span style="color:#bd93f9">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">successThreshold&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">timeoutSeconds&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">terminationMessagePath&lt;/span>: /dev/termination-log
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">terminationMessagePolicy&lt;/span>: File
&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/armory/config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: volume-armory-agent-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - mountPath: /kubeconfigfiles&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># name: volume-armory-agent-kubeconfigs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">restartPolicy&lt;/span>: Always
&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">name&lt;/span>: volume-armory-agent-config
&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">name&lt;/span>: armory-agent-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - name: volume-armory-agent-kubeconfigs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># secret:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># defaultMode: 420&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># secretName: kubeconfigs-secret&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 id="verify-that-the-plugin-and-service-are-communicating">Verify that the plugin and service are communicating&lt;/h3>
&lt;p>You can access the Clouddriver log to verify that the plugin is running and communicating with the service.&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 logs deployment/spin-clouddriver | grep -E &lt;span style="color:#f1fa8c">&amp;#34;Start plugin|Starting Kubesvc plugin|Registering agent with&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="confirm-success">Confirm success&lt;/h2>
&lt;p>Create a pipeline with a &lt;code>Deploy manifest&lt;/code> stage. You should see your target cluster available in the &lt;code>Accounts&lt;/code> list. Deploy a static manifest.&lt;/p>
&lt;h2 id="uninstall-the-plugin">Uninstall the plugin&lt;/h2>
&lt;p>Remove the Scale Agent plugin config from &lt;code>clouddriver-local.yml&lt;/code> and &lt;code>hal deploy apply&lt;/code> the changes.&lt;/p>
&lt;h2 id="uninstall-the-service">Uninstall the service&lt;/h2>
&lt;p>You can use &lt;code>kubectl&lt;/code> to delete all Scale Agent service&amp;rsquo;s &lt;code>Deployment&lt;/code> objects and their accompanying &lt;code>ConfigMap&lt;/code> and &lt;code>Secret&lt;/code>.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/"}>Dynamic Accounts Architecture and Features&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/migrate-accounts/"}>Migrate Clouddriver Kubernetes Accounts to the Armory Scale Agent&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/troubleshooting/"}>Troubleshoot the Armory Scale Agent Service and Plugin&lt;/a> page if you run into issues.&lt;/li>
&lt;/ul></description></item><item><title>Plugins: Install the Armory Scale Agent in an Existing Armory CD Instance</title><link>/plugins/scale-agent/install/install-armory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/install/install-armory/</guid><description>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>This guide assumes you want to evaluate the Scale Agent with an existing Armory CD test instance that you deployed using the Armory Operator and Kustomize patches (&lt;code>spinnaker-kustomize-patches&lt;/code> &lt;a href="https://github.com/armory/spinnaker-kustomize-patches">repo&lt;/a>). With that in mind:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Your Armory CD test instance is running in the &lt;code>spinnaker&lt;/code> namespace.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Your Clouddriver service uses a SQL backend. The Scale Agent plugin uses the SQL database to store cache data and dynamically created Kubernetes accounts.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You have Kubernetes accounts configured in Clouddriver so you can evaluate account migration.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You are going to deploy the Scale Agent service in the same cluster and namespace as your Armory CD test instance.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You are not going to configure mTLS, so the Scale Agent service and plugin are not going to communicate securely.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Choose the Scale Agent version that is compatible with your Armory CD version.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Armory CD (Spinnaker) Version&lt;/th>
&lt;th style="text-align:left">Scale Agent Plugin Version&lt;/th>
&lt;th style="text-align:left">Scale Agent Service Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">2.28.x (1.28.x)&lt;/td>
&lt;td style="text-align:left">0.11.56&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">1.29.x&lt;/td>
&lt;td style="text-align:left">0.12.21&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">2.30.x (1.30.x)&lt;/td>
&lt;td style="text-align:left">0.13.20&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">2.31.x (1.31.x)&lt;/td>
&lt;td style="text-align:left">0.14.1&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">2.32.x (1.32.x)&lt;/td>
&lt;td style="text-align:left">0.14.1&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">2.35.x (1.35.x)&lt;/td>
&lt;td style="text-align:left">0.16.2&lt;/td>
&lt;td style="text-align:left">1.0.84&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Database compatibility:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">MySQL&lt;/th>
&lt;th style="text-align:left">PostgreSQL&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">5.7; AWS Aurora&lt;/td>
&lt;td style="text-align:left">10&amp;#43;&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/li>
&lt;/ol>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Scale Agent Features Limitation&lt;/h4>
&lt;p>The following Scale Agent features require Armory CD 2.28+ and &lt;a href="https://spinnaker.io/docs/setup/other_config/accounts/">Clouddriver Account Management&lt;/a>:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/#automatic-account-migration">Automated scanning&lt;/a> for newly created accounts in Clouddriver and migrating those accounts to Scale Agent management&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/#clouddriver-account-management-api-request-interception">Intercepting and processing requests&lt;/a> sent to Clouddriver&amp;rsquo;s &lt;code>&amp;lt;GATE-URL&amp;gt;/credentials&lt;/code> endpoint&lt;/li>
&lt;/ul>
&lt;p>If your Armory CD version is earlier than 2.28, see the &lt;em>Configure the plugin&lt;/em> &lt;a href="#configure-the-plugin">section&lt;/a> for how to disable Clouddriver Account Management.&lt;/p>
&lt;/div>
&lt;h2 id="objectives">Objectives&lt;/h2>
&lt;ol>
&lt;li>Read about &lt;a href="#options-for-migrating-kubernetes-accounts">options for migrating Kubernetes accounts&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#access-the-installation-files">Access the latest Scale Agent installation files&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#update-your-kustomization-recipe">Update your local &lt;code>kustomization&lt;/code> recipe&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#configure-the-plugin">Configure the plugin&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#configure-the-service">Configure the service&lt;/a>&lt;/li>
&lt;li>&lt;a href="#install-the-scale-agent">Install the Scale Agent&lt;/a>&lt;/li>
&lt;/ol>
&lt;h2 id="options-for-migrating-kubernetes-accounts">Options for migrating Kubernetes accounts&lt;/h2>
&lt;p>In Armory CD, you can configure Kubernetes accounts in multiple places:&lt;/p>
&lt;ul>
&lt;li>Clouddriver configuration files: &lt;code>clouddriver.yml&lt;/code>, &lt;code>clouddriver-local.yml&lt;/code>, &lt;code>spinnaker.yml&lt;/code>, &lt;code>spinnaker-local.yml&lt;/code>&lt;/li>
&lt;li>Clouddriver database: &lt;code>clouddriver.accounts&lt;/code> table&lt;/li>
&lt;li>Spring Cloud Config Server reading accounts from Git, Vault, or another supported backend&lt;/li>
&lt;li>Plugins&lt;/li>
&lt;/ul>
&lt;p>You have the following options for migrating accounts to the Scale Agent:&lt;/p>
&lt;ol>
&lt;li>You can configure the Scale Agent service to manage specific accounts by adding those accounts to a ConfigMap. This approach means you should remove the accounts from the Clouddriver credential source before you deploy the service.&lt;/li>
&lt;li>You can &lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/">dynamically migrate accounts&lt;/a> after the service has been deployed. This requires &lt;code>kubectl&lt;/code> access to the cluster so you can port-forward the endpoint to your local machine.&lt;/li>
&lt;/ol>
&lt;p>This guide shows you how to statically add an accounts to the Scale Agent service configuration before deployment.&lt;/p>
&lt;h2 id="access-the-installation-files">Access the installation files&lt;/h2>
&lt;p>You can find the files that install the Scale Agent in the &lt;code>spinnaker-kustomize-patches/targets/kubernetes/scale-agent&lt;/code> &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/targets/kubernetes/scale-agent">repo&lt;/a>. Update your local copy from &lt;code>master&lt;/code> to get the latest updates.&lt;/p>
&lt;h2 id="update-your-kustomization-recipe">Update your Kustomization recipe&lt;/h2>
&lt;ul>
&lt;li>&lt;code>components&lt;/code> section: add &lt;code>targets/kubernetes/scale-agent&lt;/code>&lt;/li>
&lt;li>&lt;code>transformers&lt;/code> section: add &lt;code>utilities/unique-service-account.yml&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="configure-the-plugin">Configure the plugin&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Set the plugin version that is compatible with your Armory CD version&lt;/p>
&lt;p>In &lt;code>plugin-config.yml&lt;/code>, check that the version listed is compatible with your Armory CD version. If it isn&amp;rsquo;t, replace with a plugin version that is.&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">clouddriver&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnaker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">extensibility&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory-agent-k8s-spinplug-releases&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">url&lt;/span>: https://raw.githubusercontent.com/armory-io/agent-k8s-spinplug-releases/master/repositories.json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">Armory.Kubesvc&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">version&lt;/span>: &lt;span style="color:#bd93f9">0.11.32&lt;/span> &lt;span style="color:#6272a4"># Replace with a version compatible with your Armory CD version&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">extensions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">armory.kubesvc&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;/code>&lt;/pre>&lt;/div>
&lt;/li>
&lt;li>
&lt;p>(Optional) Disable &lt;a href="https://spinnaker.io/docs/setup/other_config/accounts/">Clouddriver Account Management&lt;/a> if your Armory CD version is earlier than 2.28.&lt;/p>
&lt;p>Set &lt;code>spec.spinnakerConfig.profiles.clouddriver.account.storage.enabled&lt;/code> to &lt;code>false&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">profiles&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">account&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">storage&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;/code>&lt;/pre>&lt;/div>
&lt;/li>
&lt;/ol>
&lt;h2 id="configure-the-service">Configure the service&lt;/h2>
&lt;h3 id="version">Version&lt;/h3>
&lt;p>The Scale Agent service version is set in &lt;code>spinnaker-kustomize-patches/targets/kubernetes/scale-agent/scale-agent-deployment.yml&lt;/code>. You don&amp;rsquo;t have to configure a version in the &lt;code>spec.template.spec.containers.image&lt;/code> field. The manifest pulls the latest version, which is compatible with Armory CD 2.26+ and corresponding plugin versions.&lt;/p>
&lt;h3 id="kubernetes-account">Kubernetes account&lt;/h3>
&lt;p>You should configure a Kubernetes account for the Scale Agent service to manage. You do this in &lt;code>targets/kubernetes/scale-agent/armory-agent.yml&lt;/code>. The Kubernetes account should not exist in Clouddriver.&lt;/p>
&lt;p>Add your Kubernetes accounts to the &lt;code>kubernetes.accounts&lt;/code> section. 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-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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>: /kubeconfigfiles/kubeconfig
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: agent-demo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="install-the-scale-agent">Install the Scale Agent&lt;/h2>
&lt;p>Execute all commands from the root of &lt;code>spinnaker-kustomize-patches&lt;/code>. The following commands assume your Kustomization recipe is named &lt;code>kustomization.yml&lt;/code> and is in the root of your &lt;code>spinnaker-patches-kustomize&lt;/code> directory.&lt;/p>
&lt;ol>
&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 kustomization.yml
&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&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-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl apply -k .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify the installation.&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 &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">echo&lt;/span> &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span> &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> kubectl -n spinnaker get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can also access the Clouddriver log to verify that the plugin is running and communicating with the service.&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 logs deployment/spin-clouddriver | grep -E &lt;span style="color:#f1fa8c">&amp;#34;Start plugin|Starting Kubesvc plugin|Registering agent with&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="confirm-success">Confirm success&lt;/h2>
&lt;p>Create a pipeline with a &lt;code>Deploy manifest&lt;/code> stage. You should see your target cluster available in the &lt;code>Accounts&lt;/code> list. Deploy a static manifest.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/"}>Dynamic Accounts Architecture and Features&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/migrate-accounts/"}>Migrate Clouddriver Kubernetes Accounts to the Armory Scale Agent&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/troubleshooting/"}>Troubleshoot the Armory Scale Agent Service and Plugin&lt;/a> page if you run into issues.&lt;/li>
&lt;/ul></description></item><item><title>Plugins: Advanced Installation and Configuration</title><link>/plugins/scale-agent/install/advanced/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/install/advanced/</guid><description/></item><item><title>Plugins: Uninstall the Scale Agent - Armory Continuous Deployment</title><link>/plugins/scale-agent/install/agent-uninstall/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/install/agent-uninstall/</guid><description>
&lt;h2 id="uninstall-the-plugin">Uninstall the plugin&lt;/h2>
&lt;p>Remove the Scale Agent plugin manifest file entry from your &lt;code>kustomization&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">bases&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - agent-service
&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> - armory-agent/clouddriver-plugin-repo.yaml &lt;span style="color:#6272a4"># or clouddriver-plugin-docker.yaml&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then execute:&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> kustomize build &amp;lt;/path/to/kustomize&amp;gt; | kubectl delete -f -
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="uninstall-the-service">Uninstall the service&lt;/h2>
&lt;p>You can use &lt;code>kubectl&lt;/code> to delete all Scale Agent service&amp;rsquo;s &lt;code>Deployment&lt;/code> objects and their accompanying &lt;code>ConfigMap&lt;/code> and &lt;code>Secret&lt;/code>.&lt;/p></description></item></channel></rss>