Blue-Green Deployments with Spinnaker: Difference between revisions
Line 58: | Line 58: | ||
Add stage → Deploy (Manifest). Stage name: "Deploy in Stage". This stage will deploy the Helm chart and associate the workload with the "stage" service. For more details, see: {{Internal|Spinnaker_Stage_Deploy_(Manifest)#Overview|Deploy (Manifest)}} | Add stage → Deploy (Manifest). Stage name: "Deploy in Stage". This stage will deploy the Helm chart and associate the workload with the "stage" service. For more details, see: {{Internal|Spinnaker_Stage_Deploy_(Manifest)#Overview|Deploy (Manifest)}} | ||
At this stage, we | At this stage, we do enable Rollout Strategy Options, so we can associate the workload with the "stage" service. | ||
Enable: "Spinnaker manages traffic based on your selected strategy" → Service(s) Namespace → Service(s): "stage" → Traffic: Send client requests to new pods → Strategy: Highlander. | |||
Add stage → Manual Judgement. Stage name: "Wait on Stage Testing" | Add stage → Manual Judgement. Stage name: "Wait on Stage Testing" | ||
Add stage → Deploy (Manifest). Stage name: "Deploy in Prod". This stage will deploy the same Helm chart that was tested in Stage and associate the workload with the "prod" service. For more details, see: {{Internal|Spinnaker_Stage_Deploy_(Manifest)#Overview|Deploy (Manifest)}} | |||
At this stage, we do enable Rollout Strategy Options: | |||
Enable: "Spinnaker manages traffic based on your selected strategy" | |||
=Organizatorium= | =Organizatorium= |
Revision as of 04:25, 9 March 2022
External
Internal
Overview
This article documents a pipeline that deploys a release in a Stage environment, waits for testing, the deploys the same release in Prod. The application is a Helm-packaged Kubernetes application, but some of the Kuberentes resources are created manually directly in Spinnaker.
Create Services
Create two Services ("stage" and "prod") within the Spinnaker Application.
Load Balancers → Create Load Balancer
Select the right "account" (Kubernetes cluster)
Manifest (do not forget to adjust the namespace):
apiVersion: v1
kind: Service
metadata:
name: stage
namespace: of02
spec:
type: ClusterIP
selector:
stage: 'true' # this label will be dynamically applied to the workload pods
ports:
- port: 8080
name: http
targetPort: 8080
apiVersion: v1
kind: Service
metadata:
name: prod
namespace: of02
spec:
type: ClusterIP
selector:
prod: 'true' # this label will be dynamically applied to the workload pods
ports:
- port: 8080
name: http
targetPort: 8080
Create the Pipeline
It will be a "deploy to stage → manual testing → manual judgement → deploy to prod" pipeline.
Name: "Stage - Manual Testing - Prod" (no "→" allowed in name)
Add stage → Bake (Manifest). Stage name: "Render Helm Chart". This stage will render the helm chart, apply the configuration overlay and overwrite the image tag. For more details, see:
Add stage → Deploy (Manifest). Stage name: "Deploy in Stage". This stage will deploy the Helm chart and associate the workload with the "stage" service. For more details, see:
At this stage, we do enable Rollout Strategy Options, so we can associate the workload with the "stage" service.
Enable: "Spinnaker manages traffic based on your selected strategy" → Service(s) Namespace → Service(s): "stage" → Traffic: Send client requests to new pods → Strategy: Highlander.
Add stage → Manual Judgement. Stage name: "Wait on Stage Testing"
Add stage → Deploy (Manifest). Stage name: "Deploy in Prod". This stage will deploy the same Helm chart that was tested in Stage and associate the workload with the "prod" service. For more details, see:
At this stage, we do enable Rollout Strategy Options:
Enable: "Spinnaker manages traffic based on your selected strategy"
Organizatorium
TO PROCESS:
- https://blog.spinnaker.io/introducing-rollout-strategies-in-the-kubernetes-v2-provider-8bbffea109a
- https://spinnaker.io/docs/guides/user/kubernetes-v2/rollout-strategies/#redblack-rollouts
- https://spinnaker.io/docs/guides/user/kubernetes-v2/traffic-management/
- https://www.opsmx.com/blog/spinnaker-pipeline-blue-green-strategy-with-external-versioning-and-kubernetes-deployment-object/
- https://www.opsmx.com/blog/spinnaker-integration-with-istio/