2022-05-05 10:08:56 -04:00
# Upgrading Kubernetes
2022-09-02 08:21:19 -04:00
Constellation is a Kubernetes distribution. As such, dependencies on Kubernetes versions exist in multiple places:
2022-05-05 10:08:56 -04:00
- The desired Kubernetes version deployed by `kubeadm init`
- Kubernetes resources (deployments made while initializing Kubernetes, including the `cloud-controller-manager` , `cluster-autoscaler` and more)
2022-06-29 09:26:29 -04:00
- Kubernetes go dependencies for the bootstrapper code
2022-05-05 10:08:56 -04:00
## Understand what has changed
2022-09-02 08:21:19 -04:00
Before adding support for a new Kubernetes version, it is a very good idea to [read the release notes ](https://kubernetes.io/releases/notes/ ) and to identify breaking changes.
2022-05-05 10:08:56 -04:00
## Upgrading Kubernetes resources
2022-09-02 08:21:19 -04:00
Everything related to Kubernetes versions is tracked in [the versions file ](/internal/versions/versions.go ). Add a new `ValidK8sVersion` and fill out the `VersionConfigs` entry for that version.
During cluster initialization, multiple Kubernetes resources are deployed. Some of these should be upgraded with Kubernetes.
You can check available version tags for container images using [the container registry tags API ](https://docs.docker.com/registry/spec/api/#listing-image-tags ):
2022-05-05 10:08:56 -04:00
2022-09-26 09:52:31 -04:00
```sh
2022-12-12 05:35:12 -05:00
curl -qL https://registry.k8s.io/v2/autoscaling/cluster-autoscaler/tags/list | jq .tags
curl -qL https://registry.k8s.io/v2/cloud-controller-manager/tags/list | jq .tags
curl -qL https://registry.k8s.io/v2/provider-aws/cloud-controller-manager/tags/list | jq .tags
curl -qL https://mcr.microsoft.com/v2/oss/kubernetes/azure-cloud-controller-manager/tags/list | jq .tags
curl -qL https://mcr.microsoft.com/v2/oss/kubernetes/azure-cloud-node-manager/tags/list | jq .tags
2022-05-05 10:08:56 -04:00
# [...]
```
2022-12-12 05:35:12 -05:00
Normally renovate will handle the upgrading of Kubernetes dependencies.
2022-05-05 10:08:56 -04:00
## Test the new Kubernetes version
2022-06-29 09:26:29 -04:00
- Setup a Constellation cluster using the new image with the new bootstrapper binary and check if Kubernetes is deployed successfully.
2022-05-05 10:08:56 -04:00
2022-09-26 09:52:31 -04:00
```sh
2022-05-05 10:08:56 -04:00
# should print the new k8s version for every node
kubectl get nodes -o wide
# read the logs for pods deployed in the kube-system namespace and ensure they are healthy
kubectl -n kube-system get pods
kubectl -n kube-system logs [...]
kubectl -n kube-system describe pods
```
2022-09-26 09:52:31 -04:00
2022-05-05 10:08:56 -04:00
- Read the logs of the main Kubernetes components by getting a shell on the nodes and scan for errors / deprecation warnings:
2022-09-26 09:52:31 -04:00
```sh
2022-05-05 10:08:56 -04:00
journalctl -u kubelet
journalctl -u containerd
```
- Conduct e2e tests
- [Run the sonobuoy test suite against your branch ](https://sonobuoy.io/ )
- [Run CI e2e tests ](/.github/docs/README.md )