<h2>My specific case</h2>
<p>I have machines in a <a href="https://k3s.io" rel="nofollow noreferrer">k3s</a> cluster. I upgraded from an older version (v1.20?) to v1.21.1+k3s1 a few days ago by running <code>curl -sfL https://get.k3s.io | sh -</code> with <code>INSTALL_K3S_CHANNEL</code> set to <code>latest</code>.</p>
<p>My main reason for installing was that I wanted the bundled ingress controller to go from using traefik v1 to v2.</p>
<p>The upgrade worked, but I still have traefik 1.81.0:</p>
<pre><code>$ k -n kube-system describe deployment.apps/traefik
Name:                   traefik
Namespace:              kube-system
CreationTimestamp:      Mon, 29 Mar 2021 22:26:11 -0700
Labels:                 app=traefik
                        app.kubernetes.io/managed-by=Helm
                        chart=traefik-1.81.0
                        heritage=Helm
                        release=traefik
Annotations:            deployment.kubernetes.io/revision: 1
                        meta.helm.sh/release-name: traefik
                        meta.helm.sh/release-namespace: kube-system
Selector:               app=traefik,release=traefik
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=traefik
                    chart=traefik-1.81.0
                    heritage=Helm
                    release=traefik
</code></pre>
<pre><code>$ k -n kube-system describe addon traefik
Name:         traefik
Namespace:    kube-system
Labels:       &lt;none&gt;
Annotations:  &lt;none&gt;
API Version:  k3s.cattle.io/v1
Kind:         Addon
Metadata:
  Creation Timestamp:  2021-03-25T05:30:34Z
  Generation:          1
  Managed Fields:
    API Version:  k3s.cattle.io/v1
    Fields Type:  FieldsV1
    fieldsV1:
      f:spec:
        .:
        f:checksum:
        f:source:
      f:status:
    Manager:         k3s
    Operation:       Update
    Time:            2021-03-25T05:30:34Z
  Resource Version:  344
  UID:               ...
Spec:
  Checksum:  2925a96b84dfaab024323ccc7bf1c836b77b9b5f547e0a77348974c7f1e67ad2
  Source:    /var/lib/rancher/k3s/server/manifests/traefik.yaml
Status:
Events:  &lt;none&gt;
</code></pre>
<h2>What I understand about k3s addons</h2>
<p>k3s installs with <a href="https://rancher.com/docs/rke/latest/en/config-options/add-ons/" rel="nofollow noreferrer">addons</a> including ingress, DNS, local-storage. These are set up using helm charts and a custom resource definition called <code>addon</code>.</p>
<p>For traefik, there's also a job that appears called <code>helm-install-traefik</code>. It looks like this job ran when I upgraded the cluster:</p>
<pre><code>$ k describe jobs -A
Name:           helm-install-traefik
Namespace:      kube-system
Selector:       controller-uid=b2130dde-45ff-4d27-8e22-ee8f7a621d35
Labels:         helmcharts.helm.cattle.io/chart=traefik
                objectset.rio.cattle.io/hash=c42f5b5dd9ee50718523a82c68d4392a7dec9fc4
Annotations:    objectset.rio.cattle.io/applied:
...
                objectset.rio.cattle.io/id: helm-controller
                objectset.rio.cattle.io/owner-gvk: helm.cattle.io/v1, Kind=HelmChart
                objectset.rio.cattle.io/owner-name: traefik
                objectset.rio.cattle.io/owner-namespace: kube-system
Parallelism:    1
Completions:    1
Start Time:     Thu, 17 Jun 2021 09:13:07 -0700
Completed At:   Thu, 17 Jun 2021 09:13:22 -0700
Duration:       15s
Pods Statuses:  0 Running / 1 Succeeded / 0 Failed
Pod Template:
  Labels:           controller-uid=b2130dde-45ff-4d27-8e22-ee8f7a621d35
                    helmcharts.helm.cattle.io/chart=traefik
                    job-name=helm-install-traefik
  Annotations:      helmcharts.helm.cattle.io/configHash: ...
  Service Account:  helm-traefik
  Containers:
   helm:
    Image:      rancher/klipper-helm:v0.5.0-build20210505
    Port:       &lt;none&gt;
    Host Port:  &lt;none&gt;
    Args:
      install
    Environment:
      NAME:              traefik
      VERSION:
      REPO:
      HELM_DRIVER:       secret
      CHART_NAMESPACE:   kube-system
      CHART:             https://%{KUBERNETES_API}%/static/charts/traefik-1.81.0.tgz
      HELM_VERSION:
      TARGET_NAMESPACE:  kube-system
      NO_PROXY:          .svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
    Mounts:
      /chart from content (rw)
      /config from values (rw)
  Volumes:
   values:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      chart-values-traefik
    Optional:  false
   content:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      chart-content-traefik
    Optional:  false
Events:        &lt;none&gt;
</code></pre>
<p>Looks like my addons weren't re-created in the update:</p>
<pre><code>$ k -n kube-system get addons
NAME                        AGE
aggregated-metrics-reader   90d
auth-delegator              90d
auth-reader                 90d
ccm                         90d
coredns                     90d
local-storage               90d
metrics-apiservice          90d
metrics-server-deployment   90d
metrics-server-service      90d
resource-reader             90d
rolebindings                90d
traefik                     90d
</code></pre>
<h2>The question</h2>
<p>The docs give the impression that running the k3s install script should update add-ons. Should it? If so, why hasn't my traefik deployment been upgraded? What can I do to force it to upgrade?</p>

foobarbecue
<p>Posting this as a community wiki, feel free to edit and expand.</p>
<p>First from your question about <code>job run</code>, you can see in output that traefik had chart for 1.18.0 version:</p>
<pre><code>CHART:             https://%{KUBERNETES_API}%/static/charts/traefik-1.81.0.tgz
</code></pre>
<p>Related to <code>traefik</code> I found some information in k3s documentation:</p>
<blockquote>
<p>If Traefik is not disabled K3s versions 1.20 and earlier will install
Traefik v1, while K3s versions 1.21 and later will install Traefik v2
if v1 is not already present.</p>
<p>To migrate from an older Traefik v1 instance please refer to the
<a href="https://doc.traefik.io/traefik/migration/v1-to-v2/" rel="nofollow noreferrer">Traefik documentation</a> and <a href="https://github.com/traefik/traefik-migration-tool" rel="nofollow noreferrer">migration tool</a>.</p>
</blockquote>
<p><a href="https://rancher.com/docs/k3s/latest/en/networking/#traefik-ingress-controller" rel="nofollow noreferrer">Reference for the above</a></p>
<p>Based on my research, <a href="https://rancher.com/docs/k3s/latest/en/upgrades/basic/" rel="nofollow noreferrer">upgrading using command line</a> works only for system components of kubernetes as there is no word about addons while for <code>RKE</code> it's clearly stated that addons are updated:</p>
<blockquote>
<p>When a cluster is upgraded with rke up, using the default options, the
following process is used:</p>
<p>1 - The etcd plane gets get updated, one node at a time.</p>
<p>2 -Controlplane nodes get updated, one node at a time. This includes the controlplane components and worker plane components of the controlplane nodes.</p>
<p>3 - Worker plane components of etcd nodes get updated, one node at a time.</p>
<p>4 - Worker nodes get updated in batches of a configurable size. The
default configuration for the maximum number of unavailable nodes is
ten percent, rounded down to the nearest node, with a minimum batch
size of one node.</p>
<p>5 - <strong>Addons get upgraded one by one</strong>.</p>
</blockquote>
<p><a href="https://rancher.com/docs/rke/latest/en/upgrades/how-upgrades-work/" rel="nofollow noreferrer">Reference for RKE</a></p>
