<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Spinnaker – Install and Configure Spinnaker</title>
    <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/</link>
    <description>Recent content in Install and Configure Spinnaker on Spinnaker</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Choose your Environment</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/environment/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/environment/</guid>
      <description>
        
        
        &lt;p&gt;In this step, you choose where to install Spinnaker. The recommended path is an installation into a
Kubernetes cluster&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;#kubernetes-installation&#34;&gt;Kubernetes installation&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Each of Spinnaker&amp;rsquo;s 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture&#34;&gt;microservices&lt;/a&gt;
 services
are deployed separately. &lt;strong&gt;This is highly recommended for use in production.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;#local-debian&#34;&gt;Local installations&lt;/a&gt;
 of Debian packages&lt;/p&gt;
&lt;p&gt;You can also install on a single local machine, or for Spinnaker development, making sure you have the 4 cores and 16GB in each case.&lt;/p&gt;
&lt;p&gt;Spinnaker is deployed on a single machine. This is ok for smaller
Spinnaker deployments, but Spinnaker will be unavailable when it&amp;rsquo;s being
updated. Note it&amp;rsquo;s often better to use a microk8s/k3s installation to deploy
rather than try to deploy a local debian.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Please see 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/community/contributing/code/developer-guides/getting-set-up/&#34;&gt;Local git installations&lt;/a&gt;
 from GitHub&lt;/p&gt;
&lt;p&gt;This is for developers contributing to the Spinnaker project.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kubernetes-installation&#34;&gt;Kubernetes installation&lt;/h2&gt;
&lt;p&gt;Spinnaker runs in a dedicated Kubernetes namespace as a set of independently deployed microservices.&lt;/p&gt;
&lt;p&gt;See the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/&#34;&gt;microservice reference architecture&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The base example is available in the monorepo here:

&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/spinnaker-kustomize&#34; target=&#34;_blank&#34;&gt;https://github.com/spinnaker/spinnaker/tree/main/spinnaker-kustomize&lt;/a&gt;

with more information and options.&lt;/p&gt;
&lt;p&gt;To install spinnaker:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Make sure 
&lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/&#34; target=&#34;_blank&#34;&gt;kubectl is installed&lt;/a&gt;
&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl version --client
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;set a working directory &lt;code&gt;WORKING_DIR=&amp;quot;$HOME/workspace-install-spinnaker/&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -pv &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$HOME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/workspace-spinnaker-install/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;clone the base example github repo&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/spinnaker/spinnaker.git &lt;span style=&#34;color:#000&#34;&gt;$HOME&lt;/span&gt;/workspace-spinnaker-install/spinnaker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optional: configure 
&lt;a href=&#34;https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/&#34; target=&#34;_blank&#34;&gt;Kubernetes probes&lt;/a&gt;

for your Spinnaker services in their deployment manifests files. located inside &lt;code&gt;base/*/deployment.yaml&lt;/code&gt;/&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ls -lha &lt;span style=&#34;color:#000&#34;&gt;$HOME&lt;/span&gt;/workspace-spinnaker-install/spinnaker/spinnaker-kustomize/base/*/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;switch to the &lt;code&gt;kustomize&lt;/code&gt; directory in the &lt;code&gt;spinnaker&lt;/code&gt; base repo&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;pushd&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$WORKING_DIR&lt;/span&gt;/spinnaker/spinnaker-kustomize
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adjust the DNS domains. Look for any &lt;code&gt;example.com&lt;/code&gt; reference and replace with your DNS domain.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a file with the spinnaker kubernetes resources and apply it&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl kustomize --output&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;spinnaker.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the YAML file&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl apply --filename&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;spinnaker.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get the ingress IP address and create DNS entries for your new spinnaker domain to this new entry&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl get ingress --namespace spinnaker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;REMINDER:  This basic setup defaults with a SIMPLE username/password auth.  It&amp;rsquo;s recommended to change
this from the default or better yet, use an identity provider (saml/oidc/ldap) solution. The spinnaker
project does integration tests today with Keycloak as a known out of the box solution.&lt;/p&gt;
&lt;h2 id=&#34;local-debian&#34;&gt;Local Debian&lt;/h2&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;p&gt;We recommend at least 4 cores and 16GB of RAM.&lt;/p&gt;
&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;Local Debian&lt;/strong&gt; installation means Spinnaker will be installed and run on a
single machine. We recommend at least 4 cores and 16GB of RAM.
Note this is a non-recommended installation but is simple to install. Spinnaker configuration files default to
/opt/spinnaker/config. You can copy the files from the &lt;code&gt;spinnaker-kustomize&lt;/code&gt; example repo for each service. Services
load properties from in the following priority order&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spinnaker.yml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spinnaker-local.yml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;service&amp;gt;.yml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;service&amp;gt;-local.yml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;s recommended NOT to change the spinnaker.yml or service.yml and instead override their settings in the service
local yml files. These base files often are &amp;ldquo;defaults&amp;rdquo; or core settings. Base settings can be found in the
source code for each service similar
to 
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/blob/main/front50/front50-web/config/front50.yml&#34; target=&#34;_blank&#34;&gt;https://github.com/spinnaker/spinnaker/blob/main/front50/front50-web/config/front50.yml&lt;/a&gt;

path where each service has a &lt;code&gt;&amp;lt;service&amp;gt;/&amp;lt;service&amp;gt;-web/config/&amp;lt;service&amp;gt;.yml&lt;/code&gt; file defining defaults.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Local Debian installation requires a recent ubuntu/debian and installation of components like kubectl
or the aws cli depending upon deployment targets. They also need a Java 17 JRE installed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;intended-use-case&#34;&gt;Intended use case&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;Local Debian&lt;/strong&gt; installation is intended for smaller deployments of Spinnaker,
however, since all services are on a single machine, there is potential downtime.&lt;/p&gt;
&lt;h4 id=&#34;install-local-dependencies&#34;&gt;Install local dependencies&lt;/h4&gt;
&lt;p&gt;Ensure that the following are installed on your system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;git: &lt;code&gt;sudo apt-get install git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;curl: &lt;code&gt;sudo apt-get install curl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;redis-server: &lt;code&gt;sudo apt-get install redis-server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;JDK 17 - JDK (we&amp;rsquo;re building from source, so a JRE is not sufficient)&lt;/li&gt;
&lt;li&gt;npm/node (version &amp;gt;=16)&lt;/li&gt;
&lt;li&gt;yarn: &lt;code&gt;npm install -g yarn&lt;/code&gt; or 
&lt;a href=&#34;https://yarnpkg.com/lang/en/docs/install/&#34; target=&#34;_blank&#34;&gt;guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;further-reading&#34;&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/&#34;&gt;Spinnaker Architecture&lt;/a&gt;
 for a better understanding
of the Distributed installation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Congratulations, you have a basic Spinnaker installation. You can&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Integrate with 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/&#34;&gt;Cloud Providers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;check the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/deploy/&#34;&gt;deploy Spinnaker&lt;/a&gt;
 references&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Deploy Spinnaker and Connect</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/deploy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/deploy/</guid>
      <description>
        
        
        &lt;p&gt;Now that we&amp;rsquo;ve enabled one or more 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/&#34;&gt;Cloud Providers&lt;/a&gt;
, picked a 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/environment/&#34;&gt;Deployment Environment&lt;/a&gt;
, and configured

&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/storage/&#34;&gt;Persistent Storage&lt;/a&gt;
, we&amp;rsquo;re ready to pick a version of Spinnaker, deploy it, and connect to it.&lt;/p&gt;
&lt;h2 id=&#34;pick-a-version&#34;&gt;Pick a version&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;See the available versions on the 
&lt;a href=&#34;https://spinnaker.io/docs/releases/versions/&#34; target=&#34;_blank&#34;&gt;versions page&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;You can follow the links to the versions&amp;rsquo; respective changelogs to see what
features each adds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the version you want to use:
Set this on the 
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/blob/main/spinnaker-kustomize/kustomization.yml#L12C15-L12C16&#34; target=&#34;_blank&#34;&gt;kustomize image tag configuration&lt;/a&gt;
.  All spinnaker versions since
the monorepo use the same image tags, e.g. 2025.3.2.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;deploy-spinnaker&#34;&gt;Deploy Spinnaker&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl kustomize -o ./spinnaker.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl apply -f ./spinnaker.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ingress&#34;&gt;Ingress&lt;/h2&gt;
&lt;p&gt;A default ingress is included that uses a single ingress with path based routes to gate&amp;rsquo;s API
on a prefix.  This bypasses CORS issues and enables a simple user experience to connect
to spinnaker. The default username and passwords are also set in this installation.&lt;/p&gt;
&lt;p&gt;For ingress specific to your environment, please adjust 
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/blob/main/spinnaker-kustomize/ingress.yaml&#34; target=&#34;_blank&#34;&gt;the default ingress&lt;/a&gt;

as needed for your use case.&lt;/p&gt;
&lt;h2 id=&#34;connect-to-the-spinnaker-ui&#34;&gt;Connect to the Spinnaker UI&lt;/h2&gt;
&lt;p&gt;Once deployed, get the address for your ingress controller and connect to the ingress.  Make
sure you have a domain address pointing to your new endpoint.  Example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl get ingress --namespace spinnaker
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NAME                CLASS   HOSTS                     ADDRESS          PORTS     AGE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;spinnaker-ingress   nginx   spinnaker.example.com     192.168.1.2      80, &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;443&lt;/span&gt;   644d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This ingress would include 443 or TLS as configured.  It&amp;rsquo;s recommended to enable a
cert provider and use HTTPS for requests but this is out of the scope of the installation.
See the 
&lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/ingress/#tls&#34; target=&#34;_blank&#34;&gt;kubernetes networking documentation on TLS&lt;/a&gt;

for information on modifying the ingress for certificate handling.&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve configured DNS to point to your address, go to 
&lt;a href=&#34;http://spinnaker.example.com/&#34; target=&#34;_blank&#34;&gt;http://spinnaker.example.com/&lt;/a&gt;
 and
login with the 
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/blob/main/spinnaker-kustomize/overlays/config/files/gate-local.yml#L26-L27&#34; target=&#34;_blank&#34;&gt;username and password&lt;/a&gt;

that you&amp;rsquo;ve configured (or your SSO provider if so configured 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_configuration/security/authentication&#34;&gt;per authentication configuration&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;
&lt;p&gt;First, check that services are running.  IF a service isn&amp;rsquo;t running, check the logs
for configuration errors.&lt;/p&gt;
&lt;p&gt;Next once all services are running, make sure you can talk to the gate endpoint.  You
should be able to check the health endpoint even externally via the gate-api/health endpoint.&lt;/p&gt;
&lt;h2 id=&#34;upgrade-spinnaker&#34;&gt;Upgrade Spinnaker&lt;/h2&gt;
&lt;p&gt;To upgrade, read the release notes and change the images to the newer versions.  Adjust
any config that&amp;rsquo;s been removed/changed as needed.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Now that Spinnaker is deployed and capable managing your cloud provider, you
can&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Continue with additional configuration, such as your 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/bakery/&#34;&gt;image bakery&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you&amp;rsquo;re a Spinnaker end user, read how to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/get-started&#34;&gt;get started using Spinnaker&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Visit the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/&#34;&gt;Guides&lt;/a&gt;
 pages to learn more&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Remember to keep your configuration in git for both history and changes!&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Cloud Providers Overview</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/</guid>
      <description>
        
        
        &lt;p&gt;In this section, you&amp;rsquo;ll register credentials for your Cloud platforms. Those
credentials are known as &lt;em&gt;Accounts&lt;/em&gt; in Spinnaker, and Spinnaker deploys your
applications via those accounts.&lt;/p&gt;
&lt;h2 id=&#34;supported-providers&#34;&gt;Supported providers&lt;/h2&gt;
&lt;p&gt;All of Spinnaker&amp;rsquo;s abstractions and capabilities are built on top of the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/concepts/concepts-providers/&#34;&gt;Cloud
Providers&lt;/a&gt;
 that it supports. So, for Spinnaker to do
anything you must enable at least one provider, with one Account added for it.  These
are all managed in clouddriver&amp;rsquo;s configuration files.&lt;/p&gt;
&lt;p&gt;Add as many of the following providers as you need. When you&amp;rsquo;re done, return to this page.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/aws/&#34;&gt;AWS/ECS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/kubernetes/&#34;&gt;Kubernetes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/azure/&#34;&gt;Azure&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/cf/&#34;&gt;Cloud Foundry&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/docker-registry/&#34;&gt;Docker Registry&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/appengine/&#34;&gt;Google App Engine&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/gce/&#34;&gt;Google Compute Engine&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/oracle/&#34;&gt;Oracle&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;When you&amp;rsquo;ve finished setting up your cloud provider, you&amp;rsquo;re ready to

&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/environment/&#34;&gt;choose an environment&lt;/a&gt;
.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Storage</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/storage/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/storage/</guid>
      <description>
        
        
        &lt;p&gt;Spinnaker requires a database for persisting your Application settings and configured
Pipelines as well as execution history.  A database is used for a few services
(clouddriver, front50, orca). Because this data can be sensitive and can be costly to
lose, we recommend you use a hosted storage solution you are confident in.&lt;/p&gt;
&lt;h2 id=&#34;supported-databases&#34;&gt;Supported databases&lt;/h2&gt;
&lt;p&gt;Spinnaker recommends MySQL/MariaDB or Postgresql.  It&amp;rsquo;s recommended for most users to start
with MariaDB/MySQL.&lt;/p&gt;
&lt;p&gt;Services ship with &lt;code&gt;mysql-connector-java&lt;/code&gt; by default. You can provide additional JDBC
connectors on the classpath if desired.  MySQL/MariaDB is reported to work all the way
up to version 10 of MariaDB and the latest Aurora MySQL engines.&lt;/p&gt;
&lt;p&gt;Before you deploy services, you need to manually create a database and user grants for each service.
These are NOT automatically created when spinnaker services start. Note that
the kustomize example on the install DOES create these as part of the mariadb

&lt;a href=&#34;https://github.com/spinnaker/spinnaker/blob/main/spinnaker-kustomize/components/mariadb/base/configmap.yml#L15&#34; target=&#34;_blank&#34;&gt;init script&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Repeat these creation steps for echo, orca, clouddriver, fiat and front50 (and keel if using keel) replacing the database for each service&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;CREATE&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;DATABASE&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;front50&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;DEFAULT&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;CHARACTER&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;SET&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;utf8mb4&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;COLLATE&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;utf8mb4_unicode_ci&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;GRANT&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;SELECT&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;INSERT&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;UPDATE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;DELETE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;CREATE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;EXECUTE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;SHOW&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;VIEW&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ON&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;front50&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;TO&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;front50_service&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;BY&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;GRANT&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;SELECT&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;INSERT&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;UPDATE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;DELETE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;CREATE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;DROP&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;REFERENCES&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;INDEX&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ALTER&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;LOCK&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TABLES&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;EXECUTE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;SHOW&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;VIEW&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ON&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;front50&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;TO&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;front50_migrate&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;BY&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-the-services&#34;&gt;Configure the services&lt;/h2&gt;
&lt;p&gt;Configure the services (when not using the native mariadb component in kustomize) to use the SQL configuration passed above.  AN example
for mariadb:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sql&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;connectionPools&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# additional connection pool parameters are available here,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# for more detail and to view defaults, see:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# https://github.com/spinnaker/kork/blob/master/kork-sql/src/main/kotlin/com/netflix/spinnaker/kork/sql/config/ConnectionPoolProperties.kt&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;jdbcUrl&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;jdbc:mysql://mariadb:3306/fiat&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;user&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;fiat_service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;password&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;${FIAT_MARIADB}&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;migration&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;jdbcUrl&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;jdbc:mysql://mariadb:3306/fiat&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;user&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;fiat_migrate&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;password&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;${FIAT_MARIADB}&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The default spinnaker-kustomize installation uses a 
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/blob/main/spinnaker-kustomize/components/mariadb/kustomization.yml&#34; target=&#34;_blank&#34;&gt;component to auto inject&lt;/a&gt;
 these configurations
into the targeted services.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Now that your deployment environment is set up, , you can…&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/&#34;&gt;Configure everything else&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Configuration</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/configuration/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/configuration/</guid>
      <description>
        
        
        &lt;p&gt;There are a number of other things you can configure in your Spinnaker
installation enumerated below. At any point in time, you can
apply your configuration by deploying Spinnaker services:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl kustomize -o spinnaker.yml
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl apply -f spinnaker.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;deploy-to-more-cloud-accounts&#34;&gt;Deploy to more cloud accounts&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/&#34;&gt;Documentation&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;You can add as many target accounts as you want. There is nothing
preventing you from deploying to two Kubernetes clusters, one Google Compute
Engine project, and an App Engine application all at once.&lt;/p&gt;
&lt;h3 id=&#34;secure-your-spinnaker-installation&#34;&gt;Secure your Spinnaker installation&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/security/&#34;&gt;Documentation&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;You can configure SSL, setup a login page, or apply role-based authorization.~~&lt;/p&gt;
&lt;h3 id=&#34;setup-continuous-integration&#34;&gt;Setup continuous integration&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/ci/&#34;&gt;Documentation&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Configure Jenkins or Travis CI to trigger Pipelines or supply Spinnaker with
build artifacts to build into images and deploy.&lt;/p&gt;
&lt;h3 id=&#34;configure-notifications&#34;&gt;Configure notifications&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/notifications/&#34;&gt;Documentation&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Enable notifications to be sent on Spinnaker events, and allow external events
to trigger Pipelines in Spinnaker.&lt;/p&gt;
&lt;h3 id=&#34;monitor-your-spinnaker-installation&#34;&gt;Monitor your Spinnaker installation&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/monitoring/&#34;&gt;Documentation&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Publish timeseries data from your Spinnaker installation to a variety of
metric sources into curated dashboards. This is useful for understanding how
to scale and troubleshoot your deployment of Spinnaker.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Now that you know how to make configuration changes, it&amp;rsquo;s worth learning how to

&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/upgrades/&#34;&gt;Upgrade Spinnaker&lt;/a&gt;
.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Setup FAQ</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/faq/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/faq/</guid>
      <description>
        
        
        &lt;h1 id=&#34;caution&#34;&gt;CAUTION&lt;/h1&gt;
&lt;p&gt;Halyard is deprecated and no longer supported.  MANY FAQs here around halyard no longer work
or are no longer relevant.  See a 
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/spinnaker-kustomize&#34; target=&#34;_blank&#34;&gt;Spinnaker Kustomize&lt;/a&gt;

based installation for a current deployment of spinnaker.  Halyard FAQs and information will be removed
on an ongoing basis&lt;/p&gt;
&lt;h2 id=&#34;i-cant-load-the-applications-screen&#34;&gt;I can&amp;rsquo;t load the Applications screen&lt;/h2&gt;
&lt;p&gt;After installing Spinnaker and navigating to the &lt;em&gt;Applications&lt;/em&gt; screen, you may see one of
following issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The following error message is displayed:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Error fetching applications. Check that your gate endpoint is accessible. Further information on troubleshooting this error is available here
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The most common cause of this error is that your browser can&amp;rsquo;t communicate with your Gate endpoint.
(This endpoint defaults to &lt;code&gt;http://localhost:8084&lt;/code&gt;, but can be customized.)&lt;/p&gt;
&lt;p&gt;Check your browser console log and/or network for any failed requests to &lt;code&gt;&amp;lt;gate-endpoint&amp;gt;/applications&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Some things to check while troubleshooting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you are accessing Spinnaker via the default &lt;code&gt;http://localhost:9000&lt;/code&gt;, check that you have
forwarded Gate&amp;rsquo;s port (8084 by default) to the machine where your browser is running.&lt;/li&gt;
&lt;li&gt;If you are accessing Spinnaker via a custom URL, ensure that you have set &lt;code&gt;override-base-url&lt;/code&gt;
for both the UI (Deck) and API (Gate) services, as described in the

&lt;a href=&#34;#i-want-to-expose-localdebian-spinnaker-on-a-public-ip-address-but-it-always-binds-to-localhost&#34;&gt;question below&lt;/a&gt;
.
These settings will configure cross-origin resource sharing (CORS) between your Gate and Deck
endpoints; if this is not properly configured, your browser will reject requests from Deck to
Gate.&lt;/li&gt;
&lt;li&gt;If you have a local deployment of Spinnaker, ensure that Redis is available at the configured address (localhost:6379 by default). If not, start redis by running &lt;code&gt;sudo systemctl enable redis-server &amp;amp;&amp;amp; sudo systemctl start redis-server&lt;/code&gt; and restart spinnaker by running &lt;code&gt;sudo systemctl restart spinnaker&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;i-want-to-expose-localdebian-spinnaker-on-a-public-ip-address-but-it-always-binds-to-localhost&#34;&gt;I want to expose LocalDebian Spinnaker on a public IP address, but it always binds to localhost&lt;/h2&gt;
&lt;p&gt;First off, on a local deployment Spinnaker binds to &lt;code&gt;localhost&lt;/code&gt; intentionally.
Your Spinnaker instance has the ability to deploy and destroy a lot of
infrastructure in whatever accounts it manages, and opening it to the public is
not a good idea without authentication enabled. With that in mind, there are
two solutions.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Once you enable an 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/security/&#34;&gt;authentication&lt;/a&gt;
 mechanism, Spinnaker
will bind the UI and API servers to &lt;code&gt;0.0.0.0&lt;/code&gt; automatically. This is

&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/halyard/custom/&#34;&gt;configurable&lt;/a&gt;
 if you prefer to bind a specify
address instead. Regardless, you still need to set the API &amp;amp;
UI baseUrls so CORS and login redirects happen correctly, this is done with
the commands &lt;code&gt;hal config security ui edit --override-base-url &amp;lt;full ui url&amp;gt;&lt;/code&gt;
and &lt;code&gt;hal config security api edit --override-base-url &amp;lt;full api url&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you don&amp;rsquo;t want to rely on authentication, you can follow 
&lt;a href=&#34;https://blog.spinnaker.io/exposing-spinnaker-to-end-users-4808bc936698&#34; target=&#34;_blank&#34;&gt;this
guide&lt;/a&gt;
.
This makes sense if you&amp;rsquo;re running Spinnaker in a private network, or have
another form of authentication fronting Spinnaker.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;halyard-times-out-during-a-config-change&#34;&gt;Halyard times out during a config change&lt;/h2&gt;
&lt;p&gt;Odds are Halyard can&amp;rsquo;t connect to the configuration &amp;amp; version bucket (in Google
Cloud Storage) it uses to determine if the configuration you&amp;rsquo;ve provided works
for the version of Spinnaker you want to install. The bucket is
&lt;code&gt;gs://halconfig&lt;/code&gt;, see if you can reach it locally using the

&lt;a href=&#34;https://cloud.google.com/storage/docs/gsutil&#34; target=&#34;_blank&#34;&gt;&amp;lt;code&amp;gt;gsutil&amp;lt;/code&amp;gt;&lt;/a&gt;
 CLI.
The remediation will depend on your local network. You can also always omit
validation with the &lt;code&gt;--no-validate&lt;/code&gt; flag.&lt;/p&gt;
&lt;p&gt;As an alternative to &lt;code&gt;gsutil&lt;/code&gt;, you can try querying the bucket directly using its
fully-qualified URI: &lt;code&gt;curl storage.googleapis.com/halconfig&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;halyard-times-out-during-a-deployment&#34;&gt;Halyard times out during a deployment&lt;/h2&gt;
&lt;p&gt;If this happens, there are one of two causes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The services that haven&amp;rsquo;t become healthy are misconfigured. Run &lt;code&gt;hal deploy collect-logs&lt;/code&gt; to collect service logs, which will be placed in
&lt;code&gt;~/.hal/default/service-logs&lt;/code&gt;. Check for any obvious errors.&lt;/li&gt;
&lt;li&gt;You do not have enough resources in your environment to run Spinnaker, and
the deployer is waiting for some to become available. This varies from
environment to environment.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;i-want-to-configure-a-service-beyond-what-halyard-exposes&#34;&gt;I want to configure a service beyond what Halyard exposes&lt;/h2&gt;
&lt;p&gt;First, please read the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/halyard/custom/&#34;&gt;custom configuration&lt;/a&gt;

documentation. With that in mind, if you&amp;rsquo;re configuring any of Spinnaker&amp;rsquo;s

&lt;a href=&#34;https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html&#34; target=&#34;_blank&#34;&gt;Spring-based&lt;/a&gt;

services (everything but deck), you&amp;rsquo;re
best off providing a &lt;code&gt;-local.yml&lt;/code&gt; profile for the service in mind. For example,
say you are configuring the Halyard

&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/halyard/#deployments&#34;&gt;deployment&lt;/a&gt;
 &lt;code&gt;default&lt;/code&gt;, and the service
&lt;code&gt;gate&lt;/code&gt;, you can write the following file:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;~/.hal/default/profiles/gate-local.yml&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;example&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;property&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and the properties generated by Halyard will be overwritten by those provided
in that &lt;code&gt;gate-local.yml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;If the service you want to configure does not rely on Spring, you will need to
wholesale overwrite the config in the &lt;code&gt;~/.hal/default/profiles&lt;/code&gt; directory.&lt;/p&gt;
&lt;h2 id=&#34;i-dont-want-to-rely-on-any-of-the-configuration-generated-by-halyard&#34;&gt;I don&amp;rsquo;t want to rely on any of the configuration generated by Halyard&lt;/h2&gt;
&lt;p&gt;You have two options here:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Provide 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/halyard/custom&#34;&gt;custom configuration&lt;/a&gt;
 for any services
whose config you prefer to override.&lt;/li&gt;
&lt;li&gt;Deploy Spinnaker with the &lt;code&gt;--omit-config&lt;/code&gt; flag. In the Local installation,
this will pin &amp;amp; download validated debian packages at their respective
versions without providing any configuration. In a Distributed installation,
you will need to provide your own mechanisms for loading configuration for
each subservice.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;im-seeing-duplicatebad-infrastructure-entries-in-the-ui-after-deploying-config-changes&#34;&gt;I&amp;rsquo;m seeing duplicate/bad infrastructure entries in the UI after deploying config changes&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;This information is drastically out of date.  Spinnaker has cleanup services that
can be configured.  Configure the unknown-agent-cleanup-agent in clouddriver to purge
out of date information&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Spinnaker&amp;rsquo;s cloud provider integration point (clouddriver) does not clean out
cache entries that may be left around after reconfiguring existing
accounts. The best way to get around this is to supply the
&lt;code&gt;--flush-infrastructure-caches&lt;/code&gt; to a &lt;code&gt;hal deploy apply&lt;/code&gt;. This may cause
jittering in the UI as the caches are repopulated.&lt;/p&gt;
&lt;h2 id=&#34;halyard-produces-a-lot-of-ugly-ansi-escape-sequences-making-it-frustrating-to-automate&#34;&gt;Halyard produces a lot of ugly ANSI escape sequences making it frustrating to automate&lt;/h2&gt;
&lt;p&gt;You can supply the flags &lt;code&gt;-q -log=info&lt;/code&gt; to any Halyard command to get more
digestable log messages. &lt;code&gt;-q&lt;/code&gt; suppresses the ANSI pretty-printing, and
&lt;code&gt;-log=info&lt;/code&gt; enables info-level logs in the CLI.&lt;/p&gt;
&lt;h2 id=&#34;i-dont-want-to-use-a-bunch-of-cli-commands-to-configure-spinnaker-i-prefer-my-text-editor&#34;&gt;I don&amp;rsquo;t want to use a bunch of CLI commands to configure Spinnaker; I prefer my text editor&lt;/h2&gt;
&lt;p&gt;Anything in the &lt;code&gt;~/.hal/config&lt;/code&gt; can be edited by hand at any time. You can
validate what you provide there by running &lt;code&gt;hal config&lt;/code&gt;, and deploy it as you
would normally &lt;code&gt;hal deploy apply&lt;/code&gt;. For more service-specific edits, please read
the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/halyard/custom/&#34;&gt;custom configuration&lt;/a&gt;
 docs.&lt;/p&gt;
&lt;h2 id=&#34;i-only-want-to-deploy-a-subset-of-spinnakers-services&#34;&gt;I only want to deploy a subset of Spinnaker&amp;rsquo;s services&lt;/h2&gt;
&lt;p&gt;You can run &lt;code&gt;hal deploy apply --service-names &amp;lt;service1&amp;gt; &amp;lt;service2...&amp;gt;&lt;/code&gt; to
deploy only the services you care about. Be careful, if you have sidecars like
the &lt;code&gt;monitoring-daemon&lt;/code&gt; or the &lt;code&gt;consul-client&lt;/code&gt; for a VM based distributed
deployment, you will have to supply those as well.&lt;/p&gt;
&lt;p&gt;This can be coupled with &lt;code&gt;--omit-config&lt;/code&gt; in a local installation to provide a
taylored way of deploying &amp;amp; configuring only the services you want on the
machines you care about.&lt;/p&gt;
&lt;h2 id=&#34;i-want-to-run-halyard-behind-a-proxy&#34;&gt;I want to run Halyard behind a proxy&lt;/h2&gt;
&lt;p&gt;In the file under &lt;code&gt;/opt/halyard/bin/halyard&lt;/code&gt;, add the necessary proxy
configuration to the variable &lt;code&gt;DEFAULT_JVM_OPTS&lt;/code&gt; as described

&lt;a href=&#34;https://developers.google.com/gdata/articles/proxy_setup&#34; target=&#34;_blank&#34;&gt;here&lt;/a&gt;

For example,&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;DEFAULT_JVM_OPTS&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;-Dhttp.proxyHost&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;my.proxy.domain.com -Dhttp.proxyPort&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;3128&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;i-want-to-run-a-spinnaker-service-clouddriver-echo-etc-behind-an-http-proxy-server&#34;&gt;I want to run a Spinnaker service (Clouddriver, Echo, etc) behind an HTTP proxy server&lt;/h2&gt;
&lt;p&gt;For most Spinnaker service communication, this can be accomplished by setting appropriate
JVM options for the service you want to proxy. For example, if you wanted to proxy Echo
communication for Slack notifications, you would add the following proxy settings to
&lt;code&gt;~/.hal/default/service-settings/echo.yml&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;env&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;JAVA_OPTS&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;    -Dhttp.proxyHost=&amp;lt;proxy host&amp;gt; -Dhttp.proxyPort=&amp;lt;proxy port&amp;gt; -Dhttps.proxyHost=&amp;lt;proxy host&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;    -Dhttps.proxyPort=&amp;lt;proxy port&amp;gt; -Dhttp.nonProxyHosts=&amp;#39;localhost|127.*|[::1]|*.spinnaker&amp;#39;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These settings will forward all external communication through the proxy server specified while
keeping internal traffic non-proxied. Additional information can be found

&lt;a href=&#34;https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html&#34; target=&#34;_blank&#34;&gt;here.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;The Kubernetes provider must be handled differently. Because the Kubernetes provider
uses &lt;code&gt;kubectl&lt;/code&gt; (which uses curl), you must set environment variables if you want
Kubernetes traffic to be proxied.&lt;/p&gt;
&lt;p&gt;An example &lt;code&gt;clouddriver.yml&lt;/code&gt; that will proxy Kubernetes traffic will look like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;env&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;HTTP_PROXY&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;proxyaddress:proxyport&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;HTTPS_PROXY&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;proxyaddress:proxyport&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;NO_PROXY&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;localhost,127.0.0.1,*.spinnaker&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;what-is-the-best-way-to-delete-a-spinnaker-deployment&#34;&gt;What is the best way to delete a Spinnaker deployment?&lt;/h2&gt;
&lt;p&gt;Delete the namespace where spinnaker runs.  This should remove all secrets/configmaps/etc
NOTE external configured resources like databases will need manual cleanup OR automated cleanup via
tooling like OpenTofu.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Migrating from Operator/Halyard to Kustomize Deployment</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/migration-to-kustomize-automation/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/migration-to-kustomize-automation/</guid>
      <description>
        
        
        &lt;h2 id=&#34;migrating-to-a-kustomize-deployment&#34;&gt;Migrating to a Kustomize Deployment&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Thank you to harness spinnaker team for the script and automation to enable migration to kustomize easily.  This
is a mirror from their 
&lt;a href=&#34;https://docs.armory.io/continuous-deployment/spinnaker-user-guides/armory-operator-to-kustomize-migration/&#34; target=&#34;_blank&#34;&gt;documentation on migration off of operator&lt;/a&gt;

and though operator specific in many aspects, this should work just as well for halyard deployments&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;This document provides step-by-step instructions for migrating your Spinnaker installation from using the Armory Operator
deployment method OR a halyard deployment to a native Kubernetes deployment using Kustomize. This approach gives you
more direct control over your Spinnaker resources and removes the dependency on halyard&lt;/p&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Important&lt;/h4&gt;
Please thoroughly test this migration in a non-production environment before deploying to production.
&lt;/div&gt;

&lt;h4 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Kubectl command-line tool installed and configured to access your cluster&lt;/li&gt;
&lt;li&gt;Basic understanding of Kubernetes resources (deployments, services, configmaps)&lt;/li&gt;
&lt;li&gt;Access to the current Spinnaker namespace&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;migration-process-overview&#34;&gt;Migration Process Overview&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Download current configuration files and Kubernetes resources&lt;/li&gt;
&lt;li&gt;Set up Kustomize structure for native deployment&lt;/li&gt;
&lt;li&gt;Remove Operator ownership from services (Only for operator changes)&lt;/li&gt;
&lt;li&gt;Scale down the Operator&lt;/li&gt;
&lt;li&gt;Deploy using Kustomize&lt;/li&gt;
&lt;li&gt;Validate the deployment&lt;/li&gt;
&lt;li&gt;Remove Operator and CRDs (after confirming stability)&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&#34;step-1-download-current-configuration&#34;&gt;Step 1: Download Current Configuration&lt;/h5&gt;
&lt;p&gt;The script provided below will download:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All configuration files located in /opt/spinnaker/config from each service&lt;/li&gt;
&lt;li&gt;All deployment, service, and statefulset YAML files for each service&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id=&#34;how-to-use-the-download-script&#34;&gt;How to Use the Download Script&lt;/h6&gt;
&lt;ol&gt;
&lt;li&gt;Save the script at the bottom of this document to a file named &lt;code&gt;download_spinnaker_configs.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Make the script executable:
&lt;code&gt;chmod +x download_spinnaker_configs.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run the script with your Spinnaker namespace:
&lt;code&gt;./download_spinnaker_configs.sh your-spinnaker-namespace&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The script will create an operator-migration directory containing all needed files&lt;/li&gt;
&lt;/ol&gt;
&lt;h6 id=&#34;what-gets-downloaded&#34;&gt;What Gets Downloaded&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deployments:&lt;/strong&gt; YAML files for each service deployment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Services:&lt;/strong&gt; YAML files for all Spinnaker services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;StatefulSets:&lt;/strong&gt; YAML files for any statefulsets (like front50)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Files:&lt;/strong&gt; All files from /opt/spinnaker/config in each pod&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;WARNING:  THIS WILL download any secrets that are NOT using an encrypted secret.  USE CAUTION.  It&amp;rsquo;s recommend to
move secrets to a 
&lt;a href=&#34;https://spinnaker.io/docs/reference/secrets/&#34; target=&#34;_blank&#34;&gt;valid secret engine&lt;/a&gt;
 as part of any spinnaker deployment.&lt;/p&gt;
&lt;h5 id=&#34;step-2-set-up-kustomize-structure&#34;&gt;Step 2: Set Up Kustomize Structure&lt;/h5&gt;
&lt;p&gt;Create a Kustomize directory structure for your Spinnaker deployment:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Move the downloaded deployments and services to their respective directories&lt;/li&gt;
&lt;li&gt;Create configmaps from the downloaded configuration files&lt;/li&gt;
&lt;li&gt;Set up the kustomization.yaml files&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Tip&lt;/h4&gt;
You can use the GitHub - 
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/spinnaker-kustomize&#34; target=&#34;_blank&#34;&gt;https://github.com/spinnaker/spinnaker/tree/main/spinnaker-kustomize&lt;/a&gt;
 repo as a reference for Kustomize structure
&lt;/div&gt;

&lt;h5 id=&#34;step-3-remove-operator-ownership-from-services&#34;&gt;Step 3: Remove Operator Ownership from Services&lt;/h5&gt;
&lt;p&gt;This step detaches the Operator&amp;rsquo;s control while keeping services running.  ONLY for operator deploys.  Halyard deployments
should not need to execute this step.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Identify resources owned by the Operator:
&lt;code&gt;kubectl get all -n your-spinnaker-namespace -o json | jq &#39;.items[] | select(.metadata.ownerReferences[]? | .apiVersion==&amp;quot;spinnaker.io/v1alpha2&amp;quot; and .kind==&amp;quot;SpinnakerService&amp;quot;) | {name: .metadata.name, kind: .kind}&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Remove ownership references using patch commands:
&lt;code&gt;kubectl patch deployment spin-deck -n your-spinnaker-namespace --type json -p=&#39;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/metadata/ownerReferences&amp;quot;}]&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Repeat for all resources with Operator ownership


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
This breaks the connection between the Operator and services but keeps everything running
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&#34;step-4-verify-ownership-removal&#34;&gt;Step 4: Verify Ownership Removal&lt;/h5&gt;
&lt;p&gt;ONLY for operator deployments.  Confirm that no resources are still owned by the Operator:
&lt;code&gt;kubectl get all -n your-spinnaker-namespace -o json | jq &#39;.items[] | select(.metadata.ownerReferences[]? | .apiVersion==&amp;quot;spinnaker.io/v1alpha2&amp;quot; and .kind==&amp;quot;SpinnakerService&amp;quot;) | {name: .metadata.name, kind: .kind}&#39;&lt;/code&gt;
The command should return empty if all ownership references have been removed.&lt;/p&gt;
&lt;h5 id=&#34;step-5-extra-precautions-before-deployment&#34;&gt;Step 5: Extra Precautions Before Deployment&lt;/h5&gt;
&lt;p&gt;Compare current resources with your Kustomize configurations:
&lt;code&gt;kubectl diff -f &amp;lt;(kustomize build ./overlays/prod)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Review the differences carefully. Look for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Immutable field changes (might require special handling)&lt;/li&gt;
&lt;li&gt;Configuration changes that could affect service behavior&lt;/li&gt;
&lt;li&gt;Missing resources that should be included&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id=&#34;perform-a-dry-run&#34;&gt;Perform a Dry Run&lt;/h6&gt;
&lt;p&gt;Test your deployment without actually applying changes:
&lt;code&gt;kubectl apply --dry-run=client -f &amp;lt;(kustomize build ./overlays/prod)&lt;/code&gt;&lt;/p&gt;
&lt;h5 id=&#34;step-6-scale-down-the-operator-only-on-operator-deploys&#34;&gt;Step 6: Scale Down the Operator (only on operator deploys)&lt;/h5&gt;
&lt;p&gt;Prevent the Operator from interfering with your deployment:
&lt;code&gt;kubectl scale deployment spinnaker-operator -n your-spinnaker-namespace --replicas=0&lt;/code&gt;&lt;/p&gt;
&lt;h5 id=&#34;step-7-deploy-using-kustomize&#34;&gt;Step 7: Deploy Using Kustomize&lt;/h5&gt;
&lt;p&gt;Apply your Kustomize configurations:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;kubectl apply -f &amp;lt;(kustomize build ./overlays/prod)&lt;/code&gt;&lt;/p&gt;
&lt;h5 id=&#34;step-8-validate-and-monitor&#34;&gt;Step 8: Validate and Monitor&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;Check that all pods are running:
&lt;code&gt;kubectl get pods -n your-spinnaker-namespace&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Verify Spinnaker services are accessible:
&lt;ul&gt;
&lt;li&gt;Access the Spinnaker UI&lt;/li&gt;
&lt;li&gt;Test a simple pipeline&lt;/li&gt;
&lt;li&gt;Check integrations are working&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Monitor the environment for stability over the next few days&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&#34;step-9-remove-operator-and-crds&#34;&gt;Step 9: Remove Operator and CRDs&lt;/h5&gt;
&lt;p&gt;Once stability is confirmed (at least 24 hours later):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Remove the Operator CRDs:
&lt;code&gt;kubectl delete crd spinnakerservices.spinnaker.io&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Remove the Operator deployment if still present:
&lt;code&gt;kubectl delete deployment spinnaker-operator -n your-spinnaker-namespace&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&#34;rollback-plan&#34;&gt;Rollback Plan&lt;/h5&gt;
&lt;p&gt;If issues arise during migration:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Scale up the Operator:
&lt;code&gt;kubectl scale deployment spinnaker-operator -n your-spinnaker-namespace --replicas=1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Reapply the previous SpinnakerService resource:
&lt;code&gt;kubectl apply -f original-spinnakerservice.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Allow the Operator to reconcile and restore the previous state&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;download-script&#34;&gt;Download Script&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Script to download ONLY files from /opt/spinnaker/config in Spinnaker pods&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;set&lt;/span&gt; -e
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt; -z &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$1&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Please provide a namespace&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Usage: &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$0&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; &amp;lt;namespace&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87&#34;&gt;exit&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;operator-migration&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Creating output directory: &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# 1. First download deployments and services&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Downloading Kubernetes deployments and services...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Download Deployments&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Downloading deployments...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/deployments&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl get deployments -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -o name &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;read&lt;/span&gt; -r deployment&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;deployment_name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$deployment&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; cut -d/ -f2&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Downloading deployment: &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$deployment_name&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  kubectl get deployment &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$deployment_name&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -o yaml &amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/deployments/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$deployment_name&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Download Services&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Downloading services...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/services&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl get services -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -o name &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;read&lt;/span&gt; -r service&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;service_name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$service&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; cut -d/ -f2&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Downloading service: &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$service_name&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  kubectl get service &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$service_name&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -o yaml &amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/services/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$service_name&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Download StatefulSets if any&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Checking for statefulsets...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; kubectl get statefulsets -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep -q .&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  mkdir -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/statefulsets&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  kubectl get statefulsets -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -o name &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;read&lt;/span&gt; -r statefulset&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;statefulset_name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$statefulset&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; cut -d/ -f2&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Downloading statefulset: &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$statefulset_name&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    kubectl get statefulset &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$statefulset_name&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -o yaml &amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/statefulsets/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$statefulset_name&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# 2. Now download files from /opt/spinnaker/config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Downloading files ONLY from /opt/spinnaker/config...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Get all pods&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;PODS&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;kubectl get pods -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -o name &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; cut -d/ -f2&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;for&lt;/span&gt; POD in &lt;span style=&#34;color:#000&#34;&gt;$PODS&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;SERVICE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; sed -E &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;s/([a-z-]+)-[0-9a-z-]+.*/\1/&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Processing pod: &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; (service: &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$SERVICE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  mkdir -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$SERVICE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Check ONLY for /opt/spinnaker/config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; kubectl &lt;span style=&#34;color:#204a87&#34;&gt;exec&lt;/span&gt; -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -- ls -la /opt/spinnaker/config &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;amp;&lt;/span&gt;&amp;gt;/dev/null&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Found /opt/spinnaker/config directory in &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# List all files first&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;CONFIG_FILES&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;kubectl &lt;span style=&#34;color:#204a87&#34;&gt;exec&lt;/span&gt; -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -- find /opt/spinnaker/config -type f 2&amp;gt;/dev/null&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt; -z &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$CONFIG_FILES&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;No files found in /opt/spinnaker/config for &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Found &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$CONFIG_FILES&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; wc -l &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; tr -d &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; files in /opt/spinnaker/config for &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Download each file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;for&lt;/span&gt; FILE in &lt;span style=&#34;color:#000&#34;&gt;$CONFIG_FILES&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000&#34;&gt;FILENAME&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;basename &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Downloading &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILENAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; from &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000&#34;&gt;FILE_CONTENT&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;kubectl &lt;span style=&#34;color:#204a87&#34;&gt;exec&lt;/span&gt; -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -- cat &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$?&lt;/span&gt; -eq &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt; -n &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILE_CONTENT&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILE_CONTENT&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$SERVICE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILENAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Saved &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILENAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; to &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$SERVICE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILENAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Failed to download &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILENAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; or file is empty&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Check if we downloaded any files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt; -z &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;ls -A &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$SERVICE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;No files were successfully downloaded from &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Successfully downloaded &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;ls -1 &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$SERVICE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; wc -l &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; tr -d &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; files from &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;No /opt/spinnaker/config directory found in &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$POD&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;======================================&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Download completed. Files saved to: &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Summary of downloaded files by service:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Generate summary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;for&lt;/span&gt; DIR in &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;find &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -mindepth &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt; -maxdepth &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt; -type d &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; sort&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;SERVICE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;basename &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;FILE_COUNT&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;find &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -type f &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; wc -l&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;- &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$SERVICE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;: &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILE_COUNT&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; files&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$FILE_COUNT&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -gt &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ls -1 &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; sort &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;read&lt;/span&gt; -r file&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;  - &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$file&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Script execution complete!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;By following these steps, you&amp;rsquo;ll successfully migrate from the Spinnaker Operator to a native Kubernetes deployment using Kustomize. This approach gives you more direct control over your Spinnaker resources and eliminates dependency on the Operator.
If you encounter any issues during the migration process, please submit a support ticket for assistance.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Component Sizing</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/component-sizing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/component-sizing/</guid>
      <description>
        
        
        &lt;h2 id=&#34;cpu--memory-requestslimits&#34;&gt;CPU &amp;amp; Memory requests/limits&lt;/h2&gt;
&lt;p&gt;Container requests and limits for cpu and memory can be specified in the &lt;code&gt;spinnaker-kustomize/base/*/deployments.yml&lt;/code&gt;
files.  Watch for OutOfMemory exceptions and monitor JVM Memory, CPU usage, and similar
metrics to keep spinnaker up and running.&lt;/p&gt;
&lt;p&gt;Limits and requests can be set per 
&lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/&#34; target=&#34;_blank&#34;&gt;kubernetes documentation&lt;/a&gt;
.&lt;/p&gt;
&lt;h4 id=&#34;updating-java_opts&#34;&gt;Updating JAVA_OPTS&lt;/h4&gt;
&lt;p&gt;All JVM-based services have the following JAVA_OPTS that can be set to adjust things like memory
or additional flags.  You can add these to the deployment ENV variables:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;JAVA_OPTS=-XX:MaxRAMPercentage=50.0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This sets the JVM&amp;rsquo;s heap size to half the memory allocated per container. This can be overriden by specifying your own
&lt;code&gt;JAVA_OPTS&lt;/code&gt; using the &lt;code&gt;env&lt;/code&gt; flags.  Generally, for large production systems, setting explicit -Xmx and -Xms to be the
same value and sized for your environment is recommended to reduce allocation times.  JVM tuning is an entire
separate discussion that should be had with JVM experts or looking at documentation.&lt;/p&gt;
&lt;p&gt;As a starting point, the &lt;code&gt;-Xms&lt;/code&gt; can be set to 80%-90% of the requests memory allotment and &lt;code&gt;-Xmx&lt;/code&gt; can be set to 80-90%
of the limits memory allotment.  It&amp;rsquo;s recommend NOT to make this too large for clouddriver
or processes that fork to external operations (Rosco for bakes).  This is due to those processes not using JVM memory
but OS memory.&lt;/p&gt;
&lt;h4 id=&#34;recommendations&#34;&gt;Recommendations&lt;/h4&gt;
&lt;p&gt;Optimal sizing for your components will depend upon your environment, but in general clouddriver and orca will need to
be larger than the rest of the components as they&amp;rsquo;re continuously processing information. Additionally, echo may also
need to be larger if using event hooks to external systems or processing large pub/sub payloads.&lt;/p&gt;
&lt;h3 id=&#34;replicas&#34;&gt;Replicas&lt;/h3&gt;
&lt;p&gt;All spinnaker services CAN be deployed with multiple replicas for availability. There are configurations
required to enable locking or to prevent concurrent operations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For igor, locking must be enabled to run multiple replicas. This is defaulted on in spinnaker-kustomize. When running
a single pod, you can turn locking off.&lt;/li&gt;
&lt;li&gt;For echo, make sure to use a SQL database. Echo uses a quartz scheduler and may need additional adjustment depending
upon configuration. Read
the 
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/echo#missed-cron-scheduler&#34; target=&#34;_blank&#34;&gt;readme for echo for more information&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;For other services, like clouddriver, using a shared redis and clouddriver should be all that&amp;rsquo;s needed to run multiple
replicas of all services.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: High Availability</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/high-availability/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/high-availability/</guid>
      <description>
        
        
        &lt;h2 id=&#34;warning-this-is-an-advanced-that-most-basic-users-never-need-to-worry-about&#34;&gt;Warning this is an advanced that most basic users never need to worry about&lt;/h2&gt;
&lt;p&gt;This page describes how you can configure a Spinnaker deployment to increase the availability/performance
of specific services beyond simply 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/productionize/scaling/horizontal-scaling/&#34;&gt;horizontally scaling&lt;/a&gt;
 the services.&lt;/p&gt;
&lt;p&gt;This is done by splitting the functionalities of a service into separate logical roles. The benefits of
doing this is specific to the service that is being sharded. These deployment strategies are inspired
by 
&lt;a href=&#34;https://blog.spinnaker.io/scaling-spinnaker-at-netflix-part-1-8a5ae51ee6de&#34; target=&#34;_blank&#34;&gt;Netflix&amp;amp;rsquo;s large scale experience&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;When sharded, the new logical services are given new names. This means that these logical services can be configured and scaled independently of each other.&lt;/p&gt;
&lt;p&gt;Currently, this feature is primarily for Clouddriver and/or Orca.  Echo can do some sharding as well.&lt;/p&gt;
&lt;h2 id=&#34;ha-clouddriver&#34;&gt;HA Clouddriver&lt;/h2&gt;
&lt;div class=&#34;mermaid&#34;&gt;
  
graph TB

clouddriver(Clouddriver) --&gt; clouddriver-caching(Clouddriver-Caching);
clouddriver --&gt; clouddriver-rw(Clouddriver-RW);
clouddriver --&gt; clouddriver-ro(Clouddriver-RO);
clouddriver --&gt; clouddriver-ro-deck(Clouddriver-RO-Deck)

classDef default fill:#d8e8ec,stroke:#39546a;
linkStyle default stroke:#39546a,stroke-width:1px,fill:none;

classDef split fill:#42f4c2,stroke:#39546a;
class clouddriver-caching,clouddriver-ro,clouddriver-ro-deck,clouddriver-rw,echo-scheduler,echo-worker split

&lt;/div&gt;

&lt;p&gt;Clouddriver benefits greatly from isolating its operations into separate services. To split Clouddriver into
multiple services, you&amp;rsquo;ll configure each service to operate on specific configurations and operations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Caching pods - for JUST executing cache agents.  These will not process any user or pipeline execution data&lt;/li&gt;
&lt;li&gt;RW pods - for execution operations&lt;/li&gt;
&lt;li&gt;RO pods - for UI and API operations for end users.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more advanced configurations INCLUDING sharding clouddriver by account, region or application names, you can
look at the code in clouddriver, orca, and gate around ServiceSelectors.  We&amp;rsquo;d welcome additional documentations
for this as needed.&lt;/p&gt;
&lt;p&gt;Although by default the four Clouddriver services will communicate with a global Redis and Database (all Spinnaker services speak
to this Redis/SQL), it is recommended that the logical Clouddriver services be configured to communicate
with external solutions. To be most effective, &lt;code&gt;clouddriver-ro&lt;/code&gt; should be configured to speak to a RO SQL read
replica, &lt;code&gt;clouddriver-ro-deck&lt;/code&gt; should be configured to speak to a different read replica, and the other two should
be configured to speak to the master.&lt;/p&gt;
&lt;p&gt;For example configurations, please look into clouddrivers codebase, the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/storage/&#34;&gt;SQL configuration&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;More information on Redis replication can be 
&lt;a href=&#34;https://redis.io/topics/replication&#34; target=&#34;_blank&#34;&gt;found here&lt;/a&gt;
.&lt;/p&gt;
&lt;h3 id=&#34;clouddriver-caching&#34;&gt;&lt;code&gt;clouddriver-caching&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The first of the four logical Clouddriver services is the &lt;code&gt;clouddriver-caching&lt;/code&gt; service. This service caches and retrieves cloud infrastructure data. Since this is all that &lt;code&gt;clouddriver-caching&lt;/code&gt; is doing, there is no communication between this service and any other Spinnaker service.&lt;/p&gt;
&lt;p&gt;This service&amp;rsquo;s name when 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/component-sizing/&#34;&gt;configuring its sizing&lt;/a&gt;
 is &lt;code&gt;spin-clouddriver-caching&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;clouddriver-rw&#34;&gt;&lt;code&gt;clouddriver-rw&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The second logical Clouddriver service is the &lt;code&gt;clouddriver-rw&lt;/code&gt; service. This service handles all mutating operations aside from what the &lt;code&gt;clouddriver-caching&lt;/code&gt; service does. This service can be scaled to handle an increased number of writes.&lt;/p&gt;
&lt;h3 id=&#34;clouddriver-ro&#34;&gt;&lt;code&gt;clouddriver-ro&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;clouddriver-ro&lt;/code&gt; service handles all read requests to Clouddriver. This service can be scaled to handle an increased number of reads.&lt;/p&gt;
&lt;p&gt;This service&amp;rsquo;s name when 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/component-sizing/&#34;&gt;configuring its sizing&lt;/a&gt;
 is &lt;code&gt;spin-clouddriver-ro&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;clouddriver-ro-deck&#34;&gt;&lt;code&gt;clouddriver-ro-deck&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;clouddriver-ro-deck&lt;/code&gt; service handles all read requests to Clouddriver from Deck (through Gate). This service can be scaled to handle an increased number of reads.&lt;/p&gt;
&lt;p&gt;This service&amp;rsquo;s name when 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/component-sizing/&#34;&gt;configuring its sizing&lt;/a&gt;
 is &lt;code&gt;spin-clouddriver-ro-deck&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;ha-echo&#34;&gt;HA Echo&lt;/h2&gt;
&lt;div class=&#34;mermaid&#34;&gt;
  
graph TB

echo(Echo) --&gt; echo-scheduler(Echo-Scheduler);
echo(Echo) --&gt; echo-worker(Echo-Worker);

classDef default fill:#d8e8ec,stroke:#39546a;
linkStyle default stroke:#39546a,stroke-width:1px,fill:none;

classDef split fill:#42f4c2,stroke:#39546a;
class clouddriver-caching,clouddriver-ro,clouddriver-rw,echo-scheduler,echo-worker split


&lt;/div&gt;

&lt;p&gt;Echo can be split into two separate services that handle different operations. To split Echo for increased availability, run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hal config deploy ha &lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When Spinnaker is deployed with this enabled, Echo will be deploy as two different services:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;#echo-scheduler&#34;&gt;&amp;lt;code&amp;gt;echo-scheduler&amp;lt;/code&amp;gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;#echo-worker&#34;&gt;&amp;lt;code&amp;gt;echo-worker&amp;lt;/code&amp;gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Although only the &lt;code&gt;echo-worker&lt;/code&gt; service can be horizontally scaled, splitting the services will reduce the load on both.&lt;/p&gt;
&lt;h3 id=&#34;echo-scheduler&#34;&gt;&lt;code&gt;echo-scheduler&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;echo-scheduler&lt;/code&gt; service handles scheduled tasks, or cron-jobs. Since it performs its tasks periodically (no triggers) there is no need for communication with other Spinnaker services.&lt;/p&gt;
&lt;p&gt;This service&amp;rsquo;s name when 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/component-sizing/&#34;&gt;configuring its sizing&lt;/a&gt;
 is &lt;code&gt;spin-echo-scheduler&lt;/code&gt;. To avoid duplicate triggering, this service must be deployed with exactly one pod.&lt;/p&gt;
&lt;h3 id=&#34;echo-worker&#34;&gt;&lt;code&gt;echo-worker&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;echo-worker&lt;/code&gt; service handles all operations of Echo besides the cron-jobs.&lt;/p&gt;
&lt;p&gt;This service&amp;rsquo;s name when 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/component-sizing/&#34;&gt;configuring its sizing&lt;/a&gt;
 is &lt;code&gt;spin-echo-worker&lt;/code&gt;. This service can be scaled to more than one pod, unlike the &lt;code&gt;echo-scheduler&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;ha-topology&#34;&gt;HA Topology&lt;/h2&gt;
&lt;p&gt;With all services enabled for high availability, the new architecture looks like this:&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;
  
graph TB

deck(Deck) --&gt; gate;
api(Custom Script/API Caller) --&gt; gate(Gate);
gate --&gt; kayenta(Kayenta);
gate --&gt; orca(Orca);
gate --&gt; clouddriver-ro(Clouddriver-RO);
gate --&gt; clouddriver-ro-deck(Clouddriver-RO-Deck)
orca --&gt; clouddriver-rw(Clouddriver-RW);
gate --&gt; rosco(Rosco);
orca --&gt; front50;
orca --&gt; rosco;
gate --&gt; front50(Front50);
gate --&gt; fiat(Fiat);
orca --&gt; kayenta;
clouddriver-ro --&gt; fiat;
clouddriver-ro-deck --&gt; fiat;
clouddriver-rw --&gt; fiat;
orca --&gt; fiat;
front50 --&gt; fiat;
echo-worker(Echo-Worker) --&gt; orca;
echo-worker --&gt; front50;
igor(Igor) --&gt; echo-worker;
clouddriver-caching(Clouddriver-Caching);
echo-scheduler(Echo-Scheduler);

classDef default fill:#d8e8ec,stroke:#39546a;
linkStyle default stroke:#39546a,stroke-width:1px,fill:none;

classDef external fill:#c0d89d,stroke:#39546a;
class deck,api external

classDef split fill:#42f4c2,stroke:#39546a;
class clouddriver-caching,clouddriver-ro,clouddriver-ro-deck,clouddriver-rw,echo-scheduler,echo-worker split

&lt;/div&gt;

&lt;h2 id=&#34;recoverability&#34;&gt;Recoverability&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;ve 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/productionize/caching/externalize-redis/&#34;&gt;configured an external Redis&lt;/a&gt;
, Spinnaker can recover from failure events. Igor is responsible for polling the state store (Redis) and recreating state. During a recovery, numerous old pipelines may be re-triggered. To protect against this scenario, Igor has a setting called &lt;code&gt;pollingSafeguard.itemUpperThreshold&lt;/code&gt;, which is the max number of pipeline triggers to accept before recognizing the scenario of numerous old re-triggers and stopping the state update. 
&lt;a href=&#34;https://github.com/spinnaker/igor/blob/22106ca4efb36d32d65650877c98425fcab77395/igor-core/src/main/java/com/netflix/spinnaker/igor/IgorConfigurationProperties.java#L86&#34; target=&#34;_blank&#34;&gt;Read the inline documentation for this setting&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Although it&amp;rsquo;s possible, it is not recommended to use spot instances on AWS or preemtible nodes to lower cost in production, as outages in your continuous deployment tool will likely cost more than any savings. Also consider hosting Spinnaker on isolated infrastructure to reduce the possibility that other applications or teams will affect your Spinnaker instance.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also recommended to spread out services over multiple availability zones, as described in 
&lt;a href=&#34;https://blog.spinnaker.io/scaling-spinnaker-at-netflix-part-1-8a5ae51ee6de&#34; target=&#34;_blank&#34;&gt;the Netflix implementation&lt;/a&gt;
.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Deprecated - Halyard</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/halyard/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/halyard/</guid>
      <description>
        
        
        &lt;h1 id=&#34;this-documentation-is-deprecated-as-halyard-is-deprecated-and-no-longer-supported--this-is-left-here-for-historical-purposes&#34;&gt;This documentation is deprecated as halyard is deprecated and no longer supported.  This is left here for historical purposes&lt;/h1&gt;
&lt;p&gt;Halyard is a command-line administration tool that manages the lifecycle of your Spinnaker deployment,
including writing &amp;amp; validating your deployment&amp;rsquo;s configuration, deploying each of Spinnaker&amp;rsquo;s
microservices, and updating the deployment.&lt;/p&gt;
&lt;p&gt;All production-capable deployments of Spinnaker require Halyard in order to
install, configure, and update Spinnaker. Though it&amp;rsquo;s possible to install
Spinnaker without Halyard, we don&amp;rsquo;t recommend it, and if you get stuck we&amp;rsquo;re
just going to tell you to use Halyard.&lt;/p&gt;
&lt;p&gt;There are two ways you can install Halyard:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;#install-on-debianubuntu&#34;&gt;locally on Debian/Ubuntu&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;This can be on a desktop or laptop computer, or on a VM.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;#install-halyard-on-docker&#34;&gt;on Docker&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recommend you install Halyard on a machine with at least 12GB of RAM.&lt;/p&gt;
&lt;h2 id=&#34;install-on-debianubuntu&#34;&gt;Install on Debian/Ubuntu&lt;/h2&gt;
&lt;p&gt;Halyard runs on&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 18.04 or higher&lt;/li&gt;
&lt;li&gt;Debian 10 or higher&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Get the latest version of Halyard:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install it:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo bash InstallHalyard.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re prompted for any information, default answers are usually suitable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check whether Halyard was installed properly:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hal -v&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If this command fails, make sure &lt;code&gt;hal&lt;/code&gt; is in your &lt;code&gt;$PATH&lt;/code&gt;, and check the logs
under &lt;code&gt;/var/log/spinnaker/halyard/halyard.log&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;. ~/.bashrc&lt;/code&gt; to enable command completion.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To get help with any &lt;code&gt;hal&lt;/code&gt; command, append &lt;code&gt;-h&lt;/code&gt;. Also, see the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/halyard/commands&#34;&gt;Halyard command
Reference&lt;/a&gt;
.&lt;/p&gt;
&lt;h3 id=&#34;update-halyard-on-debianubuntu&#34;&gt;Update Halyard on Debian/Ubuntu&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This upgrade procedure only works with Halyard v1.45.0 and higher.
If you are using a Halyard version prior to v1.45.0, follow the
instructions above to 
&lt;a href=&#34;#install-on-debianubuntu&#34;&gt;Install Halyard&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt --only-upgrade install spinnaker-halyard
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;uninstall-halyard-from-debianubuntu&#34;&gt;Uninstall Halyard from Debian/Ubuntu&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: uninstalling Halyard deletes the entire contents of your &lt;code&gt;~/.hal&lt;/code&gt;
directory. Don&amp;rsquo;t do it unless you&amp;rsquo;re prepared to lose your configuration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;If you used Halyard to deploy Spinnaker, and you want to purge that deployment,
run the following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hal deploy clean
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now you can safely uninstall Halyard:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ~/.hal/uninstall.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span class=&#34;begin-collapsible-section&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;install-halyard-on-docker&#34;&gt;Install Halyard on Docker&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: If you install Halyard in a Docker container, you will need to manually
change permissions on the mounted ~/.hal directory to ensure Halyard can read
and write to it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Make sure you have 
&lt;a href=&#34;https://docs.docker.com/engine/installation/&#34; target=&#34;_blank&#34;&gt;Docker CE
installed&lt;/a&gt;
.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On your current machine, make a local Halyard config directory.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir ~/.hal
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will persist between runs of the Halyard docker container.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start Halyard in a new Docker container.&lt;/p&gt;
&lt;p&gt;The following command creates the Halyard Docker container, mounting the
Halyard config directory:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -p 8084:8084 -p 9000:9000 \
    --name halyard --rm \
    -v ~/.hal:/home/spinnaker/.hal \
    -it \
    us-docker.pkg.dev/spinnaker-community/docker/halyard:stable
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This runs as a foreground process in your current shell. This is useful
because it emits all of the Halyard daemon&amp;rsquo;s logs, which are not persisted.
If you don&amp;rsquo;t care about the logs, and would rather run in detached mode,
replace the &lt;code&gt;-it&lt;/code&gt; with &lt;code&gt;-d&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Any secrets/config you need to supply to the daemon (for example, a
kubeconfig file) must be mounted in either your local &lt;code&gt;~/.hal&lt;/code&gt; directory, or
another directory that you supply to &lt;code&gt;docker run&lt;/code&gt; with additional &lt;code&gt;-v&lt;/code&gt;
command-line options.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In a separate shell, connect to Halyard:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker exec -it halyard bash
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can interact with Halyard from here.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following command to enable command completion:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;source&lt;/span&gt; &amp;lt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;(&lt;/span&gt;hal --print-bash-completion&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To get help with any &lt;code&gt;hal&lt;/code&gt; command, append &lt;code&gt;-h&lt;/code&gt;. Also, see the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/halyard/commands&#34;&gt;Halyard command
Reference&lt;/a&gt;
.&lt;/p&gt;
&lt;h3 id=&#34;update-halyard-on-docker&#34;&gt;Update Halyard on Docker&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Fetch the latest Halyard version.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker pull us-docker.pkg.dev/spinnaker-community/docker/halyard:stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stop the running Halyard container.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;docker stop halyard&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Re-run the container:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -p 8084:8084 -p 9000:9000 \
    --name halyard --rm \
    -v ~/.hal:/home/spinnaker/.hal \
    -it \
    us-docker.pkg.dev/spinnaker-community/docker/halyard:stable
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This re-starts the container using the updated image you got in step 1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In a separate shell, run:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker exec -it halyard bash
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;uninstall-halyard-from-docker&#34;&gt;Uninstall Halyard from Docker&lt;/h3&gt;
&lt;p&gt;To uninstall Halyard, just delete the container.&lt;/p&gt;
&lt;p&gt;&lt;code&gt; docker rm halyard&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;end-collapsible-section&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Now that Halyard is running, it&amp;rsquo;s time to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/providers/&#34;&gt;choose your cloud provider&lt;/a&gt;
.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
