apiVersion: v1 kind: Namespace metadata: creationTimestamp: null name: hello-world namespace: hello-world spec: {} status: {} --- apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: hello-world-bluegreen namespace: hello-world spec: replicas: 2 revisionHistoryLimit: 2 selector: matchLabels: app: rollout-bluegreen template: metadata: labels: app: rollout-bluegreen spec: containers: - name: hello-world image: docker.io/waylonwalker/learn-rollouts:v1 ports: - containerPort: 5000 strategy: blueGreen: # activeService specifies the service to update with the new template hash at time of promotion. # This field is mandatory for the blueGreen update strategy. activeService: hello-world-active # previewService specifies the service to update with the new template hash before promotion. # This allows the preview stack to be reachable without serving production traffic. # This field is optional. previewService: hello-world-preview # autoPromotionEnabled disables automated promotion of the new stack by pausing the rollout # immediately before the promotion. If omitted, the default behavior is to promote the new # stack as soon as the ReplicaSet are completely ready/available. # Rollouts can be resumed using: `kubectl argo rollouts promote ROLLOUT` autoPromotionEnabled: false --- apiVersion: v1 kind: Service metadata: name: hello-world-active namespace: hello-world spec: ports: - name: "5000" port: 5000 targetPort: 5000 --- apiVersion: v1 kind: Service metadata: name: hello-world-preview namespace: hello-world spec: # selector: # app: hello-world ports: - name: "5000" port: 5000 targetPort: 5000 # blue-green deployment replaces traditional deployment # --- # # apiVersion: apps/v1 # kind: Deployment # metadata: # labels: # app: hello-world # name: hello-world-deployment # namespace: hello-world # spec: # replicas: 1 # selector: # matchLabels: # app: hello-world # template: # metadata: # labels: # app: hello-world # spec: # containers: # - image: docker.io/waylonwalker/learn-rollouts:v2 # name: hello-world # ports: # - containerPort: 5000 # # outside of kind you might prefer ingress # --- # # apiVersion: networking.k8s.io/v1 # kind: Ingress # metadata: # labels: # service: hello-world # name: hello-world-ingress # namespace: hello-world # spec: # rules: # - http: # paths: # - backend: # service: # name: hello-world-active # port: # number: 5000 # path: /active # pathType: Prefix # # - http: # paths: # - backend: # service: # name: hello-world-preview # port: # number: 5000 # path: /preview # pathType: Prefix # status: # loadBalancer: {} # # inside of kind nodeport service is easier to test --- apiVersion: v1 kind: Service metadata: name: hello-world-active namespace: hello-world spec: type: NodePort # Change service type to NodePort ports: - name: "5000" port: 5000 targetPort: 5000 nodePort: 30001 # Specify a node port (you can choose any available port) selector: app: rollout-bluegreen --- apiVersion: v1 kind: Service metadata: name: hello-world-preview namespace: hello-world spec: type: NodePort # Change service type to NodePort ports: - name: "5000" port: 5000 targetPort: 5000 nodePort: 30002 # Specify a different node port (make sure it's available) selector: app: rollout-bluegreen