Compartir tecnología

Implementación fuera de línea del clúster k8s

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Implementación fuera de línea de K8

ambiente

Insertar descripción de la imagen aquí

Objetivo

implementación fuera de línea de k8s

paso

Implementar ventana acoplable

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

Instalar cri_dockerd

1. Instale cri_dockerd

rpm -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
Insertar descripción de la imagen aquí

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
  • 1

Configurar cri-dockerd para que se inicie automáticamente

sudo systemctl enable cri-docker.socket cri-docker
  • 1

Iniciar cri-dockerd

sudo systemctl start cri-docker.socket cri-docker

sudo systemctl status cri-docker.socket

sudo systemctl status cri-docker
  • 1
  • 2
  • 3
  • 4
  • 5

Insertar descripción de la imagen aquí

Problema: No se pudo iniciar cri-docker

Insertar descripción de la imagen aquí

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

*Instalar Kubernetes

Instalar kubectl

1. Instalar kubectl

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  • 1

2. Compruebe si la instalación está completa.

kubectl version --client
  • 1

Insertar descripción de la imagen aquí

Instalar kubeadm

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
  • 1

Recargar cortafuegos

sudo firewall-cmd --reload
  • 1

Ver todos los puertos abiertos

sudo firewall-cmd --zone=public --list-ports
  • 1

O apague el firewall (máquina virtual)

Desactivar el cortafuegos

sudo systemctl stop firewalld
  • 1

Desactivar el inicio automático del firewall

sudo systemctl disable firewalld
  • 1

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
  • 1
  • 2

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
  • 1

Insertar descripción de la imagen aquí

6. Configure kubelet para que se inicie automáticamente

sudo systemctl enable --now kubelet
  • 1

Insertar descripción de la imagen aquí

*Implementar clúster k8s

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.

Preparación ambiental

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
  • 1

Para cerrar permanentemente la partición de intercambio, comente la línea que contiene el intercambio en fstab.

vi /etc/fstab
  • 1

# /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
  • 1

# Comprobar si la instalación fue exitosa

runc -v
  • 1

Insertar descripción de la imagen aquí

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Reiniciar los componentes de Docker

systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker
  • 1

# Verificar el estado del componente Docker

systemctl status docker cir-docker.socket cri-docker
  • 1

10. Verifique el nombre de host y los hosts

nodo maestro

el nombre de host es k8s-master

vi /etc/hostname
  • 1

Agregar asignación de nombre de dominio

echo "192.168.**.35 k8s-slave01">> /etc/hosts
  • 1

Otros nodos

nombre de host: k8s-slave01

vi /etc/hostname
  • 1

Agregar asignación de nombre de dominio

echo "192.168.**.34 k8s-master" >> /etc/hosts
  • 1

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

#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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

# 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
  • 1
  • 2
  • 3

Inicializar nodo/maestro del plano de control

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:

Insertar descripción de la imagen aquí

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
  • 1

–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.

Insertar descripción de la imagen aquí

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
  • 1

Vuelva a ejecutar el comando de inicialización

Insertar descripción de la imagen aquí

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
  • 1
  • 2
  • 3

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
  • 1
  • 2
  • 3
  • 4
  • 5

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 
  • 1

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 
  • 1

Después de ejecutar el comando efectivo permanente, debe obtenerlo para que sea efectivo.

source ~/.bash_profile
  • 1

Compruebe si la configuración es efectiva

echo $KUBECONFIG 

/etc/kubernetes/admin.conf
  • 1
  • 2
  • 3

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

Insertar descripción de la imagen aquí

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Configuración del complemento de red de franela para Kubernetes

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
  • 1

Insertar descripción de la imagen aquí

cat /run/flannel/subnet.env
  • 1

# 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

El nodo nodo se une al maestro

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/
  • 1

# 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
  • 1
  • 2
  • 3

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
  • 1

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

Insertar descripción de la imagen aquí

14.3. Ejecutar kubectl obtener nodos

Insertar descripción de la imagen aquí

¡El clúster k8s se implementó con éxito! ! !

pregunta

Pregunta uno

kubectl obtiene nodos

Insertar descripción de la imagen aquí

Medidas: Verifique si el intercambio está cerrado; verifique si el firewall abre el puerto 6443;

Cerrar intercambio

Insertar descripción de la imagen aquí

Apague temporalmente el firewall

Insertar descripción de la imagen aquí

éxito

Insertar descripción de la imagen aquí

Pregunta 2

kubectl obtiene nodos

Después de agregar un nodo k8s al clúster, verifique que el estado del nodo sea No listo

Insertar descripción de la imagen aquí

medida:

systemctl restart kubelet.service

systemctl restart docker.service
  • 1
  • 2
  • 3

Reiniciar kubelet y docker

Insertar descripción de la imagen aquí

Pregunta tres

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.

Insertar descripción de la imagen aquí
medida:

kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
  • 1

Insertar descripción de la imagen aquí

éxito

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Pregunta 4

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
  • 1

eliminación rápida

kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master
  • 1
  • 2
  • 3

nodo esclavo

rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2

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
  • 1
  • 2
  • 3
  • 4

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
  • 1

nodo maestro

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A
  • 1
  • 2

nodo maestro

scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/
  • 1
  • 2

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
  • 1
  • 2
kubectl get pod -A
kubectl get nodes
  • 1
  • 2