Skip to content

Instantly share code, notes, and snippets.

@ashutosh16
Created February 6, 2024 21:22
Show Gist options
  • Save ashutosh16/f399e13bd1e5ee6acd7695be5795a4e0 to your computer and use it in GitHub Desktop.
Save ashutosh16/f399e13bd1e5ee6acd7695be5795a4e0 to your computer and use it in GitHub Desktop.
rollout.yaml
---
# Source: meeech-old-timey-service/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: scratch-meeech-old-timey-service
labels:
helm.sh/chart: meeech-old-timey-service-1.0.0
app.kubernetes.io/name: meeech-old-timey-service
app.kubernetes.io/instance: scratch
app.kubernetes.io/version: "1.0.0"
app.kubernetes.io/managed-by: Helm
kube_app_name: meeech-old-timey-service
kong_upstream: meeech-old-timey-service
---
# Source: meeech-old-timey-service/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: scratch-meeech-old-timey-service
labels:
helm.sh/chart: meeech-old-timey-service-1.0.0
app.kubernetes.io/name: meeech-old-timey-service
app.kubernetes.io/instance: scratch
app.kubernetes.io/version: "1.0.0"
app.kubernetes.io/managed-by: Helm
kube_app_name: meeech-old-timey-service
kong_upstream: meeech-old-timey-service
spec:
type: ClusterIP
ports:
- port: 8080
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: meeech-old-timey-service
app.kubernetes.io/instance: scratch
service-role: "live"
---
# Source: meeech-old-timey-service/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: scratch-meeech-old-timey-service-canary
labels:
helm.sh/chart: meeech-old-timey-service-1.0.0
app.kubernetes.io/name: meeech-old-timey-service
app.kubernetes.io/instance: scratch
app.kubernetes.io/version: "1.0.0"
app.kubernetes.io/managed-by: Helm
kube_app_name: meeech-old-timey-service
kong_upstream: meeech-old-timey-service
spec:
type: ClusterIP
ports:
- port: 8080
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: meeech-old-timey-service
app.kubernetes.io/instance: scratch
---
# Source: meeech-old-timey-service/templates/ingress-canary.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: scratch-meeech-old-timey-service-canary
labels:
helm.sh/chart: meeech-old-timey-service-1.0.0
app.kubernetes.io/name: meeech-old-timey-service
app.kubernetes.io/instance: scratch
app.kubernetes.io/version: "1.0.0"
app.kubernetes.io/managed-by: Helm
kube_app_name: meeech-old-timey-service
kong_upstream: meeech-old-timey-service
spec:
ingressClassName: kong
rules:
- host: "canary.k8s.m.internal"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: scratch-meeech-old-timey-service-canary
port:
number: 8080
---
# Source: meeech-old-timey-service/templates/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: scratch-meeech-old-timey-service
labels:
helm.sh/chart: meeech-old-timey-service-1.0.0
app.kubernetes.io/name: meeech-old-timey-service
app.kubernetes.io/instance: scratch
app.kubernetes.io/version: "1.0.0"
app.kubernetes.io/managed-by: Helm
kube_app_name: meeech-old-timey-service
kong_upstream: meeech-old-timey-service
spec:
ingressClassName: kong
rules:
- host: "k8s.m.internal"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: scratch-meeech-old-timey-service
port:
number: 8080
---
# Source: meeech-old-timey-service/templates/ar-rollout.yaml
apiVersion: argoproj.io/v1alpha1 # Create a rollout resource
kind: Rollout
metadata:
name: scratch-meeech-old-timey-service
labels:
name: "meeech-old-timey-service-1"
annotations:
# In theory we can encode every event here, and allow end users to then only specify what they are interested in
notifications.argoproj.io/subscriptions: |
- trigger: [on-analysis-run-error, on-analysis-run-failed, on-analysis-run-running, on-rollout-aborted, on-rollout-completed, on-rollout-paused, on-rollout-step-completed, on-rollout-updated, on-scaling-replica-set]
destinations:
- service: slack
recipients: [davey-jones-locker]
spec:
replicas: 3
revisionHistoryLimit: 10
rollbackWindow:
revisions: 5
# Make sure this will exclude any EXPERIMENT pods
selector:
matchLabels:
app.kubernetes.io/name: meeech-old-timey-service
app.kubernetes.io/instance: scratch
template:
metadata:
annotations:
randomToForceNewRS: "5md2V"
labels:
# Need this for HPA to ignore other temp pod/jobs. fml.
app.kubernetes.io/component: service
app.kubernetes.io/name: meeech-old-timey-service
app.kubernetes.io/instance: scratch
service-role: live
tags.datadoghq.com/env: local
tags.datadoghq.com/service: meeech-old-timey-service
tags.datadoghq.com/version: "1.0.0"
# to mimic CCC - this is turned into helm_chart_version
name: "meeech-old-timey-service-1"
spec:
serviceAccountName: scratch-meeech-old-timey-service
securityContext:
{}
containers:
- name: meeech-old-timey-service
securityContext:
{}
image: "ghcr.io/argocon22workshop/rollouts-demo:yellow"
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
protocol: TCP
env:
- name: HTTP_PORT
value: "8080"
- name: K8S_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: K8S_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: K8S_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
volumeMounts:
- mountPath: /etc/podinfo
name: podinfo
resources:
limits:
memory: 30Mi
requests:
memory: 8Mi
volumes:
- name: podinfo
downwardAPI:
items:
- path: "release-stage"
fieldRef:
fieldPath: metadata.labels['release-stage']
strategy:
canary:
canaryService: scratch-meeech-old-timey-service-canary
# stableService: scratch-meeech-old-timey-service-stable
# add these labels for better targetting of the services
# we have 2 service-role buckets - experiment and live - experiements wont be picked up by the live service
canaryMetadata:
labels:
release-stage: canary
service-role: live
stableMetadata:
labels:
release-stage: stable
service-role: live
steps:
- setWeight: 25
- pause: {
duration: 15m,
}
- setWeight: 50
- pause: {
duration: 20m,
}
- setWeight: 100
- pause: {
duration: 10m,
}
---
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment