
Lo instalé kubelet 1.26.0
en Ubuntu 22.04 usando apt install kubelet
el comando, pero cuando lo intento journalctl -xeu kubelet
obtengo el siguiente resultado:
░░
░░ The unit kubelet.service has entered the 'failed' state with result 'exit-code'.
Dec 14 15:41:16 a systemd[1]: kubelet.service: Scheduled restart job, restart counter is at 86.
░░ Subject: Automatic restarting of a unit has been scheduled
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ Automatic restarting of the unit kubelet.service has been scheduled, as the result for
░░ the configured Restart= setting for the unit.
Dec 14 15:41:16 a systemd[1]: Stopped kubelet: The Kubernetes Node Agent.
░░ Subject: A stop job for unit kubelet.service has finished
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A stop job for unit kubelet.service has finished.
░░
░░ The job identifier is 26301 and the job result is done.
Dec 14 15:41:16 a systemd[1]: Started kubelet: The Kubernetes Node Agent.
░░ Subject: A start job for unit kubelet.service has finished successfully
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A start job for unit kubelet.service has finished successfully.
░░
░░ The job identifier is 26301.
Dec 14 15:41:16 a kubelet[18015]: Flag --pod-infra-container-image has been deprecated, will be removed in 1.27. Image garbage collector will get sandbox image information from CRI.
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.367525 18015 server.go:198] "--pod-infra-container-image will not be pruned by the image garbage collector in kubelet and should also be set in the rem>
Dec 14 15:41:16 a kubelet[18015]: Flag --pod-infra-container-image has been deprecated, will be removed in 1.27. Image garbage collector will get sandbox image information from CRI.
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.371255 18015 server.go:412] "Kubelet version" kubeletVersion="v1.26.0"
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.371272 18015 server.go:414] "Golang settings" GOGC="" GOMAXPROCS="" GOTRACEBACK=""
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.371499 18015 server.go:836] "Client rotation is on, will bootstrap in background"
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.372757 18015 certificate_store.go:130] Loading cert/key pair from "/var/lib/kubelet/pki/kubelet-client-current.pem".
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.373608 18015 dynamic_cafile_content.go:157] "Starting controller" name="client-ca-bundle::/etc/kubernetes/pki/ca.crt"
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.399357 18015 server.go:659] "--cgroups-per-qos enabled, but --cgroup-root was not specified. defaulting to /"
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.399717 18015 container_manager_linux.go:267] "Container manager verified user specified cgroup-root exists" cgroupRoot=[]
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.399832 18015 container_manager_linux.go:272] "Creating Container Manager object based on Node Config" nodeConfig={RuntimeCgroupsName: SystemCgroupsName>
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.399866 18015 topology_manager.go:134] "Creating topology manager with policy per scope" topologyPolicyName="none" topologyScopeName="container"
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.399883 18015 container_manager_linux.go:308] "Creating device plugin manager"
Dec 14 15:41:16 a kubelet[18015]: I1214 15:41:16.399940 18015 state_mem.go:36] "Initialized new in-memory state store"
Dec 14 15:41:16 a kubelet[18015]: E1214 15:41:16.402173 18015 run.go:74] "command failed" err="failed to run Kubelet: validate service connection: CRI v1 runtime API is not implemented for endpoint \">
Dec 14 15:41:16 a systemd[1]: kubelet.service: Main process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ An ExecStart= process belonging to unit kubelet.service has exited.
░░
░░ The process' exit code is 'exited' and its exit status is 1.
Dec 14 15:41:16 a systemd[1]: kubelet.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ The unit kubelet.service has entered the 'failed' state with result 'exit-code'.
lines 2547-2600/2600 (END)
No sé cuál es el problema. ¿Cómo puedo deshacerme de él?
Respuesta1
Acabo de encontrar el mismo problema hoy; parece estar relacionado coneste cambioen K8 1.26.
La solución sería instalar Containerd 1.6, pero... no parece haber un paquete APT para eso todavía :(. Solo pude encontrar paquetes 1.6+ para Ubuntu 22.10 y superior.
Posibles soluciones:
- El que aparece en el enlace anterior: ejecuta una versión anterior de kubelet (1.25)
apt remove --purge kubelet
apt install -y kubeadm kubelet=1.25.5-00
- Actualización manual de Containerd a 1.6 o superior, descargando y reemplazando los binarios
wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-amd64.tar.gz
tar xvf containerd-1.6.12-linux-amd64.tar.gz
systemctl stop containerd
cd bin
cp * /usr/bin/
systemctl start containerd
Actualmente estoy probando ambas opciones y parecen funcionar. Con suerte, en un futuro (muy cercano), obtendremos un containerd
paquete apt 1.6+ para facilitarnos las cosas :)
Editando para agregar una tercera opción (que parece ser la más fácil hasta ahora):
- En los repositorios de Docker, hay paquetes para contenedores 1.6 y superiores. Entonces también puedes agregar los repositorios de Docker e instalar containerd.io desde allí:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install containerd.io
Respuesta2
He luchado un poco con esto y la respuesta de @Bogd me llevó por el camino correcto. Demasiado largo para comentar, así que aquí están los pasos a seguir para configurar un maestro Kubernetes 1.26 estable en un nuevo nodo Ubuntu 22.04 usando franela.
sudo apt-get update
sudo apt install apt-transport-https curl
Instalar en contenedor (referencia:https://docs.docker.com/engine/install/ubuntu/)
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install containerd.io
Crear configuración en contenedor
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
Editar /etc/containerd/config.toml
sudo nano /etc/containerd/config.toml
establecer SystemdCgroup = verdaderosudo systemctl restart containerd
Instalar Kubernetes
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt install kubeadm kubelet kubectl kubernetes-cni
Desactivar intercambio
sudo swapoff -a
Verifique y elimine cualquier entrada de intercambio si existe
sudo nano /etc/fstab
Evite el error "/proc/sys/net/bridge/bridge-nf-call-iptables no existe" en kubeinit (referenciahttps://github.com/kubernetes/kubeadm/issues/1062). Esto no es necesario si Docker también está instalado en el paso 6.
sudo modprobe br_netfilter
sudo nano /proc/sys/net/ipv4/ip_forward
Edite la entrada en el archivo ip_forward y cámbiela a 1. (O usesysctl -w net.ipv4.ip_forward=1
- gracias a @dpjanes, vea los comentarios)
kubeinit para usar con franela
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Copie a la configuración como dice el comando kubadm
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Aplicar franela (referenciahttps://github.com/flannel-io/flannel)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml
Todo debería estar funcionando ahora:
kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-mcjmm 1/1 Running 0 76s
kube-system coredns-787d4945fb-fb59g 1/1 Running 0 8m8s
kube-system coredns-787d4945fb-t25tj 1/1 Running 0 8m8s
kube-system etcd-kube-master 1/1 Running 0 8m19s
kube-system kube-apiserver-kube-master 1/1 Running 0 8m19s
kube-system kube-controller-manager-kube-master 1/1 Running 0 8m19s
kube-system kube-proxy-2hz29 1/1 Running 0 8m8s
kube-system kube-scheduler-kube-master 1/1 Running 0 8m19s
Respuesta3
Verifique el archivo de configuración /etc/containerd/config.toml para ver si la interfaz cri está deshabilitada, como por ejemplo:disabled_plugins = ["cri"]. Después de verlo, se encuentra que la configuracióndisabled_plugins = ["cri"] se cambia adisabled_plugins = [""]. Luego reinicie y reinicie el servicio contenedord: systemctl restart containerd.
Respuesta4
Kubernetes está desaprobando Docker como tiempo de ejecución de contenedor después de v1.20 y, por lo tanto, las últimas versiones de Kubernetes no han escrito API CRI compatibles para Docker. Podemos hacerlo siguiendo el paso a continuación usando CRI desarrollado por Mirantis para Docker:
Instale cri-dockerd desde la siguiente URL:
https://github.com/Mirantis/cri-dockerd
git clone https://github.com/Mirantis/cri-dockerd.git
# Run these commands as root
###Install GO###
wget https://storage.googleapis.com/golang/getgo/installer_linux
chmod +x ./installer_linux
./installer_linux
source ~/.bash_profile
cd cri-dockerd
mkdir bin
go build -o bin/cri-dockerd
mkdir -p /usr/local/bin
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
cp -a packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
Nota: Instale cada comando por separado. En la ejecución masiva, a veces tengo errores, ya que algunos comandos pueden necesitar -y o sí para escribir
Ahora inicie el clúster de administración de Kube usando lo siguiente:
kubeadm init --pod-network-cidr=192.168.0.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock