Kubernetes upgrade using kubespray is not changing version for nodes after upgrade
GitHub - kubernetes-sigs/kubespray: Deploy a Production Ready Kubernetes Cluster
Deploy a Production Ready Kubernetes Cluster. Contribute to kubernetes-sigs/kubespray development by creating an account on GitHub.
github.com
위 Kubespray를 통해 Kubernetes 클러스터 업그레이드를 진행하고 있었습니다.
$ ansible-playbook upgrade-cluster.yml --become -i inventory/test/inventory.ini
PLAY [localhost] *************************************************************************************************************************************
Monday 08 April 2024 17:43:11 +0900 (0:00:00.091) 0:00:00.091 **********
...
...
...
PLAY RECAP *******************************************************************************************************************************************
ds-trtis-001 : ok=635 changed=55 unreachable=0 failed=0 skipped=1233 rescued=1 ignored=1
localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Monday 08 April 2024 17:52:23 +0900 (0:00:00.038) 0:09:12.333 **********
===============================================================================
kubernetes/control-plane : kubeadm | Upgrade first master ------------------------------------------------------------------------------------ 95.45s
kubernetes-apps/metrics_server : Metrics Server | Create manifests --------------------------------------------------------------------------- 12.71s
kubernetes-apps/ansible : Kubernetes Apps | Lay Down CoreDNS templates ----------------------------------------------------------------------- 11.75s
kubernetes-apps/metrics_server : Metrics Server | Create manifests --------------------------------------------------------------------------- 11.17s
kubernetes-apps/ansible : Kubernetes Apps | Lay Down CoreDNS templates ------------------------------------------------------------------------ 9.91s
kubernetes-apps/ansible : Kubernetes Apps | Start Resources ----------------------------------------------------------------------------------- 8.84s
kubernetes-apps/metrics_server : Metrics Server | Apply manifests ----------------------------------------------------------------------------- 7.85s
kubernetes-apps/ansible : Kubernetes Apps | Start Resources ----------------------------------------------------------------------------------- 7.34s
kubernetes-apps/metrics_server : Metrics Server | Apply manifests ----------------------------------------------------------------------------- 7.14s
kubernetes-apps/network_plugin/flannel : Flannel | Wait for flannel subnet.env file presence -------------------------------------------------- 5.58s
kubernetes/control-plane : Backup old certs and keys ------------------------------------------------------------------------------------------ 3.61s
download : download_container | Download image if required ------------------------------------------------------------------------------------ 3.56s
kubernetes/control-plane : Update server field in component kubeconfigs ----------------------------------------------------------------------- 3.53s
kubernetes/preinstall : Create kubernetes directories ----------------------------------------------------------------------------------------- 3.26s
etcd : Check certs | Register ca and etcd admin/member certs on etcd hosts -------------------------------------------------------------------- 2.90s
kubernetes/control-plane : Renew K8S control plane certificates monthly 1/2 ------------------------------------------------------------------- 2.86s
download : download_container | Download image if required ------------------------------------------------------------------------------------ 2.83s
kubernetes/preinstall : Create kubernetes directories ----------------------------------------------------------------------------------------- 2.82s
network_plugin/cni : CNI | Copy cni plugins --------------------------------------------------------------------------------------------------- 2.77s
etcd : Check certs | Register ca and etcd admin/member certs on etcd hosts -------------------------------------------------------------------- 2.77s
inventory 폴더 하위에 test 디렉토리를 따서 group_vars/k8s_cluster/k8s-cluster.yml 파일을 만들고 kube_version은 v1.23.0으로 세팅했었고 위 결과와 같이 정상적으로 업그레이드된 ansible playbook 결과를 얻었습니다.

kubectl, kubelet, kubeadm 이 정상적으로 바뀐것을 확인했고, kubectl 서버 버전 역시 바뀐것을 확인했습니다.
하지만!

노드는 여전히... 버전이 이전 버전을 바라보고 있는 것이었습니다......(이 후 뭔가 플레이북쪽에 문제가 있나,,, 계속 클러스터 업그레이드부분만 바꿔보고 적용하는 삽질기가 이뤄졌습니다..)

계속 클러스터 업그레이드 부분만 바꿔보고 적용하는 삽질기 끝에, which kubelet 명령어를 해봤고, kubespray는 apt 가 아닌 외부로부터 직접 /usr/local/bin 하위에 설치하는 것이 기억났습니다. 또한, 저는 이전 클러스터 구축을 apt install로 해왔고, 실행파일은 /usr/bin 경로에 저장되었던 것이었습니다.

이제부터 뭔가 문제 해결에 대한 직감을 할 수 있었습니다.

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 파일에서, ExecStart 부분이 역시나 /usr/bin 을 바라보고 있었습니다. 따라서, 해당 경로를 /usr/local/bin으로 바꿔주고
systemctl daemon-reload && systemctl restart kubelet
시스템 데몬과 kubelet을 재시작 해줬더니 잠시후에 쿠버네티스 버전이 v1.23.0로 정상으로 바뀐 것을 확인할 수 있었습니다.

이 경험을 통해, 아무 생각 없이 정상 동작한 부분을 파헤치기 보다는, kubespray는 정상 적용됐으니 다음 부분을 단계적으로 트러블 슈팅할 수 있는 능력을 키우자라고 다짐했고, kubespray와 같은 직접 까보지 않으면 블랙박스처럼 느껴질 수 있는 오픈소스 프로젝트들을 정확히 이해하고 넘어가야한다고 느꼈습니다.
그리고 해당 이슈가 2023년에 github Issue로 등록이 됐었는데 아직 해결이 되지 않은 것 같아, 이슈에 기여를 하였습니다.
https://github.com/kubernetes-sigs/kubespray/issues/10293#issuecomment-2042238320
Kubernetes upgrade using kubespray is not changing version for nodes after upgrade · Issue #10293 · kubernetes-sigs/kubespray
I upgraded my kubernetes cluster using kubespray from v1.26.5 to v1.27.0 using the below command : ansible-playbook cluster.yml -i inventory/mycluster/hosts.yaml --become --become-user=root -u atom...
github.com