Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HPA objects can always be OutOfSync #1079

Closed
bakayolo opened this issue Feb 1, 2019 · 13 comments
Closed

HPA objects can always be OutOfSync #1079

bakayolo opened this issue Feb 1, 2019 · 13 comments

Comments

@bakayolo
Copy link
Contributor

bakayolo commented Feb 1, 2019

HPA not being refreshed even if update is successful.
The source is a chart description.

{{- if .Values.scaling.enabled -}}
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: {{ .Values.name }}
  labels:
    app: {{ .Values.name }}
    chart: {{ .Values.name }}-{{ .Values.version | replace "+" "_" }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: {{ .Values.name }}
  minReplicas: {{ .Values.scaling.minReplicas }}
  maxReplicas: {{ .Values.scaling.maxReplicas }}
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: {{ .Values.scaling.targetAverageUtilization.cpu }}
  - type: Resource
    resource:
      name: memory
      targetAverageUtilization: {{ .Values.scaling.targetAverageUtilization.memory }}
{{- end -}}

Logs from application controller.

time="2019-02-01T13:41:36Z" level=info msg="updated 'omniscient-gateway' operation (phase: Running)"
time="2019-02-01T13:41:36Z" level=info msg="Initialized new operation: {&SyncOperation{Revision:dev,Prune:false,DryRun:false,SyncStrategy:nil,ParameterOverrides:[],Resources:[{autoscaling HorizontalPodAutoscaler omniscient-gateway}],}}" application=omniscient-gateway
time="2019-02-01T13:41:37Z" level=info msg="cache miss: apires|https://10.3.240.1:443"
time="2019-02-01T13:41:48Z" level=info msg="Comparing app omniscient-gateway state in cluster https://kubernetes.default.svc (namespace: kintohub)"
time="2019-02-01T13:41:48Z" level=info msg="Applying resource HorizontalPodAutoscaler/omniscient-gateway in cluster: https://10.3.240.1:443, namespace: kintohub"
time="2019-02-01T13:41:48Z" level=info msg="[kubectl --kubeconfig /dev/shm/473367794 -n kintohub apply -f - --dry-run]"
time="2019-02-01T13:41:49Z" level=info msg="Applying resource HorizontalPodAutoscaler/omniscient-gateway in cluster: https://10.3.240.1:443, namespace: kintohub"
time="2019-02-01T13:41:49Z" level=info msg="[kubectl --kubeconfig /dev/shm/524458921 -n kintohub apply -f -]"
time="2019-02-01T13:41:49Z" level=info msg="added resource HorizontalPodAutoscaler/omniscient-gateway status: Synced, message: horizontalpodautoscaler.autoscaling/omniscient-gateway configured" application=omniscient-gateway
time="2019-02-01T13:41:49Z" level=info msg="updated 'omniscient-gateway' operation (phase: Running)"
time="2019-02-01T13:41:49Z" level=info msg="Resuming in-progress operation. phase: Running, message: " application=omniscient-gateway
time="2019-02-01T13:41:56Z" level=info msg="Refreshing app status (force refresh)" application=omniscient-gateway
time="2019-02-01T13:42:00Z" level=info msg="Comparing app omniscient-gateway state in cluster https://kubernetes.default.svc (namespace: kintohub)"
time="2019-02-01T13:42:00Z" level=info msg="Updating operation state. phase: Running -> Succeeded, message: '' -> 'successfully synced'" application=omniscient-gateway
time="2019-02-01T13:42:00Z" level=info msg="updated 'omniscient-gateway' operation (phase: Succeeded)"
time="2019-02-01T13:42:00Z" level=info msg="Operation succeeded" application=omniscient-gateway reason=OperationCompleted type=Normal
time="2019-02-01T13:42:10Z" level=info msg="Comparing app omniscient-gateway state in cluster https://kubernetes.default.svc (namespace: kintohub)"
time="2019-02-01T13:42:10Z" level=info msg="Comparison result: prev: OutOfSync. current: OutOfSync" application=omniscient-gateway
time="2019-02-01T13:42:10Z" level=info msg="Update successful" application=omniscient-gateway
time="2019-02-01T13:42:10Z" level=info msg="Refreshing app status (force refresh)" application=omniscient-gateway
time="2019-02-01T13:42:25Z" level=info msg="Comparing app omniscient-gateway state in cluster https://kubernetes.default.svc (namespace: kintohub)"
time="2019-02-01T13:42:25Z" level=info msg="Comparison result: prev: OutOfSync. current: OutOfSync" application=omniscient-gateway
time="2019-02-01T13:42:25Z" level=info msg="Update successful" application=omniscient-gateway
time="2019-02-01T13:42:25Z" level=info msg="Refreshing app status (force refresh)" application=omniscient-gateway
time="2019-02-01T13:42:38Z" level=info msg="Comparing app omniscient-gateway state in cluster https://kubernetes.default.svc (namespace: kintohub)"
time="2019-02-01T13:42:39Z" level=info msg="Comparison result: prev: OutOfSync. current: OutOfSync" application=omniscient-gateway
time="2019-02-01T13:42:39Z" level=info msg="Update successful" application=omniscient-gateway
@jessesuen
Copy link
Member

HPA not being refreshed even if update is successful.

Can you elaborate on this? Can you share redacted output of argocd app get APPNAME -o yaml?

@bakayolo
Copy link
Contributor Author

bakayolo commented Feb 2, 2019

Sure, if you look at the log, you can see the last one being
time="2019-02-01T13:42:39Z" level=info msg="Update successful" application=omniscient-gateway
While still out of sync
time="2019-02-01T13:42:25Z" level=info msg="Comparison result: prev: OutOfSync. current: OutOfSync" application=omniscient-gateway

$ argocd app get omniscient-gateway -o yaml

metadata:
  annotations:
    applications.argoproj.io/refresh: 2019-02-01T16:00:25Z
  creationTimestamp: 2019-01-18T08:23:53Z
  generation: 1
  name: omniscient-gateway
  namespace: argocd
  resourceVersion: "4055111"
  selfLink: /apis/argoproj.io/v1alpha1/namespaces/argocd/applications/omniscient-gateway
  uid: 6404af08-1afa-11e9-8fdb-42010a8c0082
spec:
  destination:
    namespace: kintohub
    server: https://kubernetes.default.svc
  project: default
  source:
    environment: default
    path: charts/omniscient-gateway
    repoURL: https://--@github.com/kintohub/KintoInfra.git
    targetRevision: staging
    valuesFiles:
    - values-staging.yaml
status:
  comparisonResult:
    comparedAt: 2019-02-02T15:41:18Z
    comparedTo:
      environment: default
      path: charts/omniscient-gateway
      repoURL: https://--@github.com/kintohub/KintoInfra.git
      targetRevision: staging
      valuesFiles:
      - values-staging.yaml
    resources:
    - childLiveResources:
      - state: '{"apiVersion":"v1","kind":"Endpoints","metadata":{"creationTimestamp":"2019-02-01T15:26:49Z","labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"omniscient-gateway","namespace":"kintohub","resourceVersion":"3947123","selfLink":"/api/v1/namespaces/kintohub/endpoints/omniscient-gateway","uid":"cb1c7457-2635-11e9-91db-42010a8c003c"},"subsets":[{"addresses":[{"ip":"10.12.1.8","nodeName":"gke-cluster-staging-default-pool-464e3199-pwg9","targetRef":{"kind":"Pod","name":"omniscient-gateway-5b964659d7-rtdrr","namespace":"kintohub","resourceVersion":"3779313","uid":"11c1dbaf-2639-11e9-91db-42010a8c003c"}},{"ip":"10.12.2.235","nodeName":"gke-cluster-staging-default-pool-4bbeff2b-1xbr","targetRef":{"kind":"Pod","name":"omniscient-gateway-5b964659d7-zl5v7","namespace":"kintohub","resourceVersion":"3772194","uid":"15f9f0aa-2634-11e9-91db-42010a8c003c"}}],"ports":[{"name":"http","port":80,"protocol":"TCP"},{"name":"public","port":8082,"protocol":"TCP"},{"name":"websocket","port":8089,"protocol":"TCP"},{"name":"grpc","port":8090,"protocol":"TCP"}]}]}'
      health:
        status: Healthy
      liveState: '{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"omniscient-gateway\",\"applications.argoproj.io/app-name\":\"omniscient-gateway\",\"chart\":\"omniscient-gateway-0.0.1\",\"heritage\":\"Tiller\",\"release\":\"omniscient-gateway\"},\"name\":\"omniscient-gateway\",\"namespace\":\"kintohub\"},\"spec\":{\"ports\":[{\"name\":\"http\",\"port\":80,\"targetPort\":80},{\"name\":\"public\",\"port\":8082,\"targetPort\":8082},{\"name\":\"grpc\",\"port\":8090,\"targetPort\":8090},{\"name\":\"websocket\",\"port\":8089,\"targetPort\":8089}],\"selector\":{\"app\":\"omniscient-gateway\",\"release\":\"omniscient-gateway\"},\"type\":\"ClusterIP\"}}\n"},"creationTimestamp":"2019-02-01T15:26:49Z","labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"omniscient-gateway","namespace":"kintohub","resourceVersion":"3774697","selfLink":"/api/v1/namespaces/kintohub/services/omniscient-gateway","uid":"cb19f6e6-2635-11e9-ac59-42010a8c0022"},"spec":{"clusterIP":"10.79.5.242","ports":[{"name":"http","port":80,"protocol":"TCP","targetPort":80},{"name":"public","port":8082,"protocol":"TCP","targetPort":8082},{"name":"grpc","port":8090,"protocol":"TCP","targetPort":8090},{"name":"websocket","port":8089,"protocol":"TCP","targetPort":8089}],"selector":{"app":"omniscient-gateway","release":"omniscient-gateway"},"sessionAffinity":"None","type":"ClusterIP"},"status":{"loadBalancer":{}}}'
      status: Synced
      targetState: '{"apiVersion":"v1","kind":"Service","metadata":{"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"omniscient-gateway"},"spec":{"ports":[{"name":"http","port":80,"targetPort":80},{"name":"public","port":8082,"targetPort":8082},{"name":"grpc","port":8090,"targetPort":8090},{"name":"websocket","port":8089,"targetPort":8089}],"selector":{"app":"omniscient-gateway","release":"omniscient-gateway"},"type":"ClusterIP"}}'
    - childLiveResources:
      - state: '{"apiVersion":"v1","kind":"Endpoints","metadata":{"creationTimestamp":"2019-02-01T15:26:49Z","labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"api","namespace":"kintohub","resourceVersion":"3947121","selfLink":"/api/v1/namespaces/kintohub/endpoints/api","uid":"cb187b73-2635-11e9-91db-42010a8c003c"},"subsets":[{"addresses":[{"ip":"10.12.1.8","nodeName":"gke-cluster-staging-default-pool-464e3199-pwg9","targetRef":{"kind":"Pod","name":"omniscient-gateway-5b964659d7-rtdrr","namespace":"kintohub","resourceVersion":"3779313","uid":"11c1dbaf-2639-11e9-91db-42010a8c003c"}},{"ip":"10.12.2.235","nodeName":"gke-cluster-staging-default-pool-4bbeff2b-1xbr","targetRef":{"kind":"Pod","name":"omniscient-gateway-5b964659d7-zl5v7","namespace":"kintohub","resourceVersion":"3772194","uid":"15f9f0aa-2634-11e9-91db-42010a8c003c"}}],"ports":[{"name":"http","port":80,"protocol":"TCP"},{"name":"public","port":8082,"protocol":"TCP"},{"name":"websocket","port":8089,"protocol":"TCP"},{"name":"grpc","port":8090,"protocol":"TCP"}]}]}'
      health:
        status: Healthy
      liveState: '{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"omniscient-gateway\",\"applications.argoproj.io/app-name\":\"omniscient-gateway\",\"chart\":\"omniscient-gateway-0.0.1\",\"heritage\":\"Tiller\",\"release\":\"omniscient-gateway\"},\"name\":\"api\",\"namespace\":\"kintohub\"},\"spec\":{\"ports\":[{\"name\":\"http\",\"port\":80,\"targetPort\":80},{\"name\":\"public\",\"port\":8082,\"targetPort\":8082},{\"name\":\"grpc\",\"port\":8090,\"targetPort\":8090},{\"name\":\"websocket\",\"port\":8089,\"targetPort\":8089}],\"selector\":{\"app\":\"omniscient-gateway\",\"release\":\"omniscient-gateway\"},\"type\":\"ClusterIP\"}}\n"},"creationTimestamp":"2019-02-01T15:26:49Z","labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"api","namespace":"kintohub","resourceVersion":"3774693","selfLink":"/api/v1/namespaces/kintohub/services/api","uid":"cb150526-2635-11e9-ac59-42010a8c0022"},"spec":{"clusterIP":"10.79.0.76","ports":[{"name":"http","port":80,"protocol":"TCP","targetPort":80},{"name":"public","port":8082,"protocol":"TCP","targetPort":8082},{"name":"grpc","port":8090,"protocol":"TCP","targetPort":8090},{"name":"websocket","port":8089,"protocol":"TCP","targetPort":8089}],"selector":{"app":"omniscient-gateway","release":"omniscient-gateway"},"sessionAffinity":"None","type":"ClusterIP"},"status":{"loadBalancer":{}}}'
      status: Synced
      targetState: '{"apiVersion":"v1","kind":"Service","metadata":{"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"api"},"spec":{"ports":[{"name":"http","port":80,"targetPort":80},{"name":"public","port":8082,"targetPort":8082},{"name":"grpc","port":8090,"targetPort":8090},{"name":"websocket","port":8089,"targetPort":8089}],"selector":{"app":"omniscient-gateway","release":"omniscient-gateway"},"type":"ClusterIP"}}'
    - childLiveResources:
      - children:
        - state: '{"apiVersion":"v1","kind":"Pod","metadata":{"creationTimestamp":"2019-02-01T15:50:16Z","generateName":"omniscient-gateway-5b964659d7-","labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","pod-template-hash":"1652021583","release":"omniscient-gateway"},"name":"omniscient-gateway-5b964659d7-rtdrr","namespace":"kintohub","ownerReferences":[{"apiVersion":"apps/v1","blockOwnerDeletion":true,"controller":true,"kind":"ReplicaSet","name":"omniscient-gateway-5b964659d7","uid":"15f7b636-2634-11e9-91db-42010a8c003c"}],"resourceVersion":"3779313","selfLink":"/api/v1/namespaces/kintohub/pods/omniscient-gateway-5b964659d7-rtdrr","uid":"11c1dbaf-2639-11e9-91db-42010a8c003c"},"spec":{"affinity":{"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchExpressions":[{"key":"app","operator":"In","values":["omniscient-gateway"]}]},"topologyKey":"kubernetes.io/hostname"}]}},"containers":[{"env":[{"name":"NAMESPACE_ENV","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}},{"name":"POD_IP","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"status.podIP"}}},{"name":"ENV","value":"STAGING"},{"name":"GRAPHQL_HOST","value":"prisma:4466"},{"name":"GRPC_PROXY","value":"grpc-service"},{"name":"PROXY_GRPC_HOST_FORMAT","value":"http://grpc-http-proxy:3000"},{"name":"RABBIT_HOST","value":"rabbitmq-ha"},{"name":"PROXY_GRPC_X_ACCESS_TOKEN","valueFrom":{"secretKeyRef":{"key":"grpc-http-proxy-token","name":"omniscient-gateway"}}}],"image":"asia.gcr.io/linear-bounty-174410/omniscient-gateway:dev-820dea4","imagePullPolicy":"IfNotPresent","name":"main","ports":[{"containerPort":80,"name":"http","protocol":"TCP"},{"containerPort":8082,"name":"public","protocol":"TCP"},{"containerPort":8090,"name":"grpc","protocol":"TCP"},{"containerPort":8089,"name":"websocket","protocol":"TCP"}],"resources":{"requests":{"cpu":"100m","memory":"256Mi"}},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount","name":"default-token-qtxkd","readOnly":true}]}],"dnsPolicy":"ClusterFirst","imagePullSecrets":[{"name":"regsecret"}],"nodeName":"gke-cluster-staging-default-pool-464e3199-pwg9","priority":0,"restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"serviceAccount":"default","serviceAccountName":"default","terminationGracePeriodSeconds":30,"tolerations":[{"effect":"NoExecute","key":"node.kubernetes.io/not-ready","operator":"Exists","tolerationSeconds":300},{"effect":"NoExecute","key":"node.kubernetes.io/unreachable","operator":"Exists","tolerationSeconds":300}],"volumes":[{"name":"default-token-qtxkd","secret":{"defaultMode":420,"secretName":"default-token-qtxkd"}}]},"status":{"conditions":[{"lastProbeTime":null,"lastTransitionTime":"2019-02-01T15:50:16Z","status":"True","type":"Initialized"},{"lastProbeTime":null,"lastTransitionTime":"2019-02-01T15:50:19Z","status":"True","type":"Ready"},{"lastProbeTime":null,"lastTransitionTime":null,"status":"True","type":"ContainersReady"},{"lastProbeTime":null,"lastTransitionTime":"2019-02-01T15:50:16Z","status":"True","type":"PodScheduled"}],"containerStatuses":[{"containerID":"docker://5d17bb8b4d785d5e7ffea09605cff93206f349bae005675dbfae1c79ae1f4c6d","image":"asia.gcr.io/linear-bounty-174410/omniscient-gateway:dev-820dea4","imageID":"docker-pullable://asia.gcr.io/linear-bounty-174410/omniscient-gateway@sha256:9c776cb1d07cdb867c6d0b608b718100f60d11a3f5fb4720c844dd2fb02952a4","lastState":{},"name":"main","ready":true,"restartCount":0,"state":{"running":{"startedAt":"2019-02-01T15:50:18Z"}}}],"hostIP":"10.140.0.50","phase":"Running","podIP":"10.12.1.8","qosClass":"Burstable","startTime":"2019-02-01T15:50:16Z"}}'
        - state: '{"apiVersion":"v1","kind":"Pod","metadata":{"creationTimestamp":"2019-02-01T15:14:36Z","generateName":"omniscient-gateway-5b964659d7-","labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","pod-template-hash":"1652021583","release":"omniscient-gateway"},"name":"omniscient-gateway-5b964659d7-zl5v7","namespace":"kintohub","ownerReferences":[{"apiVersion":"apps/v1","blockOwnerDeletion":true,"controller":true,"kind":"ReplicaSet","name":"omniscient-gateway-5b964659d7","uid":"15f7b636-2634-11e9-91db-42010a8c003c"}],"resourceVersion":"3772194","selfLink":"/api/v1/namespaces/kintohub/pods/omniscient-gateway-5b964659d7-zl5v7","uid":"15f9f0aa-2634-11e9-91db-42010a8c003c"},"spec":{"affinity":{"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchExpressions":[{"key":"app","operator":"In","values":["omniscient-gateway"]}]},"topologyKey":"kubernetes.io/hostname"}]}},"containers":[{"env":[{"name":"NAMESPACE_ENV","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}},{"name":"POD_IP","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"status.podIP"}}},{"name":"ENV","value":"STAGING"},{"name":"GRAPHQL_HOST","value":"prisma:4466"},{"name":"GRPC_PROXY","value":"grpc-service"},{"name":"PROXY_GRPC_HOST_FORMAT","value":"http://grpc-http-proxy:3000"},{"name":"RABBIT_HOST","value":"rabbitmq-ha"},{"name":"PROXY_GRPC_X_ACCESS_TOKEN","valueFrom":{"secretKeyRef":{"key":"grpc-http-proxy-token","name":"omniscient-gateway"}}}],"image":"asia.gcr.io/linear-bounty-174410/omniscient-gateway:dev-820dea4","imagePullPolicy":"IfNotPresent","name":"main","ports":[{"containerPort":80,"name":"http","protocol":"TCP"},{"containerPort":8082,"name":"public","protocol":"TCP"},{"containerPort":8090,"name":"grpc","protocol":"TCP"},{"containerPort":8089,"name":"websocket","protocol":"TCP"}],"resources":{"requests":{"cpu":"100m","memory":"256Mi"}},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount","name":"default-token-qtxkd","readOnly":true}]}],"dnsPolicy":"ClusterFirst","imagePullSecrets":[{"name":"regsecret"}],"nodeName":"gke-cluster-staging-default-pool-4bbeff2b-1xbr","priority":0,"restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"serviceAccount":"default","serviceAccountName":"default","terminationGracePeriodSeconds":30,"tolerations":[{"effect":"NoExecute","key":"node.kubernetes.io/not-ready","operator":"Exists","tolerationSeconds":300},{"effect":"NoExecute","key":"node.kubernetes.io/unreachable","operator":"Exists","tolerationSeconds":300}],"volumes":[{"name":"default-token-qtxkd","secret":{"defaultMode":420,"secretName":"default-token-qtxkd"}}]},"status":{"conditions":[{"lastProbeTime":null,"lastTransitionTime":"2019-02-01T15:14:36Z","status":"True","type":"Initialized"},{"lastProbeTime":null,"lastTransitionTime":"2019-02-01T15:14:41Z","status":"True","type":"Ready"},{"lastProbeTime":null,"lastTransitionTime":null,"status":"True","type":"ContainersReady"},{"lastProbeTime":null,"lastTransitionTime":"2019-02-01T15:14:36Z","status":"True","type":"PodScheduled"}],"containerStatuses":[{"containerID":"docker://4f54e0e071fc305dac29b2673d217d565c0c6c28bf2491660e424e7883089646","image":"asia.gcr.io/linear-bounty-174410/omniscient-gateway:dev-820dea4","imageID":"docker-pullable://asia.gcr.io/linear-bounty-174410/omniscient-gateway@sha256:9c776cb1d07cdb867c6d0b608b718100f60d11a3f5fb4720c844dd2fb02952a4","lastState":{},"name":"main","ready":true,"restartCount":0,"state":{"running":{"startedAt":"2019-02-01T15:14:40Z"}}}],"hostIP":"10.140.0.59","phase":"Running","podIP":"10.12.2.235","qosClass":"Burstable","startTime":"2019-02-01T15:14:36Z"}}'
        state: '{"apiVersion":"extensions/v1beta1","kind":"ReplicaSet","metadata":{"annotations":{"deployment.kubernetes.io/desired-replicas":"2","deployment.kubernetes.io/max-replicas":"3","deployment.kubernetes.io/revision":"2"},"creationTimestamp":"2019-02-01T15:14:36Z","generation":8,"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","pod-template-hash":"1652021583","release":"omniscient-gateway"},"name":"omniscient-gateway-5b964659d7","namespace":"kintohub","ownerReferences":[{"apiVersion":"apps/v1","blockOwnerDeletion":true,"controller":true,"kind":"Deployment","name":"omniscient-gateway","uid":"6d6f6c6a-1afa-11e9-8fdb-42010a8c0082"}],"resourceVersion":"3947120","selfLink":"/apis/extensions/v1beta1/namespaces/kintohub/replicasets/omniscient-gateway-5b964659d7","uid":"15f7b636-2634-11e9-91db-42010a8c003c"},"spec":{"replicas":2,"selector":{"matchLabels":{"app":"omniscient-gateway","pod-template-hash":"1652021583","release":"omniscient-gateway"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","pod-template-hash":"1652021583","release":"omniscient-gateway"}},"spec":{"affinity":{"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchExpressions":[{"key":"app","operator":"In","values":["omniscient-gateway"]}]},"topologyKey":"kubernetes.io/hostname"}]}},"containers":[{"env":[{"name":"NAMESPACE_ENV","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}},{"name":"POD_IP","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"status.podIP"}}},{"name":"ENV","value":"STAGING"},{"name":"GRAPHQL_HOST","value":"prisma:4466"},{"name":"GRPC_PROXY","value":"grpc-service"},{"name":"PROXY_GRPC_HOST_FORMAT","value":"http://grpc-http-proxy:3000"},{"name":"RABBIT_HOST","value":"rabbitmq-ha"},{"name":"PROXY_GRPC_X_ACCESS_TOKEN","valueFrom":{"secretKeyRef":{"key":"grpc-http-proxy-token","name":"omniscient-gateway"}}}],"image":"asia.gcr.io/linear-bounty-174410/omniscient-gateway:dev-820dea4","imagePullPolicy":"IfNotPresent","name":"main","ports":[{"containerPort":80,"name":"http","protocol":"TCP"},{"containerPort":8082,"name":"public","protocol":"TCP"},{"containerPort":8090,"name":"grpc","protocol":"TCP"},{"containerPort":8089,"name":"websocket","protocol":"TCP"}],"resources":{"requests":{"cpu":"100m","memory":"256Mi"}},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File"}],"dnsPolicy":"ClusterFirst","imagePullSecrets":[{"name":"regsecret"}],"restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"terminationGracePeriodSeconds":30}}},"status":{"availableReplicas":2,"fullyLabeledReplicas":2,"observedGeneration":8,"readyReplicas":2,"replicas":2}}'
      - state: '{"apiVersion":"extensions/v1beta1","kind":"ReplicaSet","metadata":{"annotations":{"deployment.kubernetes.io/desired-replicas":"2","deployment.kubernetes.io/max-replicas":"3","deployment.kubernetes.io/revision":"1"},"creationTimestamp":"2019-01-18T08:24:09Z","generation":5,"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","pod-template-hash":"803747934","release":"omniscient-gateway"},"name":"omniscient-gateway-d47c8cf78","namespace":"kintohub","ownerReferences":[{"apiVersion":"apps/v1","blockOwnerDeletion":true,"controller":true,"kind":"Deployment","name":"omniscient-gateway","uid":"6d6f6c6a-1afa-11e9-8fdb-42010a8c0082"}],"resourceVersion":"3772206","selfLink":"/apis/extensions/v1beta1/namespaces/kintohub/replicasets/omniscient-gateway-d47c8cf78","uid":"6d73731b-1afa-11e9-8fdb-42010a8c0082"},"spec":{"replicas":0,"selector":{"matchLabels":{"app":"omniscient-gateway","pod-template-hash":"803747934","release":"omniscient-gateway"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","pod-template-hash":"803747934","release":"omniscient-gateway"}},"spec":{"affinity":{"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchExpressions":[{"key":"app","operator":"In","values":["omniscient-gateway"]}]},"topologyKey":"kubernetes.io/hostname"}]}},"containers":[{"env":[{"name":"NAMESPACE_ENV","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}},{"name":"POD_IP","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"status.podIP"}}},{"name":"ENV","value":"STAGING"},{"name":"GRAPHQL_HOST","value":"prisma:4466"},{"name":"GRPC_PROXY","value":"grpc-service"},{"name":"PROXY_GRPC_HOST_FORMAT","value":"http://grpc-http-proxy:3000"},{"name":"RABBIT_HOST","value":"rabbitmq-ha"}],"image":"asia.gcr.io/linear-bounty-174410/omniscient-gateway:dev-820dea4","imagePullPolicy":"IfNotPresent","name":"main","ports":[{"containerPort":80,"name":"http","protocol":"TCP"},{"containerPort":8082,"name":"public","protocol":"TCP"},{"containerPort":8090,"name":"grpc","protocol":"TCP"},{"containerPort":8089,"name":"websocket","protocol":"TCP"}],"resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File"}],"dnsPolicy":"ClusterFirst","imagePullSecrets":[{"name":"regsecret"}],"restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"terminationGracePeriodSeconds":30}}},"status":{"observedGeneration":5,"replicas":0}}'
      health:
        status: Healthy
      liveState: '{"apiVersion":"extensions/v1beta1","kind":"Deployment","metadata":{"annotations":{"deployment.kubernetes.io/revision":"2","kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"omniscient-gateway\",\"applications.argoproj.io/app-name\":\"omniscient-gateway\",\"chart\":\"omniscient-gateway-0.0.1\",\"heritage\":\"Tiller\",\"release\":\"omniscient-gateway\"},\"name\":\"omniscient-gateway\",\"namespace\":\"kintohub\"},\"spec\":{\"replicas\":2,\"selector\":{\"matchLabels\":{\"app\":\"omniscient-gateway\",\"release\":\"omniscient-gateway\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"omniscient-gateway\",\"applications.argoproj.io/app-name\":\"omniscient-gateway\",\"release\":\"omniscient-gateway\"}},\"spec\":{\"affinity\":{\"podAntiAffinity\":{\"requiredDuringSchedulingIgnoredDuringExecution\":[{\"labelSelector\":{\"matchExpressions\":[{\"key\":\"app\",\"operator\":\"In\",\"values\":[\"omniscient-gateway\"]}]},\"topologyKey\":\"kubernetes.io/hostname\"}]}},\"containers\":[{\"env\":[{\"name\":\"NAMESPACE_ENV\",\"valueFrom\":{\"fieldRef\":{\"fieldPath\":\"metadata.namespace\"}}},{\"name\":\"POD_IP\",\"valueFrom\":{\"fieldRef\":{\"fieldPath\":\"status.podIP\"}}},{\"name\":\"ENV\",\"value\":\"STAGING\"},{\"name\":\"GRAPHQL_HOST\",\"value\":\"prisma:4466\"},{\"name\":\"GRPC_PROXY\",\"value\":\"grpc-service\"},{\"name\":\"PROXY_GRPC_HOST_FORMAT\",\"value\":\"http://grpc-http-proxy:3000\"},{\"name\":\"RABBIT_HOST\",\"value\":\"rabbitmq-ha\"},{\"name\":\"PROXY_GRPC_X_ACCESS_TOKEN\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"grpc-http-proxy-token\",\"name\":\"omniscient-gateway\"}}}],\"image\":\"asia.gcr.io/linear-bounty-174410/omniscient-gateway:dev-820dea4\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"main\",\"ports\":[{\"containerPort\":80,\"name\":\"http\"},{\"containerPort\":8082,\"name\":\"public\"},{\"containerPort\":8090,\"name\":\"grpc\"},{\"containerPort\":8089,\"name\":\"websocket\"}],\"resources\":{\"requests\":{\"cpu\":\"100m\",\"memory\":\"256Mi\"}}}],\"imagePullSecrets\":[{\"name\":\"regsecret\"}]}}}}\n"},"creationTimestamp":"2019-01-18T08:24:09Z","generation":10,"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"omniscient-gateway","namespace":"kintohub","resourceVersion":"3947122","selfLink":"/apis/extensions/v1beta1/namespaces/kintohub/deployments/omniscient-gateway","uid":"6d6f6c6a-1afa-11e9-8fdb-42010a8c0082"},"spec":{"progressDeadlineSeconds":600,"replicas":2,"revisionHistoryLimit":10,"selector":{"matchLabels":{"app":"omniscient-gateway","release":"omniscient-gateway"}},"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":1},"type":"RollingUpdate"},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","release":"omniscient-gateway"}},"spec":{"affinity":{"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchExpressions":[{"key":"app","operator":"In","values":["omniscient-gateway"]}]},"topologyKey":"kubernetes.io/hostname"}]}},"containers":[{"env":[{"name":"NAMESPACE_ENV","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}},{"name":"POD_IP","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"status.podIP"}}},{"name":"ENV","value":"STAGING"},{"name":"GRAPHQL_HOST","value":"prisma:4466"},{"name":"GRPC_PROXY","value":"grpc-service"},{"name":"PROXY_GRPC_HOST_FORMAT","value":"http://grpc-http-proxy:3000"},{"name":"RABBIT_HOST","value":"rabbitmq-ha"},{"name":"PROXY_GRPC_X_ACCESS_TOKEN","valueFrom":{"secretKeyRef":{"key":"grpc-http-proxy-token","name":"omniscient-gateway"}}}],"image":"asia.gcr.io/linear-bounty-174410/omniscient-gateway:dev-820dea4","imagePullPolicy":"IfNotPresent","name":"main","ports":[{"containerPort":80,"name":"http","protocol":"TCP"},{"containerPort":8082,"name":"public","protocol":"TCP"},{"containerPort":8090,"name":"grpc","protocol":"TCP"},{"containerPort":8089,"name":"websocket","protocol":"TCP"}],"resources":{"requests":{"cpu":"100m","memory":"256Mi"}},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File"}],"dnsPolicy":"ClusterFirst","imagePullSecrets":[{"name":"regsecret"}],"restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"terminationGracePeriodSeconds":30}}},"status":{"availableReplicas":2,"conditions":[{"lastTransitionTime":"2019-01-18T08:24:09Z","lastUpdateTime":"2019-02-01T15:14:43Z","message":"ReplicaSet
        \"omniscient-gateway-5b964659d7\" has successfully progressed.","reason":"NewReplicaSetAvailable","status":"True","type":"Progressing"},{"lastTransitionTime":"2019-02-02T06:16:18Z","lastUpdateTime":"2019-02-02T06:16:18Z","message":"Deployment
        has minimum availability.","reason":"MinimumReplicasAvailable","status":"True","type":"Available"}],"observedGeneration":10,"readyReplicas":2,"replicas":2,"updatedReplicas":2}}'
      status: Synced
      targetState: '{"apiVersion":"extensions/v1beta1","kind":"Deployment","metadata":{"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"omniscient-gateway"},"spec":{"replicas":2,"selector":{"matchLabels":{"app":"omniscient-gateway","release":"omniscient-gateway"}},"template":{"metadata":{"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","release":"omniscient-gateway"}},"spec":{"affinity":{"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchExpressions":[{"key":"app","operator":"In","values":["omniscient-gateway"]}]},"topologyKey":"kubernetes.io/hostname"}]}},"containers":[{"env":[{"name":"NAMESPACE_ENV","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}},{"name":"POD_IP","valueFrom":{"fieldRef":{"fieldPath":"status.podIP"}}},{"name":"ENV","value":"STAGING"},{"name":"GRAPHQL_HOST","value":"prisma:4466"},{"name":"GRPC_PROXY","value":"grpc-service"},{"name":"PROXY_GRPC_HOST_FORMAT","value":"http://grpc-http-proxy:3000"},{"name":"RABBIT_HOST","value":"rabbitmq-ha"},{"name":"PROXY_GRPC_X_ACCESS_TOKEN","valueFrom":{"secretKeyRef":{"key":"grpc-http-proxy-token","name":"omniscient-gateway"}}}],"image":"asia.gcr.io/linear-bounty-174410/omniscient-gateway:dev-820dea4","imagePullPolicy":"IfNotPresent","name":"main","ports":[{"containerPort":80,"name":"http"},{"containerPort":8082,"name":"public"},{"containerPort":8090,"name":"grpc"},{"containerPort":8089,"name":"websocket"}],"resources":{"requests":{"cpu":"100m","memory":"256Mi"}}}],"imagePullSecrets":[{"name":"regsecret"}]}}}}'
    - health:
        status: Healthy
      liveState: '{"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{\"kubernetes.io/ingress.class\":\"nginx\"},\"labels\":{\"app\":\"omniscient-gateway\",\"applications.argoproj.io/app-name\":\"omniscient-gateway\",\"chart\":\"omniscient-gateway-0.0.1\",\"heritage\":\"Tiller\",\"release\":\"omniscient-gateway\"},\"name\":\"omniscient-gateway\",\"namespace\":\"kintohub\"},\"spec\":{\"rules\":[{\"host\":\"api.staging.kintohub.com\",\"http\":{\"paths\":[{\"backend\":{\"serviceName\":\"omniscient-gateway\",\"servicePort\":80},\"path\":\"/\"}]}}],\"tls\":[{\"hosts\":[\"api.staging.kintohub.com\"],\"secretName\":\"kintossl\"}]}}\n","kubernetes.io/ingress.class":"nginx"},"creationTimestamp":"2019-01-18T08:24:09Z","generation":1,"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"omniscient-gateway","namespace":"kintohub","resourceVersion":"1111676","selfLink":"/apis/extensions/v1beta1/namespaces/kintohub/ingresses/omniscient-gateway","uid":"6d986d4c-1afa-11e9-8fdb-42010a8c0082"},"spec":{"rules":[{"host":"api.staging.kintohub.com","http":{"paths":[{"backend":{"serviceName":"omniscient-gateway","servicePort":80},"path":"/"}]}}],"tls":[{"hosts":["api.staging.kintohub.com"],"secretName":"kintossl"}]},"status":{"loadBalancer":{"ingress":[{"ip":"34.80.249.61"},{"ip":"34.80.80.219"}]}}}'
      status: Synced
      targetState: '{"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx"},"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"omniscient-gateway"},"spec":{"rules":[{"host":"api.staging.kintohub.com","http":{"paths":[{"backend":{"serviceName":"omniscient-gateway","servicePort":80},"path":"/"}]}}],"tls":[{"hosts":["api.staging.kintohub.com"],"secretName":"kintossl"}]}}'
    - health:
        status: Healthy
      liveState: '{"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{\"kubernetes.io/ingress.class\":\"nginx\"},\"labels\":{\"app\":\"omniscient-gateway\",\"applications.argoproj.io/app-name\":\"omniscient-gateway\",\"chart\":\"omniscient-gateway-0.0.1\",\"heritage\":\"Tiller\",\"release\":\"omniscient-gateway\"},\"name\":\"public-omniscient-gateway\",\"namespace\":\"kintohub\"},\"spec\":{\"rules\":[{\"host\":\"public.api.staging.kintohub.com\",\"http\":{\"paths\":[{\"backend\":{\"serviceName\":\"omniscient-gateway\",\"servicePort\":8082},\"path\":\"/\"}]}}],\"tls\":[{\"hosts\":[\"public.api.staging.kintohub.com\"],\"secretName\":\"kintossl\"}]}}\n","kubernetes.io/ingress.class":"nginx"},"creationTimestamp":"2019-01-18T08:24:09Z","generation":1,"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"public-omniscient-gateway","namespace":"kintohub","resourceVersion":"1111674","selfLink":"/apis/extensions/v1beta1/namespaces/kintohub/ingresses/public-omniscient-gateway","uid":"6da3e68b-1afa-11e9-8fdb-42010a8c0082"},"spec":{"rules":[{"host":"public.api.staging.kintohub.com","http":{"paths":[{"backend":{"serviceName":"omniscient-gateway","servicePort":8082},"path":"/"}]}}],"tls":[{"hosts":["public.api.staging.kintohub.com"],"secretName":"kintossl"}]},"status":{"loadBalancer":{"ingress":[{"ip":"34.80.249.61"},{"ip":"34.80.80.219"}]}}}'
      status: Synced
      targetState: '{"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx"},"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"public-omniscient-gateway"},"spec":{"rules":[{"host":"public.api.staging.kintohub.com","http":{"paths":[{"backend":{"serviceName":"omniscient-gateway","servicePort":8082},"path":"/"}]}}],"tls":[{"hosts":["public.api.staging.kintohub.com"],"secretName":"kintossl"}]}}'
    - health:
        status: Healthy
      liveState: '{"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{\"kubernetes.io/ingress.class\":\"nginx\"},\"labels\":{\"app\":\"omniscient-gateway\",\"applications.argoproj.io/app-name\":\"omniscient-gateway\",\"chart\":\"omniscient-gateway-0.0.1\",\"heritage\":\"Tiller\",\"release\":\"omniscient-gateway\"},\"name\":\"ws-omniscient-gateway\",\"namespace\":\"kintohub\"},\"spec\":{\"rules\":[{\"host\":\"ws.staging.kintohub.com\",\"http\":{\"paths\":[{\"backend\":{\"serviceName\":\"omniscient-gateway\",\"servicePort\":8089},\"path\":\"/\"}]}}],\"tls\":[{\"hosts\":[\"ws.staging.kintohub.com\"],\"secretName\":\"kintossl\"}]}}\n","kubernetes.io/ingress.class":"nginx"},"creationTimestamp":"2019-01-18T08:24:09Z","generation":1,"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"ws-omniscient-gateway","namespace":"kintohub","resourceVersion":"1111677","selfLink":"/apis/extensions/v1beta1/namespaces/kintohub/ingresses/ws-omniscient-gateway","uid":"6da65543-1afa-11e9-8fdb-42010a8c0082"},"spec":{"rules":[{"host":"ws.staging.kintohub.com","http":{"paths":[{"backend":{"serviceName":"omniscient-gateway","servicePort":8089},"path":"/"}]}}],"tls":[{"hosts":["ws.staging.kintohub.com"],"secretName":"kintossl"}]},"status":{"loadBalancer":{"ingress":[{"ip":"34.80.249.61"},{"ip":"34.80.80.219"}]}}}'
      status: Synced
      targetState: '{"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx"},"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"ws-omniscient-gateway"},"spec":{"rules":[{"host":"ws.staging.kintohub.com","http":{"paths":[{"backend":{"serviceName":"omniscient-gateway","servicePort":8089},"path":"/"}]}}],"tls":[{"hosts":["ws.staging.kintohub.com"],"secretName":"kintossl"}]}}'
    - health:
        status: Healthy
      liveState: '{"apiVersion":"autoscaling/v2beta1","kind":"HorizontalPodAutoscaler","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"autoscaling/v2beta1\",\"kind\":\"HorizontalPodAutoscaler\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"omniscient-gateway\",\"applications.argoproj.io/app-name\":\"omniscient-gateway\",\"chart\":\"omniscient-gateway-0.0.1\",\"heritage\":\"Tiller\",\"release\":\"omniscient-gateway\"},\"name\":\"omniscient-gateway\",\"namespace\":\"kintohub\"},\"spec\":{\"maxReplicas\":10,\"metrics\":[{\"resource\":{\"name\":\"cpu\",\"targetAverageUtilization\":70},\"type\":\"Resource\"},{\"resource\":{\"name\":\"memory\",\"targetAverageUtilization\":80},\"type\":\"Resource\"}],\"minReplicas\":2,\"scaleTargetRef\":{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"name\":\"omniscient-gateway\"}}}\n"},"creationTimestamp":"2019-02-01T15:55:41Z","labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"omniscient-gateway","namespace":"kintohub","resourceVersion":"4053061","selfLink":"/apis/autoscaling/v2beta1/namespaces/kintohub/horizontalpodautoscalers/omniscient-gateway","uid":"d377e8a8-2639-11e9-8d7c-42010a8c003d"},"spec":{"maxReplicas":10,"metrics":[{"resource":{"name":"memory","targetAverageUtilization":80},"type":"Resource"},{"resource":{"name":"cpu","targetAverageUtilization":70},"type":"Resource"}],"minReplicas":2,"scaleTargetRef":{"apiVersion":"apps/v1","kind":"Deployment","name":"omniscient-gateway"}},"status":{"conditions":[{"lastTransitionTime":"2019-02-02T06:28:20Z","message":"the
        last scale time was sufficiently old as to warrant a new scale","reason":"ReadyForNewScale","status":"True","type":"AbleToScale"},{"lastTransitionTime":"2019-02-02T06:01:46Z","message":"the
        HPA was able to successfully calculate a replica count from memory resource
        utilization (percentage of request)","reason":"ValidMetricFound","status":"True","type":"ScalingActive"},{"lastTransitionTime":"2019-02-02T09:15:16Z","message":"the
        desired count is within the acceptable range","reason":"DesiredWithinRange","status":"False","type":"ScalingLimited"}],"currentMetrics":[{"resource":{"currentAverageUtilization":49,"currentAverageValue":"133076992","name":"memory"},"type":"Resource"},{"resource":{"currentAverageUtilization":0,"currentAverageValue":"0","name":"cpu"},"type":"Resource"}],"currentReplicas":2,"desiredReplicas":2,"lastScaleTime":"2019-02-02T06:22:17Z"}}'
      status: OutOfSync
      targetState: '{"apiVersion":"autoscaling/v2beta1","kind":"HorizontalPodAutoscaler","metadata":{"labels":{"app":"omniscient-gateway","applications.argoproj.io/app-name":"omniscient-gateway","chart":"omniscient-gateway-0.0.1","heritage":"Tiller","release":"omniscient-gateway"},"name":"omniscient-gateway"},"spec":{"maxReplicas":10,"metrics":[{"resource":{"name":"cpu","targetAverageUtilization":70},"type":"Resource"},{"resource":{"name":"memory","targetAverageUtilization":80},"type":"Resource"}],"minReplicas":2,"scaleTargetRef":{"apiVersion":"apps/v1","kind":"Deployment","name":"omniscient-gateway"}}}'
    revision: be40193e40b7cb7d1610b4c7f47eee20b5440883
    status: OutOfSync
  health:
    status: Healthy
  history:
  - deployedAt: 2019-02-01T15:27:02Z
    id: 3
    revision: 369c64ddbebd3afdff97759802c29d65d2a4d066
  - deployedAt: 2019-02-01T15:32:07Z
    id: 4
    revision: 369c64ddbebd3afdff97759802c29d65d2a4d066
  - deployedAt: 2019-02-01T15:50:28Z
    id: 5
    revision: be40193e40b7cb7d1610b4c7f47eee20b5440883
  - deployedAt: 2019-02-01T15:55:53Z
    id: 6
    revision: be40193e40b7cb7d1610b4c7f47eee20b5440883
  - deployedAt: 2019-02-01T16:00:25Z
    id: 7
    revision: be40193e40b7cb7d1610b4c7f47eee20b5440883
  operationState:
    finishedAt: 2019-02-01T16:00:25Z
    message: successfully synced
    operation:
      sync:
        parameterOverrides: []
        syncStrategy:
          hook: {}
    phase: Succeeded
    startedAt: 2019-02-01T15:59:57Z
    syncResult:
      resources:
      - kind: Service
        message: service/omniscient-gateway unchanged
        name: omniscient-gateway
        namespace: kintohub
        status: Synced
      - kind: Service
        message: service/api unchanged
        name: api
        namespace: kintohub
        status: Synced
      - kind: Deployment
        message: deployment.extensions/omniscient-gateway unchanged
        name: omniscient-gateway
        namespace: kintohub
        status: Synced
      - kind: Ingress
        message: ingress.extensions/public-omniscient-gateway unchanged
        name: public-omniscient-gateway
        namespace: kintohub
        status: Synced
      - kind: Ingress
        message: ingress.extensions/omniscient-gateway unchanged
        name: omniscient-gateway
        namespace: kintohub
        status: Synced
      - kind: Ingress
        message: ingress.extensions/ws-omniscient-gateway unchanged
        name: ws-omniscient-gateway
        namespace: kintohub
        status: Synced
      - kind: HorizontalPodAutoscaler
        message: horizontalpodautoscaler.autoscaling/omniscient-gateway configured
        name: omniscient-gateway
        namespace: kintohub
        status: Synced
      revision: be40193e40b7cb7d1610b4c7f47eee20b5440883
  parameters:
  - name: service.publicport.internalPort
    value: "8082"
  - name: service.wsport.name
    value: websocket
  - name: deployment.env.normal.PROXY_GRPC_HOST_FORMAT
    value: http://grpc-http-proxy:3000
  - name: scaling.targetAverageUtilization.cpu
    value: "70"
  - name: deployment.antiaffinity
    value: "true"
  - name: ingress.default.hosts
    value: '[api.staging.kintohub.com]'
  - name: scaling.enabled
    value: "true"
  - name: host
    value: staging.kintohub.com
  - name: image.secret
    value: regsecret
  - name: image.tag
    value: dev-820dea4
  - name: resources.requests.memory
    value: 256Mi
  - name: service.httpport.externalPort
    value: "80"
  - name: service.grpcport.internalPort
    value: "8090"
  - name: deployment.env.normal.RABBIT_HOST
    value: rabbitmq-ha
  - name: ingress.public.tls
    value: '[map[hosts:[public.api.staging.kintohub.com] secretName:kintossl]]'
  - name: scaling.minReplicas
    value: "2"
  - name: ingress.public.enabled
    value: "true"
  - name: ingress.ws.hosts
    value: '[ws.staging.kintohub.com]'
  - name: ingress.ws.tls
    value: '[map[hosts:[ws.staging.kintohub.com] secretName:kintossl]]'
  - name: deployment.env.normal.ENV
    value: STAGING
  - name: image.repository
    value: asia.gcr.io/linear-bounty-174410/omniscient-gateway
  - name: scaling.targetAverageUtilization.memory
    value: "80"
  - name: service.httpport.internalPort
    value: "80"
  - name: service.grpcport.externalPort
    value: "8090"
  - name: ingress.default.annotations.kubernetes.io/ingress.class
    value: nginx
  - name: ingress.ws.annotations.kubernetes.io/ingress.class
    value: nginx
  - name: sslsecret
    value: devkinto
  - name: deployment.enabled
    value: "true"
  - name: deployment.env.normal.GRPC_PROXY
    value: grpc-service
  - name: deployment.name
    value: main
  - name: ingress.ws.enabled
    value: "true"
  - name: ingress.enabled
    value: "false"
  - name: service.type
    value: ClusterIP
  - name: service.wsport.externalPort
    value: "8089"
  - name: ingress.public.annotations.kubernetes.io/ingress.class
    value: nginx
  - name: ingress.public.hosts
    value: '[public.api.staging.kintohub.com]'
  - name: name
    value: omniscient-gateway
  - name: secret.enabled
    value: "false"
  - name: deployment.env.downward.POD_IP
    value: status.podIP
  - name: service.httpport.name
    value: http
  - name: ingress.annotations
    value: <nil>
  - name: service.grpcport.name
    value: grpc
  - name: version
    value: 0.0.1
  - name: deployment.env.downward.NAMESPACE_ENV
    value: metadata.namespace
  - name: ingress.default.tls
    value: '[map[hosts:[api.staging.kintohub.com] secretName:kintossl]]'
  - name: scaling.maxReplicas
    value: "10"
  - name: service.publicport.name
    value: public
  - name: service.enabled
    value: "true"
  - name: tls
    value: <nil>
  - name: infrastructure.replicas
    value: "2"
  - name: config
    value: <nil>
  - name: deployment.env.normal.GRAPHQL_HOST
    value: prisma:4466
  - name: ingress.default.enabled
    value: "true"
  - name: resources.requests.cpu
    value: 100m
  - name: image.pullPolicy
    value: IfNotPresent
  - name: ingress.hosts
    value: '[chart-example.local]'
  - name: service.publicport.externalPort
    value: "8082"
  - name: service.wsport.internalPort
    value: "8089"

@jessesuen
Copy link
Member

@bappr this payload is from Argo CD v0.10. There were a bunch of improvements to the sync logic in v0.11 (among other things). I think we'll need to see if this is still happening in v0.11 to go further. Can you upgrade to v0.11.1 and report back? Please be aware of the breaking changes in v0.11 before you upgrade, most notably the change in resource names and the CLI incompatibility. Release notes are described here:

https://github.com/argoproj/argo-cd/releases/tag/v0.11.0

@bakayolo
Copy link
Contributor Author

bakayolo commented Feb 3, 2019

It s planned for our next sprint.
I ll keep you updated.
Thanks ;)

@fatalsaint
Copy link

fatalsaint commented Feb 12, 2019

I get the same problem with v0.11.1. It seems related to having multiple type: Resource entries. Example, this HPA works fine:

---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa
  labels:
    role: hpa
  namespace: apz
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: rails
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: memory
      targetAverageUtilization: 75

However this one always shows Out of Sync:

---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa
  labels:
    role: hpa
  namespace: apz
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: rails
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50
  - type: Resource
    resource:
      name: memory
      targetAverageUtilization: 75

And the Diff from the CLI:

===== autoscaling/HorizontalPodAutoscaler apz/hpa ======
23,26d22
<       name: cpu
<       targetAverageUtilization: 50
<     type: Resource
<   - resource:
28a25,28
>     type: Resource
>   - resource:
>       name: cpu
>       targetAverageUtilization: 50

@jessesuen jessesuen changed the title HPA not being refreshed HPA objects can always be OutOfSync Feb 14, 2019
@jessesuen
Copy link
Member

jessesuen commented Feb 14, 2019

We understand the problem. It appears that the HPA controller can re-order the metrics list. Argo CD is correctly detecting this as a difference because everywhere else, an order of a list is significant. I think the solution may be one or more of:

  1. As a best practice, the user commits in git, the HPA metrics list in a way that the order will be the same as how the HPA controller is saving it. Document this in our FAQ.

  2. If order is not deterministic, the Argo CD diff library can fuzz the difference by understanding that order is not significant for HPA spec.metrics

  3. File an upstream bug, send a PR to kubernetes HPA controller so that the metrics list preserves ordering during reconciliation.

@jessesuen
Copy link
Member

jessesuen commented Feb 14, 2019

IMO, the fact that kubernetes is re-ordering the metrics list is a kubernetes bug, and should be fixed upstream.

In the mean-time, option 1 appears to be working internally, without any Argo CD code changes.

@fatalsaint
Copy link

Thank you - can confirm that option 1, reordering the metrics (placing memory before cpu in this case), seems to resolve the issue I was seeing.

@jessesuen
Copy link
Member

Filed upstream issue kubernetes/kubernetes#74099.

@bakayolo
Copy link
Contributor Author

Thanks guys, gonna do that as well!

rarguelloF added a commit to rarguelloF/argo-helm that referenced this issue Feb 20, 2020
As described in this issue: argoproj/argo-cd#1079

Argocd is displaying a diff as k8s is internally reordering the metrics.
danielgblanco added a commit to danielgblanco/opentelemetry-helm-charts that referenced this issue Nov 29, 2021
A current issue between ArgoCD (argoproj/argo-cd#1079) and Kubernetes (kubernetes/kubernetes#74099) makes the HPA stay constantly out of sync. This affects Gitops pipelines when both memory and CPU metrics are used to autoscale the deployment.

This change reorders metrics to make sure that they remain in the order that the Kubernetes HPA controller currently expects them to be.
danielgblanco added a commit to danielgblanco/opentelemetry-helm-charts that referenced this issue Nov 29, 2021
A current issue between ArgoCD (argoproj/argo-cd#1079) and Kubernetes (kubernetes/kubernetes#74099) makes the HPA stay constantly out of sync. This affects Gitops pipelines when both memory and CPU metrics are used to autoscale the deployment.

This change reorders the HPA metrics to make sure that they remain in the order that the Kubernetes HPA controller currently expects them to be.
dmitryax pushed a commit to open-telemetry/opentelemetry-helm-charts that referenced this issue Dec 3, 2021
A current issue between ArgoCD (argoproj/argo-cd#1079) and Kubernetes (kubernetes/kubernetes#74099) makes the HPA stay constantly out of sync. This affects Gitops pipelines when both memory and CPU metrics are used to autoscale the deployment.

This change reorders the HPA metrics to make sure that they remain in the order that the Kubernetes HPA controller currently expects them to be.
chrisdotm added a commit to chrisdotm/helm-charts-2 that referenced this issue Aug 10, 2022
Really this is for argoproj/argo-cd#1079 which points blame at upstream k8s.
JamieDanielson pushed a commit to honeycombio/helm-charts that referenced this issue Aug 18, 2022
* Swap order of hpa spec.metrics

Really this is for argoproj/argo-cd#1079 which points blame at upstream k8s. Swapping the CPU and memory metric for the HPA. Nothing should change other than the resulting order of the rendered template.
@alex-souslik-hs
Copy link
Contributor

To any future users you can use ignore Differences in your Argo Application like so:

spec:
  ignoreDifferences:
    - group: autoscaling
      kind: HorizontalPodAutoscaler
      jqPathExpressions:
        - .spec.metrics[].resource.name | select((. == "cpu") or (. == "memory"))

@KevinM2k
Copy link

KevinM2k commented Jan 9, 2023

Or you can add this to your argocd config map:

resource.customizations.ignoreDifferences.autoscaling_HorizontalPodAutoscaler: |
    jqPathExpressions:
    - '.spec.metrics[].resource.name | select((. == "cpu") or (. == "memory"))'

Following the system wide configuration: https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/#system-level-configuration

docwhat added a commit to holtje/hive-config that referenced this issue Jan 23, 2023
@rozen-dada
Copy link

This issue can be resolved just by chainging the order of resources in the HPA. i was able to reoslve it by placing memory reousrces first and then cpu in spec.metrics.type. Try it

tiithansen added a commit to tiithansen/agent that referenced this issue May 30, 2023
By reordering metrics argocd will no longer be stuck in endless loop.
Related issue in ArgoCD project argoproj/argo-cd#1079
rfratto pushed a commit to grafana/agent that referenced this issue May 30, 2023
By reordering metrics argocd will no longer be stuck in endless loop.
Related issue in ArgoCD project argoproj/argo-cd#1079
poblahblahblah added a commit to poblahblahblah/sumologic-kubernetes-collection that referenced this issue Jun 7, 2023
This addresses an issue when using ArgoCD (and maybe other GitOps operators)
where Kubernetes reorders the objects under the spec.metrics key thus causing
Sync issues with ArgoCD.

Originally reported to the ArgoCD project here:
argoproj/argo-cd#1079

Originally reported to the Kubernetes project here:
kubernetes/kubernetes#74099

Other projects and companies have also addressed this by simply reordering
the metrics section:

* kubernetes/ingress-nginx#10043
* nginxinc/kubernetes-ingress#3773
* grafana/helm-charts#758
* open-telemetry/opentelemetry-helm-charts#103
* Nextdoor/k8s-charts#102

Signed-off-by: Patrick O’Brien <patrick.obrien@thetradedesk.com>
poblahblahblah added a commit to poblahblahblah/sumologic-kubernetes-collection that referenced this issue Jun 12, 2023
This addresses an issue when using ArgoCD (and maybe other GitOps operators)
where Kubernetes reorders the objects under the spec.metrics key thus causing
Sync issues with ArgoCD.

Originally reported to the ArgoCD project here:
argoproj/argo-cd#1079

Originally reported to the Kubernetes project here:
kubernetes/kubernetes#74099

Other projects and companies have also addressed this by simply reordering
the metrics section:

* kubernetes/ingress-nginx#10043
* nginxinc/kubernetes-ingress#3773
* grafana/helm-charts#758
* open-telemetry/opentelemetry-helm-charts#103
* Nextdoor/k8s-charts#102

Signed-off-by: Patrick O’Brien <patrick.obrien@thetradedesk.com>
swiatekm pushed a commit to SumoLogic/sumologic-kubernetes-collection that referenced this issue Jun 13, 2023
* Reordering HPA metrics to match HPA ordering

This addresses an issue when using ArgoCD (and maybe other GitOps operators)
where Kubernetes reorders the objects under the spec.metrics key thus causing
Sync issues with ArgoCD.

Originally reported to the ArgoCD project here:
argoproj/argo-cd#1079

Originally reported to the Kubernetes project here:
kubernetes/kubernetes#74099

Other projects and companies have also addressed this by simply reordering
the metrics section:

* kubernetes/ingress-nginx#10043
* nginxinc/kubernetes-ingress#3773
* grafana/helm-charts#758
* open-telemetry/opentelemetry-helm-charts#103
* Nextdoor/k8s-charts#102

Signed-off-by: Patrick O’Brien <patrick.obrien@thetradedesk.com>

* add CHANGELOG entry

---------

Signed-off-by: Patrick O’Brien <patrick.obrien@thetradedesk.com>
clayton-cornell pushed a commit to grafana/agent that referenced this issue Aug 14, 2023
By reordering metrics argocd will no longer be stuck in endless loop.
Related issue in ArgoCD project argoproj/argo-cd#1079
clayton-cornell pushed a commit to grafana/agent that referenced this issue Aug 14, 2023
By reordering metrics argocd will no longer be stuck in endless loop.
Related issue in ArgoCD project argoproj/argo-cd#1079
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants