<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – Scale Agent for Spinnaker and Kubernetes</title><link>/plugins/scale-agent/</link><description>Recent content in Scale Agent for Spinnaker and Kubernetes on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/plugins/scale-agent/index.xml" rel="self" type="application/rss+xml"/><item><title>Plugins: Get Started with the Armory Scale Agent for Spinnaker and Kubernetes</title><link>/plugins/scale-agent/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/install/</guid><description>
&lt;h2 id="compatibility-matrix">Compatibility matrix&lt;/h2>
&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;h2 id="basic-installation-use-cases">Basic installation use cases&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Installation Use Case&lt;/th>
&lt;th style="text-align:left">Guide&lt;/th>
&lt;th style="text-align:left">Plugin Install&lt;/th>
&lt;th style="text-align:left">Service Deploy&lt;/th>
&lt;th style="text-align:left">K8s Acct Config&lt;/th>
&lt;th style="text-align:left">Mode&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Create a new Spinnaker instance managed by the Spinnaker Operator&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/quickstart/"}>Quick Start: Spinnaker and the Armory Scale Agent&lt;/a>&lt;/td>
&lt;td style="text-align:left">Plugin repository configured in a Kustomize patch&lt;/td>
&lt;td style="text-align:left">Kustomize patches&lt;/td>
&lt;td style="text-align:left">Service&amp;rsquo;s ConfigMap&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/advanced/modes/#spinnaker-service-mode">Spinnaker Service&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Use an existing Spinnaker instance managed by Halyard&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/install-spin/"}>Install the Armory Scale Agent in an Existing Spinnaker Instance&lt;/a>&lt;/td>
&lt;td style="text-align:left">Plugin repository configured in &lt;code>clouddriver-local&lt;/code> file&lt;/td>
&lt;td style="text-align:left">Kubernetes manifests&lt;/td>
&lt;td style="text-align:left">Service&amp;rsquo;s ConfigMap&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/advanced/modes/#spinnaker-service-mode">Spinnaker Service&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Use an existing Armory CD instance managed by the Armory Operator&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/install-armory/"}>Install the Armory Scale Agent in an Existing Armory CD Instance&lt;/a>&lt;/td>
&lt;td style="text-align:left">Plugin repository configured in a Kustomize patch&lt;/td>
&lt;td style="text-align:left">Kustomize patches&lt;/td>
&lt;td style="text-align:left">Service&amp;rsquo;s ConfigMap&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/advanced/modes/#spinnaker-service-mode">Spinnaker Service&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="advanced-installation-use-cases">Advanced installation use cases&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Use Case&lt;/th>
&lt;th style="text-align:left">Guide&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Plugin as a Docker image&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/advanced/plugin-docker/"}>Install the Scale Agent Plugin Using a Docker Image&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Service using a Helm chart&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/advanced/service-deploy/helm/"}>Deploy the Armory Scale Agent Service Using a Helm Chart&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Service deploy modes - Spinnaker Service, Infrastructure, Agent&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/advanced/modes/"}>Armory Scale Agent Service Deployment Modes&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Service configuration&lt;/td>
&lt;td style="text-align:left">&lt;a href="/plugins/scale-agent/install/advanced/config-service/"}>Armory Scale Agent Service Configuration&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="scale-agent-reference">Scale Agent reference&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/plugins/scale-agent/reference/config/plugin-options/"}>Armory Scale Agent Plugin Configuration Options&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/reference/config/service-options/"}>Armory Scale Agent Service Configuration Options&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Plugins: Armory Scale Agent for Spinnaker and Kubernetes Concepts</title><link>/plugins/scale-agent/concepts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/concepts/</guid><description/></item><item><title>Plugins: Tasks</title><link>/plugins/scale-agent/tasks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/tasks/</guid><description/></item><item><title>Plugins: Reference</title><link>/plugins/scale-agent/reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/reference/</guid><description/></item><item><title>Plugins: Troubleshoot the Armory Scale Agent Service and Plugin</title><link>/plugins/scale-agent/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/troubleshooting/</guid><description>
&lt;h2 id="networking-issues">Networking issues&lt;/h2>
&lt;p>Communication between Clouddriver and the Armory Scale Agent must be &lt;code>http/2&lt;/code>. &lt;code>http/1.1&lt;/code> is &lt;em>not&lt;/em> compatible and causes communication issues between Clouddriver and the Armory Scale Agent.&lt;/p>
&lt;h2 id="scale-agent-plugin-messages">Scale Agent plugin messages&lt;/h2>
&lt;p>After a successful plugin installation, the &lt;code>spin-clouddriver-grpc&lt;/code> (or &lt;code>spin-clouddriver-ha-grpc&lt;/code>) service should be running:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ kubectl get service spin-clouddriver-grpc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME TYPE CLUSTER-IP EXTERNAL-IP PORT&lt;span style="color:#ff79c6">(&lt;/span>S&lt;span style="color:#ff79c6">)&lt;/span> AGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spin-clouddriver-grpc ClusterIP 172.20.110.67 &amp;lt;none&amp;gt; 9091/TCP 30s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Clouddriver&amp;rsquo;s log should have the following messages:&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-text" data-lang="text">&lt;span style="display:flex;">&lt;span>2020-10-02 16:23:58.031 INFO 1 --- [ main] org.pf4j.AbstractPluginManager : Start plugin &amp;#39;Armory.Kubesvc@0.4.4&amp;#39;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&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>&lt;/span>&lt;span style="display:flex;">&lt;span>2020-10-02 16:24:10.046 INFO 1 --- [ main] n.d.b.g.s.s.GrpcServerLifecycle : gRPC Server started, listening on address: *, port: 9091
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="kubernetes-clustering">Kubernetes clustering&lt;/h3>
&lt;p>If there are no errors, the log should look like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>Watching kubernetes Endpoints on namespace &lt;span style="color:#ff79c6">{}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If there is any problem watching Endpoints, Clouddriver logs an exception beginning like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Unable to list kubernetes Endpoints in namespace &lt;span style="color:#ff79c6">{}&lt;/span> to discover clouddriver instances. Agent will NOT work &lt;span style="color:#ff79c6">if&lt;/span> running more than one clouddriver replica!
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If there are errors, run these commands inside Clouddriver pods. They should return yes:&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 auth can-i list endpoints
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl auth can-i watch endpoints
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If any of the answers is &lt;strong>no&lt;/strong>, then you need to add a ClusterRole and ClusterRoleBinding so Scale Agent can list/get and watch endpoints in the namespace.&lt;/p>
&lt;details>&lt;summary>Show me how&lt;/summary>
&lt;p>Create a &lt;code>cluster-roles.yml&lt;/code> file with the following contents:&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>: 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>: watch-endpoints
&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> - &lt;span style="color:#f1fa8c">&amp;#34;list&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;get&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;watch&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:#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>: watch-endpoints-rb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespace&lt;/span>: &amp;lt;namespace&amp;gt;
&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>: User
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: system:serviceaccount:&amp;lt;CHANGE_NAMESPACE&amp;gt;:default
&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>: Group
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: system:serviceaccounts
&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">roleRef&lt;/span>:
&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>: watch-endpoints
&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;/code>&lt;/pre>&lt;/div>&lt;p>Be sure to replace &lt;code>&amp;lt;namespace&amp;gt;&lt;/code> with your namespace.&lt;/p>
&lt;p>Apply the manifest using &lt;code>kubectl apply -f cluster-roles.yml&lt;/code>. You should now be able to list and watch endpoints in the namespace.&lt;/p>
&lt;/details>&lt;br>&lt;br>
&lt;p>The output of the REST request &lt;code>GET /armory/clouddrivers&lt;/code> should return all existing Clouddriver pods. If there are missing pods, run this command inside each Clouddriver pod:&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 endpoints
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The result should be 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>NAME ENDPOINTS AGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spin-clouddriver 10.0.11.54:7002,10.0.11.88:7002,10.0.13.152:7002 + &lt;span style="color:#bd93f9">5&lt;/span> more... 9d
&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>kubectl describe endpoints spin-clouddriver
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>There should be one or more entries having &lt;code>NAME&lt;/code> beginning with what is specified in the config setting &lt;code>kubesvc.cluster-kubernetes.clouddriverServiceNamePrefix&lt;/code>, which defaults to &lt;code>spin-clouddriver&lt;/code>. Also, the entry should have at least one port named like what is configured in &lt;code>kubesvc.cluster-kubernetes.httpPortName&lt;/code>, which defaults to &lt;code>http&lt;/code>. Your output should be 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>Name: spin-clouddriver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Namespace: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Labels: &lt;span style="color:#8be9fd;font-style:italic">app&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8be9fd;font-style:italic">cluster&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spin-clouddriver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Annotations: endpoints.kubernetes.io/last-change-trigger-time: 2022-02-23T20:41:39Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Subsets:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Addresses: 10.0.11.54,10.0.11.88,10.0.13.152,10.0.15.176,10.0.15.246,10.0.5.200,10.0.5.39,10.0.7.150
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> NotReadyAddresses: &amp;lt;none&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Ports:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Name Port Protocol
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ---- ---- --------
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> http &lt;span style="color:#bd93f9">7002&lt;/span> TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Events: &amp;lt;none&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The output of the REST request &lt;code>GET /armory/agents&lt;/code> should return valid data regarding which Agents are connected to which Clouddrivers. The field &lt;code>clouddriverAlive&lt;/code> must be true for active connections.&lt;/p>
&lt;p>Your reponse should be 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-json" data-lang="json">&lt;span style="display:flex;">&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">&amp;#34;accounts&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;agentId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;armory-agent-69c7ff7b46-jblql&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;caching&amp;#34;&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">&amp;#34;clouddriverAlive&amp;#34;&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">&amp;#34;clouddriverId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;spin-clouddriver-766c678c6c-4zzzf&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;lastConnection&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2022-02-23T22:18:54.725Z&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;kubernetes&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>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If one account/Agent is associated with more than one Clouddriver instance having &lt;code>clouddriverAlive: true&lt;/code>, it&amp;rsquo;s possible that the balancer Agent that runs every 30 seconds didn&amp;rsquo;t flip the flag to false for dead connections. However, the plugin will just select the Clouddriver with the most recent &lt;code>lastConnection&lt;/code> date.&lt;/p>
&lt;p>If no account/Agent is registered with a Clouddriver having &lt;code>clouddriverAlive: true&lt;/code>, it&amp;rsquo;s possible that the Armory Scale Agent is not connected yet to any Clouddriver.&lt;/p>
&lt;h2 id="testing-grpc-endpoints">Testing gRPC endpoints&lt;/h2>
&lt;p>In Infrastructure or Agent modes, you can test the gRPC endpoints with the
&lt;a href="https://github.com/fullstorydev/grpcurl">&lt;code>grpcurl&lt;/code>&lt;/a> utility.&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>$ grpcurl &amp;lt;your-grpc-endpoint&amp;gt;:&amp;lt;port&amp;gt; list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The default &lt;code>port&lt;/code> is &lt;code>443&lt;/code>.&lt;/p>
&lt;p>Command options:&lt;/p>
&lt;ul>
&lt;li>&lt;code>-plaintext&lt;/code>: if your gRPC endpoint is not configured for TLS&lt;/li>
&lt;li>&lt;code>-insecure&lt;/code>: if you are using TLS with custom certificates&lt;/li>
&lt;/ul>
&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>events.Caching
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grpc.health.v1.Health
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grpc.reflection.v1alpha.ServerReflection
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ops.Operations
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="verbose-logging">Verbose logging&lt;/h3>
&lt;p>You have to change the logging and verbosity levels to display detailed logging output.&lt;/p>
&lt;p>First execute the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">export&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">GRPC_GO_LOG_SEVERITY_LEVEL&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">GRPC_GO_LOG_VERBOSITY_LEVEL&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#bd93f9">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then run &lt;code>grpcurl&lt;/code> with the &lt;code>-v&lt;/code> switch:&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>grpcurl -v &amp;lt;your-grpc-endpoint&amp;gt;:&amp;lt;port&amp;gt; list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>-plaintext&lt;/code> or &lt;code>-insecure&lt;/code> depending on whether your endpoint is configured for TLS.&lt;/p>
&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>INFO: 2021/01/25 22:10:52 parsed scheme: &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 scheme &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span> not registered, fallback to default scheme
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 ccResolverWrapper: sending update to cc: &lt;span style="color:#ff79c6">{[{&lt;/span>192.168.88.133:9091 &amp;lt;nil&amp;gt; &lt;span style="color:#bd93f9">0&lt;/span> &amp;lt;nil&amp;gt;&lt;span style="color:#ff79c6">}]&lt;/span> &amp;lt;nil&amp;gt; &amp;lt;nil&amp;gt;&lt;span style="color:#ff79c6">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 ClientConn switching balancer to &lt;span style="color:#f1fa8c">&amp;#34;pick_first&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 Channel switches to new LB policy &lt;span style="color:#f1fa8c">&amp;#34;pick_first&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 Subchannel Connectivity change to CONNECTING
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 Subchannel picks a new address &lt;span style="color:#f1fa8c">&amp;#34;192.168.88.133:9091&amp;#34;&lt;/span> to connect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 pickfirstBalancer: UpdateSubConnState: 0xc0002996b0, &lt;span style="color:#ff79c6">{&lt;/span>CONNECTING &amp;lt;nil&amp;gt;&lt;span style="color:#ff79c6">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 Channel Connectivity change to CONNECTING
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 Subchannel Connectivity change to READY
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 pickfirstBalancer: UpdateSubConnState: 0xc0002996b0, &lt;span style="color:#ff79c6">{&lt;/span>READY &amp;lt;nil&amp;gt;&lt;span style="color:#ff79c6">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 Channel Connectivity change to READY
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>events.Caching
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grpc.health.v1.Health
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grpc.reflection.v1alpha.ServerReflection
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ops.Operations
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 Channel Connectivity change to SHUTDOWN
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO: 2021/01/25 22:10:52 Subchannel Connectivity change to SHUTDOWN
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="scale-agent-service-messages">Scale Agent service messages&lt;/h2>
&lt;p>On a normal startup, the Armory Scale Agent shows the following messages:&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"># This shows where the configuration is read. &amp;#34;no such file&amp;#34; is expected.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">time&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;2020-10-02T22:22:14Z&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">level&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">msg&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;Config file /opt/armory/config/armory-agent-local.yaml not present; falling back to default settings&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">error&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;stat /opt/armory/config/armory-agent-local.yaml: no such file or directory&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>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Where is the Armory Scale Agent connecting to?&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">time&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;2020-10-02T22:22:14Z&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">level&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">msg&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;connecting to spin-clouddriver-grpc:9091...&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"># Connection successful&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">time&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;2020-10-02T22:22:14Z&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">level&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">msg&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;connected to spin-clouddriver-grpc:9091&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"># Showing the UID of the agent, that&amp;#39;s what shows in Clouddriver&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">time&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;2020-10-02T22:22:14Z&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">level&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">msg&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;connecting to Spinnaker: 9bece238-a429-40aa-8fad-285c72f56859&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>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Agent registering with 32 successfully discovered clusters Spinnaker&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">time&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;2020-10-02T22:22:14Z&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">level&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">msg&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;registering with 32 servers&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>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># At that point Clouddriver assigned caching to this instance of the Armory Scale Agent&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">time&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;2020-10-02T22:22:27Z&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">level&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">msg&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;starting agentCreator account-01&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Common errors:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;code>io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2Exception: HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 160301011901000115030383b0f1d28d2a75383e4e1f98f4&lt;/code>
When connecting to Spinnaker&lt;sup>TM&lt;/sup> as a service, make sure to set &lt;code>clouddriver.insecure: true&lt;/code> or provide certificates so the plugin can terminate TLS.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>org.springframework.jdbc.BadSqlGrammarException: jOOQ; bad SQL grammar [update kubesvc_assignments set reachable = ?, last_updated = ? where cd_id = ?]; nested exception is java.sql.SQLSyntaxErrorException: Table 'clouddriver.kubesvc_assignments' doesn't exist&lt;/code>
The plugin by default tries to automatically create the tables it needs after printing this error message.
This can be ignored, and in case of any issue, another error message should follow later in the logs.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>Parameter 1 of method getRedisClusterRecipient in io.armory.kubesvc.config.KubesvcClusterConfiguration required a bean of type 'com.netflix.spinnaker.kork.jedis.RedisClientDelegate' that could not be found.&lt;/code>
Make sure &lt;code>redis.enabled: true&lt;/code> is set in Clouddriver&amp;rsquo;s profile. For a more limited solution, keep only one Clouddriver instance and set &lt;code>kubesvc.cluster: local&lt;/code> in Clouddriver&amp;rsquo;s profile&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>Parameter 0 of method sqlTableMetricsAgent in com.netflix.spinnaker.config.SqlCacheConfiguration required a bean of type 'org.jooq.DSLContext' that could not be found.&lt;/code>
Make sure &lt;code>sql.enabled: true&lt;/code> is set in Clouddriver&amp;rsquo;s profile&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>Parameter 2 of constructor in io.armory.kubesvc.agent.KubesvcCachingAgentDispatcher required a bean of type 'com.netflix.spinnaker.clouddriver.kubernetes.security.KubernetesCredentials$Factory' that could not be found.&lt;/code>
Make sure &lt;code>providers.kubernetes.enabled: true&lt;/code> is set.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>Failed to list *unstructured.Unstructured: statefulsets.apps is forbidden: User &amp;quot;system:serviceaccount:default:test&amp;quot; cannot list resource &amp;quot;statefulsets&amp;quot; in API group &amp;quot;apps&amp;quot; at the cluster scope&lt;/code>
Make sure the service account or user that corresponds to the &lt;code>kubeconfig&lt;/code> file is bound to a cluster role or role with &lt;code>watch&lt;/code> and &lt;code>list&lt;/code> permissions to all resources. Alternatively, make sure to set &lt;code>kubernetes.accounts[].kinds&lt;/code> in &lt;code>armory-agent.yaml&lt;/code> file&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>Assigning accounts to Kubesvc enabled Clouddrivers (caching)&lt;/code> multiple times in Clouddriver &amp;amp; &lt;code>[..] is unreachable [..] getting credentials: exec: fork/exec /usr/local/bin/aws: exec format error&lt;/code>
Currently only static tokens are available. Generate a kubeconfig that uses a token from a SA with permissions to the cluster instead.&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 sa armory-agent -n default &lt;span style="color:#6272a4"># replace default with a relevant namespace&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl create clusterrolebinding armory-agent --serviceaccount default:armory-agent --clusterrole cluster-admin &lt;span style="color:#6272a4"># or make a proper rbac role&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">TOKEN_SECRET&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>kubectl get sa armory-agent -n default -o &lt;span style="color:#8be9fd;font-style:italic">jsonpath&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;{.secrets.*.name}&amp;#39;&lt;/span>&lt;span style="color:#ff79c6">)&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">TOKEN&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>kubectl get secret &lt;span style="color:#f1fa8c">&amp;#34;&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">$TOKEN_SECRET&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span> -n default -o &lt;span style="color:#8be9fd;font-style:italic">jsonpath&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;{.data.token}&amp;#39;&lt;/span> | base64 --decode&lt;span style="color:#ff79c6">)&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Replace your kubeconfig from&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># users:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - user:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># exec:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># to&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># users:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - user:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># token: $TOKEN_SECRET&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Remember to replace $TOKEN_SECRET with the actual contents from the command above&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h2 id="caching-kubernetes-cluster-objects">Caching Kubernetes cluster objects&lt;/h2>
&lt;p>When Kubernetes objects are not displaying in the Spinnaker cluster tab UI, perform the following:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Verify that the Kubernetes objects are deployed in the cluster.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Verify if the cache for the Kubernetes objects is in the &lt;code>kubesvc_cache&lt;/code> database table.&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-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">SELECT&lt;/span> id, agent, kind, account, application, namespace, last_updated &lt;span style="color:#ff79c6">FROM&lt;/span> clouddriver.kubesvc_cache &lt;span style="color:#ff79c6">WHERE&lt;/span> id &lt;span style="color:#ff79c6">LIKE&lt;/span> &lt;span style="color:#f1fa8c">&amp;#39;%:account1:%:minimal-ingress&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Replace:&lt;/p>
&lt;ul>
&lt;li>&lt;code>account1&lt;/code> with the name of the account that is doing the caching&lt;/li>
&lt;li>&lt;code>minimal-ingress&lt;/code> with the name of the Kubernetes deployment&lt;/li>
&lt;/ul>
&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>+-----------------------------------------------------------------------+-------+---------+----------+-------------+-----------+---------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>| id | agent | kind | account | application | namespace | last_updated |
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+-----------------------------------------------------------------------+-------+---------+----------+-------------+-----------+---------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>| kubernetes.v2:infrastructure:ingress:account1:default:minimal-ingress | | ingress | account1 | NULL | default | &lt;span style="color:#bd93f9">1683925888736&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:#bd93f9">1&lt;/span> row in &lt;span style="color:#8be9fd;font-style:italic">set&lt;/span> &lt;span style="color:#ff79c6">(&lt;/span>0.00 sec&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Note: you can remove &lt;code>account&lt;/code> to only filter by the name of the Kubernetes deployment: &lt;code>WHERE id LIKE '%:myapp'&lt;/code>.&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;li>
&lt;p>Verify that the Agent Couddriver plugin is receiving cache events for the Kubernetes objects.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>The Clouddriver plugin should have caching enabled for the required kind.&lt;/p>
&lt;p>Check the &lt;code>kubesvc.cache.cacheKinds&lt;/code> plugin property has the Kubernetes kinds to cache. The default value is &lt;code>kubesvc.cache.cacheKinds: ['ReplicaSet','Service','Ingress','DaemonSet','Deployment','Pod','StatefulSet','Job','CronJob','NetworkPolicy','Namespace','CustomResourceDefinition']&lt;/code>. Add or remove a Kubernetes kinds as needed.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Set the &lt;code>CachingHandler&lt;/code> log level to &lt;code>DEBUG&lt;/code>.&lt;/p>
&lt;p>Add &lt;code>logging.level.io.armory.kubesvc.services.cache.CachingHandler: DEBUG&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">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">logging.level.io.armory.kubesvc.services.cache.CachingHandler&lt;/span>: DEBUG
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then look for the caching logs of the Kubernetes objects.&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;#39;New entry to cache from instance.*account: account1.*Kind=Ingress/minimal-ingress&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Replace:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spinnaker&lt;/code> with the name of the namespace where Clouddriver is running&lt;/li>
&lt;li>&lt;code>spin-clouddriver&lt;/code> with the name of the Clouddriver deployment&lt;/li>
&lt;li>&lt;code>account1&lt;/code> with the name of the account that is doing the caching&lt;/li>
&lt;li>&lt;code>Ingress&lt;/code> with the kind of the Kubernetes deployment&lt;/li>
&lt;li>&lt;code>minimal-ingress&lt;/code> with the name of the Kubernetes deployment&lt;/li>
&lt;/ul>
&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>2023-05-12 21:05:08.966 DEBUG &lt;span style="color:#bd93f9">1&lt;/span> --- &lt;span style="color:#ff79c6">[&lt;/span>ault-executor-2&lt;span style="color:#ff79c6">]&lt;/span> i.a.k.services.cache.CachingHandler : New entry to cache from instance: armory-agent-7bfc4dd84-5kt2r, account: account1, type: ADD, onDemand: false, key: default/networking.Kubernetes.io/v1, &lt;span style="color:#8be9fd;font-style:italic">Kind&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>Ingress/minimal-ingress, syncKey: , resourceVersion: 2157, watchedNamespace: , startTimestamp: 1683925507264, endTimestamp: &lt;span style="color:#bd93f9">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2023-05-12 21:11:28.732 DEBUG &lt;span style="color:#bd93f9">1&lt;/span> --- &lt;span style="color:#ff79c6">[&lt;/span>ault-executor-2&lt;span style="color:#ff79c6">]&lt;/span> i.a.k.services.cache.CachingHandler : New entry to cache from instance: armory-agent-7bfc4dd84-5kt2r, account: account1, type: ADD, onDemand: false, key: default/networking.Kubernetes.io/v1, &lt;span style="color:#8be9fd;font-style:italic">Kind&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>Ingress/minimal-ingress, syncKey: , resourceVersion: 2157, watchedNamespace: , startTimestamp: 1683925507264, endTimestamp: &lt;span style="color:#bd93f9">0&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>Verify that the Agent is sending cache events for the Kubernetes object kinds.&lt;/p>
&lt;p>Check that the plugin&amp;rsquo;s list of kinds contains the ones you want.&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 deployments/armory-agent | grep &lt;span style="color:#f1fa8c">&amp;#39;Using kind list:&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Replace:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spinnaker&lt;/code> with the namespace where your Agent is running&lt;/li>
&lt;li>&lt;code>armory-agent&lt;/code> with the name of the Agent deployment&lt;/li>
&lt;/ul>
&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>&lt;span style="color:#8be9fd;font-style:italic">time&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;2023-05-12T21:05:07Z&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">level&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">msg&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;Using kind list: [ReplicaSet Service Ingress DaemonSet Deployment Pod StatefulSet Job CronJob NetworkPolicy Namespace CustomResourceDefinition]&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">account&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>account1 &lt;span style="color:#8be9fd;font-style:italic">agentId&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>armory-agent-7bfc4dd84-5kt2r
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify that the Agent has the caching enabled for the desired kind.&lt;/p>
&lt;p>The &lt;code>kubernetes.accounts[].kinds&lt;/code> and &lt;code>kubernetes.accounts[].omitKinds&lt;/code> Agent properties could restrict what the Agent is caching. Look for the logs that indicate Agent is caching the Kubernetes kinds you want cached.&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 deployments/armory-agent | grep -E &lt;span style="color:#f1fa8c">&amp;#39;Watcher: full kind recache with . objects&amp;#34; account=account1.*kind=Ingress&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Replace:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spinnaker&lt;/code> with the name of the namespace where agent is running&lt;/li>
&lt;li>&lt;code>armory-agent&lt;/code> with the name of the agent deployment&lt;/li>
&lt;li>&lt;code>account1&lt;/code> with the name of the account that is doing the caching&lt;/li>
&lt;li>&lt;code>Ingress&lt;/code> with the kind of the Kubernetes deployment&lt;/li>
&lt;/ul>
&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>&lt;span style="color:#8be9fd;font-style:italic">time&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;2023-05-12T21:05:08Z&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">level&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">msg&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;Watcher: full kind recache with 1 objects&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">account&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>account1 &lt;span style="color:#8be9fd;font-style:italic">agentId&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>armory-agent-7bfc4dd84-5kt2r &lt;span style="color:#8be9fd;font-style:italic">group&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>networking.k8s.io &lt;span style="color:#8be9fd;font-style:italic">kind&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>Ingress &lt;span style="color:#8be9fd;font-style:italic">watchedNamespace&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">time&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;2023-05-12T21:11:28Z&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">level&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>info &lt;span style="color:#8be9fd;font-style:italic">msg&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;Watcher: full kind recache with 1 objects&amp;#34;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">account&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>account1 &lt;span style="color:#8be9fd;font-style:italic">agentId&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>armory-agent-7bfc4dd84-5kt2r &lt;span style="color:#8be9fd;font-style:italic">group&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>networking.k8s.io &lt;span style="color:#8be9fd;font-style:italic">kind&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>Ingress &lt;span style="color:#8be9fd;font-style:italic">watchedNamespace&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>default
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="orphaned-accounts">Orphaned accounts&lt;/h2>
&lt;p>Execute the following query to find accounts with status ORPHANED in the &lt;code>kubesvc_accounts&lt;/code> table:&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-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">SELECT&lt;/span> &lt;span style="color:#ff79c6">*&lt;/span> &lt;span style="color:#ff79c6">FROM&lt;/span> kubesvc_accounts;
&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>+----------+----------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>| name | status |
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+----------+----------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>| account1 | ORPHANED |
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+----------+----------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bd93f9">1&lt;/span> row in &lt;span style="color:#8be9fd;font-style:italic">set&lt;/span> &lt;span style="color:#ff79c6">(&lt;/span>0.00 sec&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Follow these steps to determine why the account is orphaned:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Verify that the account is included in the Agent config file. 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">name&lt;/span>: account1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceAccount&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>Verify that the account is not in conflict with other Agent instances using the Kubernetes host or cert fingerprint.&lt;/p>
&lt;p>If the account was dynamically added by another Agent instance that doesn&amp;rsquo;t exist anymore, pointing to a different Kubernetes cluster, it was not dynamically deleted. The record of the dynamic account remains in &lt;code>kubesvc_accounts&lt;/code> table with a different Kubernetes host and/or cert fingerprint.&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-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">SELECT&lt;/span> name, kube_host, cert_fingerprint, status &lt;span style="color:#ff79c6">FROM&lt;/span> kubesvc_accounts;
&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>+----------+-----------------------------------------+-------------------------------------------------+----------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>| name | kube_host | cert_fingerprint | status |
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+----------+-----------------------------------------+-------------------------------------------------+----------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>| account1 | https://kubernetes.docker.internal:6443 | 27:5E:05:42:E0:9B:EE:74:53:B9:6B:63:9D:A4:9C:B4 | ORPHANED |
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+----------+-----------------------------------------+-------------------------------------------------+----------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bd93f9">1&lt;/span> row in &lt;span style="color:#8be9fd;font-style:italic">set&lt;/span> &lt;span style="color:#ff79c6">(&lt;/span>0.00 sec&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Set the &lt;code>DefaultAgentHandler&lt;/code> log level to &lt;code>DEBUG&lt;/code>. 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">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">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">logging.level.io.armory.kubesvc.services.registration.kubesvc.DefaultAgentHandler&lt;/span>: DEBUG
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the Agent tries to add the same account name pointing to a different Kubernetes cluster, the log indicates that the account was ignored (&lt;code>ignored accounts [account1]&lt;/code>). For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker logs deployments/spin-clouddriver | grep -E &lt;span style="color:#f1fa8c">&amp;#39;Agent .*: registered newly added accounts&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Replace:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spinnaker&lt;/code> with the name of the namespace where clouddriver is running&lt;/li>
&lt;li>&lt;code>spin-clouddriver&lt;/code> with the name of the clouddriver deployment&lt;/li>
&lt;/ul>
&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>2023-05-12 22:29:53.536 DEBUG &lt;span style="color:#bd93f9">1&lt;/span> --- &lt;span style="color:#ff79c6">[&lt;/span>ault-executor-1&lt;span style="color:#ff79c6">]&lt;/span> i.a.k.s.r.kubesvc.DefaultAgentHandler : Agent armory-agent-7974564c46-2fqj2: registered newly added accounts &lt;span style="color:#ff79c6">[]&lt;/span>, stopped handling removed accounts &lt;span style="color:#ff79c6">[]&lt;/span>, updated accounts &lt;span style="color:#ff79c6">[]&lt;/span>, ignored accounts &lt;span style="color:#ff79c6">[&lt;/span>account1&lt;span style="color:#ff79c6">]&lt;/span>. Originally had existing accounts &lt;span style="color:#ff79c6">[&lt;/span>account1&lt;span style="color:#ff79c6">]&lt;/span>, and just now had incoming accounts &lt;span style="color:#ff79c6">[&lt;/span>account1&lt;span style="color:#ff79c6">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="scale-agent-tips">Scale Agent tips&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>It is a good idea to have each Kubernetes cluster accessible by at least two instances of the Armory Scale Agent. Only one instance will actively stream Kubernetes changes. The second one will be on standby and can be used for other operations such as deploying manifests and getting logs.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For better availability, you can run Agent deployments in &lt;a href="https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity">different availability zones&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Restarting the Armory Scale Agent won&amp;rsquo;t cause direct outages, provided it is limited in time (less than 30s). No operation can happen while no Agent is connected to Spinnaker. Caching is asynchronous and other operations are retried &lt;code>kubesvc.operations.retry.maxRetries&lt;/code> times. Furthermore, restarts are generally fast, and the Armory Scale Agent resumes where it left off.&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>Plugins: Release Notes</title><link>/plugins/scale-agent/release-notes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/release-notes/</guid><description/></item></channel></rss>