GitOps: ArgoCD App Reconciliation Timeout

In this post, let us modify the application reconciliation timeout of ArgoCD.

myk8scluster ~ ➜  kubectl get ns
NAME              STATUS   AGE
argocd            Active   6m14s
default           Active   20m
kube-flannel      Active   20m
kube-node-lease   Active   20m
kube-public       Active   20m
kube-system       Active   20m
webhook           Active   79s

myk8scluster ~ ➜  kubectl get all -n argocd
NAME                                                   READY   STATUS    RESTARTS   AGE
pod/argocd-application-controller-0                    1/1     Running   0          6m17s
pod/argocd-applicationset-controller-d7c857898-mkz7x   1/1     Running   0          6m18s
pod/argocd-dex-server-75d98bff7c-t8dbb                 1/1     Running   0          6m18s
pod/argocd-notifications-controller-684947df85-qtm6x   1/1     Running   0          6m18s
pod/argocd-redis-84c8cd4d8-7nbll                       1/1     Running   0          6m18s
pod/argocd-repo-server-6b5cf8488-qzfqk                 1/1     Running   0          6m17s
pod/argocd-server-5f8984f889-qqt6m                     1/1     Running   0          6m17s

NAME                                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/argocd-applicationset-controller          ClusterIP   172.20.161.118   <none>        7000/TCP,8080/TCP            6m18s
service/argocd-dex-server                         ClusterIP   172.20.23.46     <none>        5556/TCP,5557/TCP,5558/TCP   6m18s
service/argocd-metrics                            ClusterIP   172.20.45.80     <none>        8082/TCP                     6m18s
service/argocd-notifications-controller-metrics   ClusterIP   172.20.50.191    <none>        9001/TCP                     6m18s
service/argocd-redis                              ClusterIP   172.20.85.185    <none>        6379/TCP                     6m18s
service/argocd-repo-server                        ClusterIP   172.20.190.10    <none>        8081/TCP,8084/TCP            6m18s
service/argocd-server                             NodePort    172.20.141.136   <none>        80:32765/TCP,443:32766/TCP   6m18s
service/argocd-server-metrics                     ClusterIP   172.20.126.178   <none>        8083/TCP                     6m18s

NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/argocd-applicationset-controller   1/1     1            1           6m18s
deployment.apps/argocd-dex-server                  1/1     1            1           6m18s
deployment.apps/argocd-notifications-controller    1/1     1            1           6m18s
deployment.apps/argocd-redis                       1/1     1            1           6m18s
deployment.apps/argocd-repo-server                 1/1     1            1           6m18s
deployment.apps/argocd-server                      1/1     1            1           6m17s

NAME                                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/argocd-applicationset-controller-d7c857898   1         1         1       6m18s
replicaset.apps/argocd-dex-server-75d98bff7c                 1         1         1       6m18s
replicaset.apps/argocd-notifications-controller-684947df85   1         1         1       6m18s
replicaset.apps/argocd-redis-84c8cd4d8                       1         1         1       6m18s
replicaset.apps/argocd-repo-server-6b5cf8488                 1         1         1       6m17s
replicaset.apps/argocd-repo-server-7bbc57875d                0         0         0       6m18s
replicaset.apps/argocd-server-5f8984f889                     1         1         1       6m17s

NAME                                             READY   AGE
statefulset.apps/argocd-application-controller   1/1     6m17s

myk8scluster ~ ➜  kubectl describe deploy argocd-server -n argocd
Name:                   argocd-server
Namespace:              argocd
CreationTimestamp:      Thu, 14 Nov 2024 19:15:33 +0000
Labels:                 app.kubernetes.io/component=server
                        app.kubernetes.io/name=argocd-server
                        app.kubernetes.io/part-of=argocd
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app.kubernetes.io/name=argocd-server
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:           app.kubernetes.io/name=argocd-server
  Service Account:  argocd-server
  Containers:
   argocd-server:
    Image:       quay.io/argoproj/argocd:v2.4.11
    Ports:       8080/TCP, 8083/TCP
    Host Ports:  0/TCP, 0/TCP
    Command:
      argocd-server
    Liveness:   http-get http://:8080/healthz%3Ffull=true delay=3s timeout=1s period=30s #success=1 #failure=3
    Readiness:  http-get http://:8080/healthz delay=3s timeout=1s period=30s #success=1 #failure=3
    Environment:
      ARGOCD_SERVER_INSECURE:                            <set to the key 'server.insecure' of config map 'argocd-cmd-params-cm'>                            Optional: true
      ARGOCD_SERVER_BASEHREF:                            <set to the key 'server.basehref' of config map 'argocd-cmd-params-cm'>                            Optional: true
      ARGOCD_SERVER_ROOTPATH:                            <set to the key 'server.rootpath' of config map 'argocd-cmd-params-cm'>                            Optional: true
      ARGOCD_SERVER_LOGFORMAT:                           <set to the key 'server.log.format' of config map 'argocd-cmd-params-cm'>                          Optional: true
      ARGOCD_REPO_SERVER_LOGLEVEL:                       <set to the key 'server.log.level' of config map 'argocd-cmd-params-cm'>                           Optional: true
      ARGOCD_SERVER_REPO_SERVER:                         <set to the key 'repo.server' of config map 'argocd-cmd-params-cm'>                                Optional: true
      ARGOCD_SERVER_DEX_SERVER:                          <set to the key 'server.dex.server' of config map 'argocd-cmd-params-cm'>                          Optional: true
      ARGOCD_SERVER_DISABLE_AUTH:                        <set to the key 'server.disable.auth' of config map 'argocd-cmd-params-cm'>                        Optional: true
      ARGOCD_SERVER_ENABLE_GZIP:                         <set to the key 'server.enable.gzip' of config map 'argocd-cmd-params-cm'>                         Optional: true
      ARGOCD_SERVER_REPO_SERVER_TIMEOUT_SECONDS:         <set to the key 'server.repo.server.timeout.seconds' of config map 'argocd-cmd-params-cm'>         Optional: true
      ARGOCD_SERVER_X_FRAME_OPTIONS:                     <set to the key 'server.x.frame.options' of config map 'argocd-cmd-params-cm'>                     Optional: true
      ARGOCD_SERVER_CONTENT_SECURITY_POLICY:             <set to the key 'server.content.security.policy' of config map 'argocd-cmd-params-cm'>             Optional: true
      ARGOCD_SERVER_REPO_SERVER_PLAINTEXT:               <set to the key 'server.repo.server.plaintext' of config map 'argocd-cmd-params-cm'>               Optional: true
      ARGOCD_SERVER_REPO_SERVER_STRICT_TLS:              <set to the key 'server.repo.server.strict.tls' of config map 'argocd-cmd-params-cm'>              Optional: true
      ARGOCD_TLS_MIN_VERSION:                            <set to the key 'server.tls.minversion' of config map 'argocd-cmd-params-cm'>                      Optional: true
      ARGOCD_TLS_MAX_VERSION:                            <set to the key 'server.tls.maxversion' of config map 'argocd-cmd-params-cm'>                      Optional: true
      ARGOCD_TLS_CIPHERS:                                <set to the key 'server.tls.ciphers' of config map 'argocd-cmd-params-cm'>                         Optional: true
      ARGOCD_SERVER_CONNECTION_STATUS_CACHE_EXPIRATION:  <set to the key 'server.connection.status.cache.expiration' of config map 'argocd-cmd-params-cm'>  Optional: true
      ARGOCD_SERVER_OIDC_CACHE_EXPIRATION:               <set to the key 'server.oidc.cache.expiration' of config map 'argocd-cmd-params-cm'>               Optional: true
      ARGOCD_SERVER_LOGIN_ATTEMPTS_EXPIRATION:           <set to the key 'server.login.attempts.expiration' of config map 'argocd-cmd-params-cm'>           Optional: true
      ARGOCD_SERVER_STATIC_ASSETS:                       <set to the key 'server.staticassets' of config map 'argocd-cmd-params-cm'>                        Optional: true
      ARGOCD_APP_STATE_CACHE_EXPIRATION:                 <set to the key 'server.app.state.cache.expiration' of config map 'argocd-cmd-params-cm'>          Optional: true
      REDIS_SERVER:                                      <set to the key 'redis.server' of config map 'argocd-cmd-params-cm'>                               Optional: true
      REDISDB:                                           <set to the key 'redis.db' of config map 'argocd-cmd-params-cm'>                                   Optional: true
      ARGOCD_DEFAULT_CACHE_EXPIRATION:                   <set to the key 'server.default.cache.expiration' of config map 'argocd-cmd-params-cm'>            Optional: true
      ARGOCD_MAX_COOKIE_NUMBER:                          <set to the key 'server.http.cookie.maxnumber' of config map 'argocd-cmd-params-cm'>               Optional: true
      ARGOCD_SERVER_OTLP_ADDRESS:                        <set to the key 'otlp.address' of config map 'argocd-cmd-params-cm'>                               Optional: true
    Mounts:
      /app/config/server/tls from argocd-repo-server-tls (rw)
      /app/config/ssh from ssh-known-hosts (rw)
      /app/config/tls from tls-certs (rw)
      /home/argocd from plugins-home (rw)
      /tmp from tmp (rw)
  Volumes:
   plugins-home:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
   tmp:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
   ssh-known-hosts:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      argocd-ssh-known-hosts-cm
    Optional:  false
   tls-certs:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      argocd-tls-certs-cm
    Optional:  false
   argocd-repo-server-tls:
    Type:          Secret (a volume populated by a Secret)
    SecretName:    argocd-repo-server-tls
    Optional:      true
  Node-Selectors:  <none>
  Tolerations:     <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   argocd-server-5f8984f889 (1/1 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  6m38s  deployment-controller  Scaled up replica set argocd-server-5f8984f889 to 1

myk8scluster ~ ➜  

myk8scluster ~ ➜  kubectl get pods
No resources found in default namespace.

myk8scluster ~ ➜  kubectl get pods -A
NAMESPACE      NAME                                               READY   STATUS    RESTARTS      AGE
argocd         argocd-application-controller-0                    1/1     Running   0             11m
argocd         argocd-applicationset-controller-d7c857898-mkz7x   1/1     Running   0             11m
argocd         argocd-dex-server-75d98bff7c-t8dbb                 1/1     Running   0             11m
argocd         argocd-notifications-controller-684947df85-qtm6x   1/1     Running   0             11m
argocd         argocd-redis-84c8cd4d8-7nbll                       1/1     Running   0             11m
argocd         argocd-repo-server-6b5cf8488-qzfqk                 1/1     Running   0             11m
argocd         argocd-server-5f8984f889-qqt6m                     1/1     Running   0             11m
kube-flannel   kube-flannel-ds-jdcnz                              1/1     Running   1 (24m ago)   25m
kube-system    coredns-768b85b76f-kx44d                           1/1     Running   0             25m
kube-system    coredns-768b85b76f-vt5zm                           1/1     Running   0             25m
kube-system    etcd-myk8scluster                                  1/1     Running   0             25m
kube-system    kube-apiserver-myk8scluster                        1/1     Running   0             25m
kube-system    kube-controller-manager-myk8scluster               1/1     Running   0             25m
kube-system    kube-proxy-t7vp9                                   1/1     Running   0             25m
kube-system    kube-scheduler-myk8scluster                        1/1     Running   0             25m
webhook        nginx-6cfb64b7c5-j5wvw                             1/1     Running   0             6m25s
webhook        nginx-6cfb64b7c5-j6hmj                             1/1     Running   0             105s
webhook        nginx-6cfb64b7c5-k6lzj                             1/1     Running   0             105s

myk8scluster ~ ➜  kubectl get pods -n webhook
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6cfb64b7c5-j5wvw   1/1     Running   0          6m35s
nginx-6cfb64b7c5-j6hmj   1/1     Running   0          115s
nginx-6cfb64b7c5-k6lzj   1/1     Running   0          115s

myk8scluster ~ ➜  kubectl edit configmap argocd-cm -n argocd
error: configmaps "argocd-cm" is invalid
configmap/argocd-cm edited

myk8scluster ~ ➜  kubectl get configmap argocd-cm -n argocd
NAME        DATA   AGE
argocd-cm   1      14m

myk8scluster ~ ➜  kubectl describe configmap argocd-cm -n argocd
Name:         argocd-cm
Namespace:    argocd
Labels:       app.kubernetes.io/name=argocd-cm
              app.kubernetes.io/part-of=argocd
Annotations:  <none>

Data
====
timeout.reconciliation:
----
60s

BinaryData
====

Events:  <none>




myk8scluster ~ ➜  kubectl get configmap argocd-cm -n argocd -o yaml
apiVersion: v1
data:
  timeout.reconciliation: 60s
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-cm","app.kubernetes.io/part-of":"argocd"},"name":"argocd-cm","namespace":"argocd"}}
  creationTimestamp: "2024-11-14T19:15:32Z"
  labels:
    app.kubernetes.io/name: argocd-cm
    app.kubernetes.io/part-of: argocd
  name: argocd-cm
  namespace: argocd
  resourceVersion: "3090"
  uid: 9140c559-b342-4beb-8e47-f6f3772f413b

myk8scluster ~ ➜  
myk8scluster ~  kubectl get configmap argocd-cm -n argocd -o json
{
    "apiVersion": "v1",
    "data": {
        "timeout.reconciliation": "60s"
    },
    "kind": "ConfigMap",
    "metadata": {
        "annotations": {
            "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"ConfigMap\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/name\":\"argocd-cm\",\"app.kubernetes.io/part-of\":\"argocd\"},\"name\":\"argocd-cm\",\"namespace\":\"argocd\"}}\n"
        },
        "creationTimestamp": "2024-11-14T19:15:32Z",
        "labels": {
            "app.kubernetes.io/name": "argocd-cm",
            "app.kubernetes.io/part-of": "argocd"
        },
        "name": "argocd-cm",
        "namespace": "argocd",
        "resourceVersion": "3090",
        "uid": "9140c559-b342-4beb-8e47-f6f3772f413b"
    }
}
Back to Top ↑