Only in step1/mimir-distributed/charts: rollout_operator
diff -c -r step0/mimir-distributed/templates/alertmanager/alertmanager-statefulset.yaml step1/mimir-distributed/templates/alertmanager/alertmanager-statefulset.yaml
*** step0/mimir-distributed/templates/alertmanager/alertmanager-statefulset.yaml
--- step1/mimir-distributed/templates/alertmanager/alertmanager-statefulset.yaml
***************
*** 83,88 ****
--- 83,473 ----
              - "-target=alertmanager"
              - "-config.expand-env=true"
              - "-config.file=/etc/mimir/mimir.yaml"
+             - "-alertmanager.sharding-ring.instance-availability-zone=zone-default"
+           volumeMounts:
+             - name: config
+               mountPath: /etc/mimir
+             - name: runtime-config
+               mountPath: /var/mimir
+             - name: storage
+               mountPath: "/data"
+             - name: tmp
+               mountPath: /tmp
+           ports:
+             - name: http-metrics
+               containerPort: 8080
+               protocol: TCP
+             - name: grpc
+               containerPort: 9095
+               protocol: TCP
+             - name: memberlist
+               containerPort: 7946
+               protocol: TCP
+           livenessProbe:
+             null
+           readinessProbe:
+             httpGet:
+               path: /ready
+               port: http-metrics
+             initialDelaySeconds: 45
+           resources:
+             requests:
+               cpu: 10m
+               memory: 32Mi
+           securityContext:
+             readOnlyRootFilesystem: true
+           env:
+           envFrom:
+ ---
+ # Source: mimir-distributed/templates/alertmanager/alertmanager-statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   name: krajo-mimir-alertmanager-zone-a
+   labels:
+     app.kubernetes.io/name: mimir
+     app.kubernetes.io/instance: krajo
+     app.kubernetes.io/component: alertmanager
+     app.kubernetes.io/part-of: memberlist
+     app.kubernetes.io/managed-by: Helm
+     name: "alertmanager-zone-a"
+     rollout-group: alertmanager
+     zone: zone-a
+   annotations:
+     rollout-max-unavailable: "2"
+   namespace: "default"
+ spec:
+   replicas: 0
+   selector:
+     matchLabels:
+       app.kubernetes.io/name: mimir
+       app.kubernetes.io/instance: krajo
+       app.kubernetes.io/component: alertmanager
+       rollout-group: alertmanager
+       zone: zone-a
+   updateStrategy:
+     type: OnDelete
+   serviceName: krajo-mimir-alertmanager
+   volumeClaimTemplates:
+     - metadata:
+         name: storage
+       spec:
+         accessModes:
+           - ReadWriteOnce
+         resources:
+           requests:
+             storage: "1Gi"
+   template:
+     metadata:
+       labels:
+         app.kubernetes.io/name: mimir
+         app.kubernetes.io/instance: krajo
+         app.kubernetes.io/managed-by: Helm
+         app.kubernetes.io/component: alertmanager
+         app.kubernetes.io/part-of: memberlist
+         name: "alertmanager-zone-a"
+         rollout-group: alertmanager
+         zone: zone-a
+       annotations:
+       namespace: "default"
+     spec:
+       serviceAccountName: krajo-mimir
+       securityContext:
+         {}
+       initContainers:
+         []
+       nodeSelector:
+         {}
+       affinity:
+         {}
+       topologySpreadConstraints:
+         - maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+           labelSelector:
+             matchLabels:
+               app.kubernetes.io/name: mimir
+               app.kubernetes.io/instance: krajo
+               app.kubernetes.io/component: alertmanager
+       tolerations:
+         []
+       terminationGracePeriodSeconds: 60
+       volumes:
+         - name: config
+           configMap:
+             name: krajo-mimir-config
+             items:
+               - key: "mimir.yaml"
+                 path: "mimir.yaml"
+         - name: runtime-config
+           configMap:
+             name: krajo-mimir-runtime
+         - name: tmp
+           emptyDir: {}
+       containers:
+         - name: alertmanager
+           imagePullPolicy: IfNotPresent
+           args:
+             - "-target=alertmanager"
+             - "-config.expand-env=true"
+             - "-config.file=/etc/mimir/mimir.yaml"
+             - "-alertmanager.sharding-ring.instance-availability-zone=zone-a"
+           volumeMounts:
+             - name: config
+               mountPath: /etc/mimir
+             - name: runtime-config
+               mountPath: /var/mimir
+             - name: storage
+               mountPath: "/data"
+             - name: tmp
+               mountPath: /tmp
+           ports:
+             - name: http-metrics
+               containerPort: 8080
+               protocol: TCP
+             - name: grpc
+               containerPort: 9095
+               protocol: TCP
+             - name: memberlist
+               containerPort: 7946
+               protocol: TCP
+           livenessProbe:
+             null
+           readinessProbe:
+             httpGet:
+               path: /ready
+               port: http-metrics
+             initialDelaySeconds: 45
+           resources:
+             requests:
+               cpu: 10m
+               memory: 32Mi
+           securityContext:
+             readOnlyRootFilesystem: true
+           env:
+           envFrom:
+ ---
+ # Source: mimir-distributed/templates/alertmanager/alertmanager-statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   name: krajo-mimir-alertmanager-zone-b
+   labels:
+     app.kubernetes.io/name: mimir
+     app.kubernetes.io/instance: krajo
+     app.kubernetes.io/component: alertmanager
+     app.kubernetes.io/part-of: memberlist
+     app.kubernetes.io/managed-by: Helm
+     name: "alertmanager-zone-b"
+     rollout-group: alertmanager
+     zone: zone-b
+   annotations:
+     rollout-max-unavailable: "2"
+   namespace: "default"
+ spec:
+   replicas: 0
+   selector:
+     matchLabels:
+       app.kubernetes.io/name: mimir
+       app.kubernetes.io/instance: krajo
+       app.kubernetes.io/component: alertmanager
+       rollout-group: alertmanager
+       zone: zone-b
+   updateStrategy:
+     type: OnDelete
+   serviceName: krajo-mimir-alertmanager
+   volumeClaimTemplates:
+     - metadata:
+         name: storage
+       spec:
+         accessModes:
+           - ReadWriteOnce
+         resources:
+           requests:
+             storage: "1Gi"
+   template:
+     metadata:
+       labels:
+         app.kubernetes.io/name: mimir
+         app.kubernetes.io/instance: krajo
+         app.kubernetes.io/managed-by: Helm
+         app.kubernetes.io/component: alertmanager
+         app.kubernetes.io/part-of: memberlist
+         name: "alertmanager-zone-b"
+         rollout-group: alertmanager
+         zone: zone-b
+       annotations:
+       namespace: "default"
+     spec:
+       serviceAccountName: krajo-mimir
+       securityContext:
+         {}
+       initContainers:
+         []
+       nodeSelector:
+         {}
+       affinity:
+         {}
+       topologySpreadConstraints:
+         - maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+           labelSelector:
+             matchLabels:
+               app.kubernetes.io/name: mimir
+               app.kubernetes.io/instance: krajo
+               app.kubernetes.io/component: alertmanager
+       tolerations:
+         []
+       terminationGracePeriodSeconds: 60
+       volumes:
+         - name: config
+           configMap:
+             name: krajo-mimir-config
+             items:
+               - key: "mimir.yaml"
+                 path: "mimir.yaml"
+         - name: runtime-config
+           configMap:
+             name: krajo-mimir-runtime
+         - name: tmp
+           emptyDir: {}
+       containers:
+         - name: alertmanager
+           imagePullPolicy: IfNotPresent
+           args:
+             - "-target=alertmanager"
+             - "-config.expand-env=true"
+             - "-config.file=/etc/mimir/mimir.yaml"
+             - "-alertmanager.sharding-ring.instance-availability-zone=zone-b"
+           volumeMounts:
+             - name: config
+               mountPath: /etc/mimir
+             - name: runtime-config
+               mountPath: /var/mimir
+             - name: storage
+               mountPath: "/data"
+             - name: tmp
+               mountPath: /tmp
+           ports:
+             - name: http-metrics
+               containerPort: 8080
+               protocol: TCP
+             - name: grpc
+               containerPort: 9095
+               protocol: TCP
+             - name: memberlist
+               containerPort: 7946
+               protocol: TCP
+           livenessProbe:
+             null
+           readinessProbe:
+             httpGet:
+               path: /ready
+               port: http-metrics
+             initialDelaySeconds: 45
+           resources:
+             requests:
+               cpu: 10m
+               memory: 32Mi
+           securityContext:
+             readOnlyRootFilesystem: true
+           env:
+           envFrom:
+ ---
+ # Source: mimir-distributed/templates/alertmanager/alertmanager-statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   name: krajo-mimir-alertmanager-zone-c
+   labels:
+     app.kubernetes.io/name: mimir
+     app.kubernetes.io/instance: krajo
+     app.kubernetes.io/component: alertmanager
+     app.kubernetes.io/part-of: memberlist
+     app.kubernetes.io/managed-by: Helm
+     name: "alertmanager-zone-c"
+     rollout-group: alertmanager
+     zone: zone-c
+   annotations:
+     rollout-max-unavailable: "2"
+   namespace: "default"
+ spec:
+   replicas: 0
+   selector:
+     matchLabels:
+       app.kubernetes.io/name: mimir
+       app.kubernetes.io/instance: krajo
+       app.kubernetes.io/component: alertmanager
+       rollout-group: alertmanager
+       zone: zone-c
+   updateStrategy:
+     type: OnDelete
+   serviceName: krajo-mimir-alertmanager
+   volumeClaimTemplates:
+     - metadata:
+         name: storage
+       spec:
+         accessModes:
+           - ReadWriteOnce
+         resources:
+           requests:
+             storage: "1Gi"
+   template:
+     metadata:
+       labels:
+         app.kubernetes.io/name: mimir
+         app.kubernetes.io/instance: krajo
+         app.kubernetes.io/managed-by: Helm
+         app.kubernetes.io/component: alertmanager
+         app.kubernetes.io/part-of: memberlist
+         name: "alertmanager-zone-c"
+         rollout-group: alertmanager
+         zone: zone-c
+       annotations:
+       namespace: "default"
+     spec:
+       serviceAccountName: krajo-mimir
+       securityContext:
+         {}
+       initContainers:
+         []
+       nodeSelector:
+         {}
+       affinity:
+         {}
+       topologySpreadConstraints:
+         - maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+           labelSelector:
+             matchLabels:
+               app.kubernetes.io/name: mimir
+               app.kubernetes.io/instance: krajo
+               app.kubernetes.io/component: alertmanager
+       tolerations:
+         []
+       terminationGracePeriodSeconds: 60
+       volumes:
+         - name: config
+           configMap:
+             name: krajo-mimir-config
+             items:
+               - key: "mimir.yaml"
+                 path: "mimir.yaml"
+         - name: runtime-config
+           configMap:
+             name: krajo-mimir-runtime
+         - name: tmp
+           emptyDir: {}
+       containers:
+         - name: alertmanager
+           imagePullPolicy: IfNotPresent
+           args:
+             - "-target=alertmanager"
+             - "-config.expand-env=true"
+             - "-config.file=/etc/mimir/mimir.yaml"
+             - "-alertmanager.sharding-ring.instance-availability-zone=zone-c"
            volumeMounts:
              - name: config
                mountPath: /etc/mimir
diff -c -r step0/mimir-distributed/templates/alertmanager/alertmanager-svc.yaml step1/mimir-distributed/templates/alertmanager/alertmanager-svc.yaml
*** step0/mimir-distributed/templates/alertmanager/alertmanager-svc.yaml
--- step1/mimir-distributed/templates/alertmanager/alertmanager-svc.yaml
***************
*** 28,30 ****
--- 28,141 ----
      app.kubernetes.io/name: mimir
      app.kubernetes.io/instance: krajo
      app.kubernetes.io/component: alertmanager
+ ---
+ # Source: mimir-distributed/templates/alertmanager/alertmanager-svc.yaml
+ apiVersion: v1
+ kind: Service
+ metadata:
+   name: krajo-mimir-alertmanager-zone-a
+   labels:
+     app.kubernetes.io/name: mimir
+     app.kubernetes.io/instance: krajo
+     app.kubernetes.io/component: alertmanager
+     app.kubernetes.io/part-of: memberlist
+     app.kubernetes.io/managed-by: Helm
+     name: "alertmanager-zone-a"
+     rollout-group: alertmanager
+     zone: zone-a
+     # Prevent scraping PODs via this service during migration as the original non zone-aware service already scrapes all PODs and you get duplicate metrics.
+     prometheus.io/service-monitor: "false"
+   annotations:
+     {}
+   namespace: "default"
+ spec:
+   type: ClusterIP
+   ports:
+     - port: 8080
+       protocol: TCP
+       name: http-metrics
+       targetPort: http-metrics
+     - port: 9095
+       protocol: TCP
+       name: grpc
+       targetPort: grpc
+   selector:
+     app.kubernetes.io/name: mimir
+     app.kubernetes.io/instance: krajo
+     app.kubernetes.io/component: alertmanager
+     rollout-group: alertmanager
+     zone: zone-a
+ ---
+ # Source: mimir-distributed/templates/alertmanager/alertmanager-svc.yaml
+ apiVersion: v1
+ kind: Service
+ metadata:
+   name: krajo-mimir-alertmanager-zone-b
+   labels:
+     app.kubernetes.io/name: mimir
+     app.kubernetes.io/instance: krajo
+     app.kubernetes.io/component: alertmanager
+     app.kubernetes.io/part-of: memberlist
+     app.kubernetes.io/managed-by: Helm
+     name: "alertmanager-zone-b"
+     rollout-group: alertmanager
+     zone: zone-b
+     # Prevent scraping PODs via this service during migration as the original non zone-aware service already scrapes all PODs and you get duplicate metrics.
+     prometheus.io/service-monitor: "false"
+   annotations:
+     {}
+   namespace: "default"
+ spec:
+   type: ClusterIP
+   ports:
+     - port: 8080
+       protocol: TCP
+       name: http-metrics
+       targetPort: http-metrics
+     - port: 9095
+       protocol: TCP
+       name: grpc
+       targetPort: grpc
+   selector:
+     app.kubernetes.io/name: mimir
+     app.kubernetes.io/instance: krajo
+     app.kubernetes.io/component: alertmanager
+     rollout-group: alertmanager
+     zone: zone-b
+ ---
+ # Source: mimir-distributed/templates/alertmanager/alertmanager-svc.yaml
+ apiVersion: v1
+ kind: Service
+ metadata:
+   name: krajo-mimir-alertmanager-zone-c
+   labels:
+     app.kubernetes.io/name: mimir
+     app.kubernetes.io/instance: krajo
+     app.kubernetes.io/component: alertmanager
+     app.kubernetes.io/part-of: memberlist
+     app.kubernetes.io/managed-by: Helm
+     name: "alertmanager-zone-c"
+     rollout-group: alertmanager
+     zone: zone-c
+     # Prevent scraping PODs via this service during migration as the original non zone-aware service already scrapes all PODs and you get duplicate metrics.
+     prometheus.io/service-monitor: "false"
+   annotations:
+     {}
+   namespace: "default"
+ spec:
+   type: ClusterIP
+   ports:
+     - port: 8080
+       protocol: TCP
+       name: http-metrics
+       targetPort: http-metrics
+     - port: 9095
+       protocol: TCP
+       name: grpc
+       targetPort: grpc
+   selector:
+     app.kubernetes.io/name: mimir
+     app.kubernetes.io/instance: krajo
+     app.kubernetes.io/component: alertmanager
+     rollout-group: alertmanager
+     zone: zone-c
diff -c -r step0/mimir-distributed/templates/mimir-config.yaml step1/mimir-distributed/templates/mimir-config.yaml
*** step0/mimir-distributed/templates/mimir-config.yaml
--- step1/mimir-distributed/templates/mimir-config.yaml
***************
*** 18,23 ****
--- 18,25 ----
        data_dir: /data
        enable_api: true
        external_url: /alertmanager
+       sharding_ring:
+         zone_awareness_enabled: true
      alertmanager_storage:
        backend: s3
        s3:
