Solución de espacio insuficiente en el directorio raíz del nodo Rancher

1. Descripción del problema


Al crear el servidor de nodos rancher, no se planificó el espacio del directorio del disco. De acuerdo con la configuración predeterminada, el directorio raíz tiene /solo 50 G y la ruta de instalación predeterminada de /var/lib/dockerla ventana acoplable es , lo que da como resultado una tasa de uso del 85 % del directorio raíz. Los nodos Rancher informan con frecuencia de alarmas de presión del disco, kubelet has disk pressurepor lo que es necesario modificar el directorio de datos predeterminado de la ventana acoplable.

2. Modificar el directorio de datos predeterminado de la ventana acoplable


  1. Primero mire el directorio de datos actual
docker info | grep 'Docker Root Dir'
Docker Root Dir: /var/lib/docker
  1. detener el servicio docker
systemctl stop docker
  1. Cree un nuevo directorio debajo del directorio con espacio
mkdir -p /home/docker/
  1. Copiar datos al nuevo directorio
cp -R /var/lib/docker /home/docker/
  1. Modificar el archivo de configuración
vi /etc/docker/daemon.json

Configure el parámetro "graph". Mi versión de docker es 20.10. Otras versiones pueden verificar el método de configuración por sí mismas.

{
    
    
  "graph": "/home/docker"
}
  1. Cargue el archivo de configuración y reinicie el servicio
systemctl daemon-reload
systemctl restart docker
  1. Después de la modificación, verifique la información de la ventana acoplable nuevamente
docker info | grep 'Docker Root Dir'
Docker Root Dir: /home/docker
  1. Después de confirmar que es correcto, elimine los datos antiguos en el directorio raíz
rm -rf /var/lib/docker/

3. Preguntas


Dado que la carga de trabajo se implementó anteriormente en este nodo en Rancher, se informa el siguiente error al iniciar el contenedor nuevamente:

failed to create sandbox: 
ResolvConfPath /home/docker/container/xxx/resolv.conf does not exist

Intenté muchos métodos pero no pude resolver el problema y finalmente tuve que volver a unirme al nodo.

  1. Disipe el nodo
    En la administración del nodo Rancher, disipe el nodo, después de que se complete la disipación, el estado es drainedy luego elimine el nodo
  2. Limpiar el nodo
    Use el script oficial de limpieza de nodos para limpiar el nodo

#!/bin/bash

KUBE_SVC='
kubelet
kube-scheduler
kube-proxy
kube-controller-manager
kube-apiserver
'

for kube_svc in ${KUBE_SVC};
do
  # 停止服务
  if [[ `systemctl is-active ${
     
     kube_svc}` == 'active' ]]; then
    systemctl stop ${kube_svc}
  fi
  # 禁止服务开机启动
  if [[ `systemctl is-enabled ${
     
     kube_svc}` == 'enabled' ]]; then
    systemctl disable ${kube_svc}
  fi
done

# 停止所有容器
docker stop $(docker ps -aq)

# 删除所有容器
docker rm -f $(docker ps -qa)

# 删除所有容器卷
docker volume rm $(docker volume ls -q)

# 卸载mount目录
for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher;
do
  umount $mount;
done

# 备份目录
mv /etc/kubernetes /etc/kubernetes-bak-$(date +"%Y%m%d%H%M")
mv /var/lib/etcd /var/lib/etcd-bak-$(date +"%Y%m%d%H%M")
mv /var/lib/rancher /var/lib/rancher-bak-$(date +"%Y%m%d%H%M")
mv /opt/rke /opt/rke-bak-$(date +"%Y%m%d%H%M")

# 删除残留路径
rm -rf /etc/ceph \
    /etc/cni \
    /opt/cni \
    /run/secrets/kubernetes.io \
    /run/calico \
    /run/flannel \
    /var/lib/calico \
    /var/lib/cni \
    /var/lib/kubelet \
    /var/log/containers \
    /var/log/kube-audit \
    /var/log/pods \
    /var/run/calico \
    /usr/libexec/kubernetes

# 清理网络接口
no_del_net_inter='
lo
docker0
eth
ens
bond
'

network_interface=`ls /sys/class/net`

for net_inter in $network_interface;
do
  if ! echo "${no_del_net_inter}" | grep -qE ${net_inter:0:3}; then
    ip link delete $net_inter
  fi
done

# 清理残留进程
port_list='
80
443
6443
2376
2379
2380
8472
9099
10250
10254
'

for port in $port_list;
do
  pid=`netstat -atlnup | grep $port | awk '{print $7}' | awk -F '/' '{print $1}' | grep -v - | sort -rnk2 | uniq`
  if [[ -n $pid ]]; then
    kill -9 $pid
  fi
done

kube_pid=`ps -ef | grep -v grep | grep kube | awk '{print $2}'`

if [[ -n $kube_pid ]]; then
  kill -9 $kube_pid
fi

# 清理Iptables表
## 注意:如果节点Iptables有特殊配置,以下命令请谨慎操作
sudo iptables --flush
sudo iptables --flush --table nat
sudo iptables --flush --table filter
sudo iptables --table nat --delete-chain
sudo iptables --table filter --delete-chain
systemctl restart docker

  1. volver a unirse al nodo

Supongo que te gusta

Origin blog.csdn.net/qq12547345/article/details/128470553
Recomendado
Clasificación