{"id":355,"date":"2026-02-11T22:35:49","date_gmt":"2026-02-11T21:35:49","guid":{"rendered":"https:\/\/blog.jeronimodiaz.com\/?p=355"},"modified":"2026-02-11T22:40:38","modified_gmt":"2026-02-11T21:40:38","slug":"solucionar-error-de-python-al-actualizar-kubespray","status":"publish","type":"post","link":"https:\/\/blog.jeronimodiaz.com\/es\/solucionar-error-de-python-al-actualizar-kubespray\/","title":{"rendered":"Solucionar error de python al actualizar Kubespray"},"content":{"rendered":"\n<p>Como suelo hacer, me dispon\u00eda a actualizar mi cl\u00faster kubernetes casero utilizando kubespray. La \u00faltima versi\u00f3n de kubespray que ejecut\u00e9 fue la v2.28.0. <\/p>\n\n<p>Cuando se public\u00f3 la versi\u00f3n v2.29.0, intent\u00e9 ejecutarla en mi cl\u00faster de kubernetes pero, sorprendentemente, obtuve el error que se muestra en la siguiente imagen.<\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/blog.jeronimodiaz.com\/wp-content\/uploads\/2026\/02\/Upgrade-error.png\" alt=\"\" class=\"wp-image-341\"\/><\/figure>\n\n<p>Tras una r\u00e1pida b\u00fasqueda en Gemini, parec\u00eda que el error se produc\u00eda porque la versi\u00f3n de python en el nodo que fallaba era inferior a 3.7. La imagen de abajo muestra qu\u00e9 versi\u00f3n de python hab\u00eda en el nodo que fallaba, as\u00ed que confirm\u00e9 que estaba instalada la versi\u00f3n 3.6.9. <\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/blog.jeronimodiaz.com\/wp-content\/uploads\/2026\/02\/Python-version-after-bootstrap.png\" alt=\"\" class=\"wp-image-347\"\/><\/figure>\n\n<p>Despu\u00e9s de confirmar lo que Gemini me dijo, volv\u00ed a preguntar a Gemini c\u00f3mo solucionarlo utilizando Kubespray y me mostr\u00f3 que hay un rol bootstrap en Kubernetes que instala python en todos los nodos kubernetes.<\/p>\n\n<p>Lo que hice fue cambiar a la \u00faltima versi\u00f3n que me funcionaba y ejecutar el rol bootstrap contra el nodo que no estaba bien configurado.<\/p>\n\n<pre class=\"wp-block-code\"><code>git checkout v2.28.0\npip install -r requirements.txt --upgrade\nansible-playbook cluster.yml --limit master1 --tags bootstrap_os -b -i inventory\/home_cluster\/inventory.ini -e ansible_python_interpreter=\/opt\/bin\/python -K<\/code><\/pre>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/blog.jeronimodiaz.com\/wp-content\/uploads\/2026\/02\/Error-python-not-unlinked.png\" alt=\"\" class=\"wp-image-343\"\/><\/figure>\n\n<p>Como el nodo est\u00e1 marcado como ya inicializado, python no es instalado por el rol bootstrap. Para forzar la reinstalaci\u00f3n de python de nuevo utilizando una versi\u00f3n m\u00e1s reciente configurada en kubespray v2.28.0, es necesario eliminar el archivo <code>\/opt\/bin\/.bootstrapped<\/code>. Accede mediante SSH al nodo problem\u00e1tico y ejecuta  <\/p>\n\n<pre class=\"wp-block-code\"><code>sudo rm \/opt\/bin\/.bootstrapped<\/code><\/pre>\n\n<p>Se producir\u00e1 otro error porque el enlace simb\u00f3lico de Python est\u00e1 presente.<\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/blog.jeronimodiaz.com\/wp-content\/uploads\/2026\/02\/Error-python-link.png\" alt=\"\" class=\"wp-image-345\"\/><\/figure>\n\n<p>Ejecuta el comando para eliminarlo<\/p>\n\n<pre class=\"wp-block-code\"><code>sudo unlink \/opt\/bin\/python<\/code><\/pre>\n\n<p>Despu\u00e9s de este comando, el comando ansible para arrancar el nodo volver\u00e1 a fallar, pero hay una peque\u00f1a diferencia con el primer fallo. Esta vez, hay otra versi\u00f3n de python presente en el nodo problem\u00e1tico. <\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/blog.jeronimodiaz.com\/wp-content\/uploads\/2026\/02\/Python-version-after-bootstrap.png\" alt=\"\" class=\"wp-image-347\"\/><\/figure>\n\n<p>Sin embargo, la versi\u00f3n de python por defecto sigue siendo la antigua. He ejecutado los siguientes comandos para configurarlo correctamente. <\/p>\n\n<pre class=\"wp-block-code\"><code>master1 \/opt\/bin # mv pypy3 pypy3.6\nmaster1 \/opt\/bin # mv pypy3.9-v7.3.9-linux64\/ pypy3 \nmaster1 \/opt\/bin # python --version\nPython 3.9.12 (05fbe3aa5b0845e6c37239768aa455451aa5faba, Mar 29 2022, 08:15:34)\n&#91;PyPy 7.3.9 with GCC 10.2.1 20210130 (Red Hat 10.2.1-11)]<\/code><\/pre>\n\n<p>Ahora, la versi\u00f3n es correcta y el problema est\u00e1 solucionado. El comando para actualizar el cl\u00faster kubernetes funciona bien ahora. <\/p>\n\n<p>Espero que te haya gustado esta lectura. Disfrut\u00e9 mucho haciendo todos los pasos, as\u00ed como escribiendo mi experiencia. <\/p>\n\n<p>Gracias por leer mi blog. \u00a1Nos vemos en el pr\u00f3ximo post! <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como suelo hacer, me dispon\u00eda a actualizar mi cl\u00faster kubernetes casero utilizando kubespray. La \u00faltima versi\u00f3n de kubespray que ejecut\u00e9 fue la v2.28.0. Cuando se public\u00f3 la versi\u00f3n v2.29.0, intent\u00e9&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[104],"tags":[],"class_list":["post-355","post","type-post","status-publish","format-standard","hentry","category-kubernetes-es"],"_links":{"self":[{"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/posts\/355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/comments?post=355"}],"version-history":[{"count":2,"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/posts\/355\/revisions"}],"predecessor-version":[{"id":358,"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/posts\/355\/revisions\/358"}],"wp:attachment":[{"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/media?parent=355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/categories?post=355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jeronimodiaz.com\/es\/wp-json\/wp\/v2\/tags?post=355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}