Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Implementación fuera de línea de K8
implementación fuera de línea de k8s
Para obtener más información, consulte el artículo: "Instalación sin conexión de Docker y empaquetado sin conexión de proyectos back-end"
https://blog.csdn.net/qq_45371023/article/details/140279746?spm=1001.2014.3001.5501
Todos los archivos utilizados están en:
Enlace: https://pan.baidu.com/s/10cb-dXkgdShdjPEBCyvTrw?pwd=fpuy
Código de extracción: fpuy
1. Instale cri_dockerd
rpm -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
2. Vuelva a cargar el demonio del sistema → Configure cri-dockerd para que se inicie automáticamente → Inicie cri-dockerd
Recargar demonio del sistema
sudo systemctl daemon-reload
Configurar cri-dockerd para que se inicie automáticamente
sudo systemctl enable cri-docker.socket cri-docker
Iniciar cri-dockerd
sudo systemctl start cri-docker.socket cri-docker
sudo systemctl status cri-docker.socket
sudo systemctl status cri-docker
Problema: No se pudo iniciar cri-docker
medida:
Método 1: systemctl reiniciar la ventana acoplable # Reiniciar la ventana acoplable
Método 2: desinstale Docker, vuelva a instalarlo y luego realice los pasos anteriores nuevamente
1. Instalar kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
2. Compruebe si la instalación está completa.
kubectl version --client
3. Abra el puerto o cierre el firewall (para garantizar un proceso de instalación sin problemas)
Puerto abierto (servidor en la nube)
Puerto abierto 6443
sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
Recargar cortafuegos
sudo firewall-cmd --reload
Ver todos los puertos abiertos
sudo firewall-cmd --zone=public --list-ports
O apague el firewall (máquina virtual)
Desactivar el cortafuegos
sudo systemctl stop firewalld
Desactivar el inicio automático del firewall
sudo systemctl disable firewalld
4. Deshabilite SELinux (asegúrese de que el contenedor pueda acceder a los recursos del sistema)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
5. Instale kubeadm, kubelet y kubectl
Descargue el paquete de instalación sin conexión relevante en formato rpm, que existe en 3_yum_package. Utilice el comando para instalar todos los paquetes de instalación rpm en el directorio.
cd 3_yum_package && rpm -ivh *.rpm
6. Configure kubelet para que se inicie automáticamente
sudo systemctl enable --now kubelet
Después de completar los pasos anteriores, tendrá el siguiente entorno
·Dos servidores o máquinas virtuales con diferentes direcciones IP pueden comunicarse entre sí y mantener el estado de la LAN. La dirección IP está configurada en 192.168..34 y 192.168..35
·El tiempo de ejecución del contenedor (Docker+cri_dockerd) está instalado en ambos servidores y se han instalado los componentes de kubernetes kubectl, kubeadm y kubelet.
7. Cierre la partición de intercambio. Esto se divide en apagado temporal y apagado permanente. Se recomienda el apagado permanente para entornos de máquinas virtuales porque se encenderá y apagará con frecuencia. Por el contrario, se recomienda el apagado temporal para entornos de nube.
Cerrar temporalmente la partición de intercambio
swapoff -a
Para cerrar permanentemente la partición de intercambio, comente la línea que contiene el intercambio en fstab.
vi /etc/fstab
# /dev/mapper/centos-swap swap valores predeterminados de swap 0 0
Reinicie para que surta efecto. El reinicio puede hacer que el estado de cri-dockerd cambie. En la implementación real, no elegí reiniciar. Se supone que la versión o la configuración no están configuradas correctamente. cri-dockerd y luego inicie cri-dockerd para que el estado de cri -dockerd sea normal
reiniciar
8. Instale runc como entorno operativo k8s.
Instalar runc
sudo install -m 755 runc.amd64 /usr/local/bin/runc
# Comprobar si la instalación fue exitosa
runc -v
9. Docker y cri-dockerd configuran la aceleración de imágenes domésticas (Dado que los nombres de los siguientes paquetes de software que se utilizarán en esta carpeta tienen direcciones espejo, se recomienda configurar la aceleración de espejo correspondiente incluso en una red de área local para evitar que kubectl requiera que Internet extraiga paquetes de software e ignore el espejo local después de la La instalación está completa.)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://tsvqojsz.mirror.aliyuncs.com"]
}
EOF
# 找到第10行
vi /usr/lib/systemd/system/cri-docker.service
# 修改为ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
Reiniciar los componentes de Docker
systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker
# Verificar el estado del componente Docker
systemctl status docker cir-docker.socket cri-docker
10. Verifique el nombre de host y los hosts
nodo maestro
el nombre de host es k8s-master
vi /etc/hostname
Agregar asignación de nombre de dominio
echo "192.168.**.35 k8s-slave01">> /etc/hosts
Otros nodos
nombre de host: k8s-slave01
vi /etc/hostname
Agregar asignación de nombre de dominio
echo "192.168.**.34 k8s-master" >> /etc/hosts
11. Reenvíe IPv4 y deje que iptables vea el flujo del puente.
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
Establezca los parámetros sysctl requeridos, que persisten después de los reinicios
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
#Aplicar parámetros sysctl sin reiniciar
sudo sysctl --system
lsmod | grep br_netfilter
lsmod | grep overlay
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
# Si el error de iptables aún aparece durante el inicio, ejecute
echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1">/proc/sys/net/ipv4/ip_forward
12. Inicialice el nodo maestro
Antes de la inicialización, debe obtener la imagen de la ventana acoplable necesaria para la inicialización a través de las imágenes de configuración de kubeadm:
Instale la imagen en la ventana acoplable load -i **.tar
Los archivos de imágenes relevantes existen en 5_kubeadm-images.
Realizar la inicialización:
kubeadm init --node-name=k8s-master list--image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.**.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
–image-repository=registry.aliyuncs.com/google_containers # Reemplace la fuente de la imagen del contenedor descargada con Alibaba Cloud. De lo contrario, la imagen no se puede eliminar por razones de red y la ejecución definitivamente fallará.
–cri-socket=unix:///var/run/cri-dockerd.sock # Este es el tiempo de ejecución del contenedor especificado, porque Containerd también es uno de los componentes de Docker. Docker también descargará Containerd cuando realice la inicialización. detecta que hay varios entornos de ejecución de contenedores, debe seleccionar uno manualmente. También se puede ver aquí que Containerd es en realidad mucho más liviano que Docker.
–apiserver-advertise-address=192.168.56.50 # Configure la dirección de transmisión para el servidor API. Seleccione aquí la dirección IPv4 local. Si no desea que el SERVIDOR API se configure en otros nodos, no lo cambie a otra dirección.
–pod-network-cidr=10.244.0.0/16 # Especifique el rango de direcciones IP que puede usar la red pod. Si aún no está seguro, puede ignorarlo y usar este valor.
–service-cidr=10.96.0.0/12 # Especifique un segmento de dirección IP adicional para la dirección IP virtual del servicio. Si aún no está seguro, puede usar este valor de todos modos.
Problema: la verificación de cordns:v1.10.1 no existe, de hecho cordns:v1.10.1 ya existe, pero es cordns:1.10.1.
Medidas: Modificar la etiqueta de cordones.
docker tag registry.aliyuncs.com/google_containers/coredns:1.10.1 registry.aliyuncs.com/google_containers/coredns:v1.10.1
Vuelva a ejecutar el comando de inicialización
Registre la información debajo de kubeadm join, que es necesaria para la unión de nodos. La información relevante para el ejemplo anterior es:
kubeadm join 192.168.51.34:6443 --token 1qtv3k.p8tfvdcds6x5ichf
--discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26
Si lo olvida, puede usar la lista de tokens de kubeadm para consultar. El token existe durante 24 horas, volver a crear el token de kubeadm create --print-join-command y eliminarlo usando el tokenid de eliminación del token de kubeadm.
Usuarios no root por favor ejecuten
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
El usuario root ejecuta directamente
Tiene efecto temporalmente y dejará de ser válido después de reiniciar. No se recomienda.
export KUBECONFIG=/etc/kubernetes/admin.conf
Tiene efecto de forma permanente. No es necesario volver a ejecutar este comando después de ejecutar kubeadm reset e init nuevamente.
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
Después de ejecutar el comando efectivo permanente, debe obtenerlo para que sea efectivo.
source ~/.bash_profile
Compruebe si la configuración es efectiva
echo $KUBECONFIG
/etc/kubernetes/admin.conf
13. Instalar y configurar complementos de red
Aquí la franela se utiliza para descargar y cargar el archivo kube-flannel.yml al servidor.
Cargue la imagen relevante al servidor para su instalación. kube-flannel.yml y los archivos de imagen existen en 6_kube-flannel.
Consultar tarjeta de red
configuración if
kube-flannel.yml buscará la tarjeta de red enp1s0 de forma predeterminada. En este ejemplo, la tarjeta de red 34 es enp1s0 y no es necesario modificarla. La tarjeta de red 35 es enp4s0.
// Modifique kube-flannel.yml de 35 y agregue –iface=enp0s3 para especificar (enp0s3 aquí es la tarjeta de red correspondiente a la ip, como la parte en el cuadro de arriba). Las ubicaciones de los parámetros son las siguientes:
container:
......
command:
- /opt/bin/flanneld
arg:
- --ip-masq
- --kube-subnet-mgr
- --iface=enp4s0
Configuración del complemento de red de franela para Kubernetes
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
cat /run/flannel/subnet.env
# Si no existe dicho archivo o carpeta, debe crearlo manualmente. El contenido es el mismo que se muestra a continuación.
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
14. El nodo nodo se une al maestro
14.1 Copie /etc/kubernetes/admin.conf en la máquina del nodo maestro a la máquina del nodo esclavo.
scp /etc/kubernetes/admin.conf 192.168.56.51:/etc/kubernetes/
# No olvide agregar admin.conf a la variable de entorno. Úselo directamente aquí para que surta efecto de forma permanente.
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
Si hay un problema al copiar:
La clave de host ECDSA para 192.168.55.187 ha cambiado y ha solicitado una verificación estricta.La verificación de la clave de host falló.
Ejecute las siguientes declaraciones para reparar
ssh-keygen -R 192.168.55.187
14.2 Ejecute el comando de unión (después de que el nodo maestro se inicialice exitosamente, se dará el comando de unión)
Por ejemplo:
kubeadm unirse a 192.168.51.34:6443 --token by7t4x.da3f98dzrvjylykz --token de descubrimiento ca cert hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --socket cri unix:///var/run/cri-dockerd.sock
14.3. Ejecutar kubectl obtener nodos
¡El clúster k8s se implementó con éxito! ! !
kubectl obtiene nodos
Medidas: Verifique si el intercambio está cerrado; verifique si el firewall abre el puerto 6443;
Cerrar intercambio
Apague temporalmente el firewall
éxito
kubectl obtiene nodos
Después de agregar un nodo k8s al clúster, verifique que el estado del nodo sea No listo
medida:
systemctl restart kubelet.service
systemctl restart docker.service
Reiniciar kubelet y docker
kubeadm unirse a 192.168.51.34:6443 --token l2qlvh.and3fnjmzecueu9h --token de descubrimiento ca cert hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --socket cri unix:///var/run/cri-dockerd.sock
Se produce un tiempo de espera de inicialización al agregar nodos secundarios a un clúster k8s.
medida:
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
éxito
Copie /etc/kubernetes/admin.conf en la máquina del nodo maestro a la máquina del nodo esclavo
scp /etc/kubernetes/admin.conf 192.168.55.187:/etc/kubernetes/
Si la copia del archivo falla, el mensaje de error es el siguiente:
La clave de host ECDSA para 192.168.55.187 ha cambiado y ha solicitado una verificación estricta.
Error en la verificación de la clave del host.
Ejecute las siguientes declaraciones para reparar
ssh-keygen -R 192.168.55.187
kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master
nodo esclavo
rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
nodo maestro
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
Si es necesario, reinicialice el clúster k8s.
kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.51.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
nodo maestro
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A
nodo maestro
scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/
nodo esclavo
kubeadm join 192.168.51.34:6443 --token 1k9kdy.dvn2qbtd7rjar1ly
--discovery-token-ca-cert-hash sha256:ff90d8ed41ae1902a839194f179a1c3ba8374a5197ea3111e10e5ca1c09fa442 --cri-socket unix:///var/run/cri-dockerd.sock
kubectl get pod -A
kubectl get nodes