# Upgrade a single node cluster

**URL:** <https://discuss.kubernetes.io/t/upgrade-a-single-node-cluster/20913>\
**Category:** General Discussions\
**Created:** [August 9, 2022, 8:09am UTC](https://discuss.kubernetes.io/t/upgrade-a-single-node-cluster/20913 "2022-08-09T08:09:44Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![KeithTt](https://sea2.discourse-cdn.com/flex016/user_avatar/discuss.kubernetes.io/keithtt/32/8011_2.png) [@KeithTt](https://discuss.kubernetes.io/u/KeithTt)\
**Post date:** [August 9, 2022, 8:09am UTC](https://discuss.kubernetes.io/t/upgrade-a-single-node-cluster/20913/1 "2022-08-09T08:09:44Z")

</div>

Kubernetes version: v1.18.19  
Cloud being used: bare-metal  
Installation method: kubeadm  
Host OS: CentOS7  
CNI and version: calico/cni:v3.17.0  
CRI and version: docker 18.09.9

I upgrade my k8s cluster from v1.18.19 to v1.19.16 refer to this guide: [Upgrading kubeadm clusters | Kubernetes](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)

What I have done is here:

```nohighlight
yum list --showduplicates kubeadm --disableexcludes=kubernetes
yum install -y kubeadm-1.19.16-0 --disableexcludes=kubernetes
kubeadm upgrade plan
kubeadm upgrade apply v1.19.16
yum install -y kubelet-1.19.16-0 kubectl-1.19.16-0 --disableexcludes=kubernetes
systemctl daemon-reload
systemctl restart kubelet

```

When I restart kubelet, the cluster turn down, and I find the message:

`Error: failed to run Kubelet: unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix: missing address`

It seems I should change the Container Runtime from dockershim to containerd, but I am not sure.

Then I have a try to change the runtime refer to this guide: [Changing the Container Runtime on a Node from Docker Engine to containerd | Kubernetes](https://kubernetes.io/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/)

Steps:

- stop kubelet
- configure and start containerd
- configure kubelet to use containerd
  - update the file /var/lib/kubelet/kubeadm-flags.env
  - `kubectl edit no <node-name>` to change the value of `kubeadm.alpha.kubernetes.io/cri-socket` from `/var/run/dockershim.sock` to `/var/run/containerd/containerd.sock`

The problem is that the kubelet is already stopped, and the apiserver pod is also stopped, I can’t run `kubectl edit no <node-name>` to update the node infomation.
