Tabla de contenido
1. Preparativos antes de la construcción
1. Planificación de la plataforma Build k8s
2. Requisitos de configuración del hardware del servidor
3. Cómo construir e implementar
a. Preparación, inicialización del sistema
b. Instalar docker kubeadm kubelet kubectl en todos los nodos
c. Implementar maestro de kubernetes
e. Instale el complemento de red y conéctese a Internet
prefacio
Prefiero un caballero que sea bueno en el habla y rápido en la acción a un caballero que sea lento en el habla pero rápido en la acción.
1. Preparativos antes de la construcción
1. Planificación de la plataforma Build k8s
Clúster maestro único: solo hay un maestro, que administra varios nodos.
Clúster multimaestro: tiene múltiples maestros y administra múltiples nodos. Modo de alta disponibilidad. Un paso de equilibrio de carga más que un solo clúster maestro.
El entorno de prueba está construido, por lo que se utiliza un solo clúster maestro y el maestro se puede agregar si es necesario en el futuro.
2. Requisitos de configuración del hardware del servidor
nodo maestro:
entorno de prueba | Entorno de producción | |
UPC | 2 | 8 |
Memoria | 4G |
16G |
disco duro | 20G | 100 GRAMOS |
nodo nodo:
entorno de prueba | Entorno de producción | |
UPC | 4 | dieciséis |
Memoria | 8G | 64G |
disco duro | 40G |
500G |
3. Cómo construir e implementar
Actualmente hay dos formas comunes:
1) método kubeadm
kubeadm es una herramienta de implementación de k8s y el método de implementación es relativamente simple. Solo se necesitan dos comandos, kubeadm init (inicialización) y kubeadm join (unión del nodo al maestro). El clúster k8s se puede implementar rápidamente. La ventaja es que es rápido y no requiere procesamiento adicional por su cuenta. Común y ahorra tiempo
Enlace oficial: https://kubernetes.io/docs/reference/setup-tools/kubeadm/
2) modo binario
Descargar el paquete binario de github e implementar manualmente cada componente es un proceso engorroso. La ventaja es que después de encontrar un problema, se puede localizar con precisión, lo que favorece el mantenimiento posterior. Después de todo, lo opero paso a paso por mí mismo, así que sé más sobre los giros y vueltas en el interior ~
2. Proceso de construcción
1. Cómo compilar kubeadm
Proceso general:
1) Crear un nodo maestro kubeadm init
2) Agregue el nodo nodo al clúster actual kubeadm join <IP y puerto del nodo maestro>
3) Configure el complemento de red y pruebe el clúster k8s
Configuración de la máquina:
-- Se preparan un maestro y un nodo. Configuración de hardware CPU 2 núcleos, memoria 251G, disco duro 500G
-- las máquinas pueden hacer ping entre sí, el sistema operativo es CentOS7
-- la partición de intercambio está prohibida
-- la imagen se puede extraer
maestro: 192.10.18.102
nodo: 192.10.18.103
a. Preparación, inicialización del sistema
Como estoy usando una máquina física antigua que se configuró previamente, omito este proceso. Si necesita utilizar una máquina virtual. Para instalar 3 sistemas operativos Centos7.x, realice la siguiente inicialización:
1) Desactivar el cortafuegos
systemctl stop firewalld
systemctl disable firewalld
2) cerrar selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭
setenforce 0 #临时关闭
3) cerrar intercambio
swapoff -a #临时关闭
sed -ri 's/."swap."/#&/' /etc/fstab #永久关闭
4) Establecer el nombre de host
hostnamectl set-hostname <hostname>
5) Solo agregue hosts al maestro
cat >> /etc/hosts << EOF
ip master
ip node1
ip node2
EOF
6) Pase el tráfico ipv4 en puente a la cadena iptables, configure los parámetros del kernel y optimice
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system #生效命令
7) sincronización de tiempo
yum install ntpdate -y
ntpdate time.windows.com
8) Instalar ipset, ipvsadm
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
cat > /etc/modules-load.d/ipvs.conf <<EOF
# Load IPVS at boot
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
nf_conntrack_ipv4
EOF
systemctl enable --now systemd-modules-load.service
#确认内核模块加载成功
lsmod |egrep "ip_vs|nf_conntrack_ipv4"
B. Actualice el kernel (elija según su propia situación, no puede actualizar si está satisfecho)
1) Comprobar la versión del sistema
cat /etc/redhat-release
2) Ver la versión actual del kernel
uname -r
3) Comprobar si ELRepo está instalado
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
Ver la descripción del error que ELRepo no está instalado
4) Instalación de actualización
Instalación de ELRepo
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
o actualizar
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
5) Verifique los paquetes de instalación disponibles, la versión de mantenimiento a largo plazo es lt y la última versión estable de la línea principal es ml
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
6) Instale el último núcleo
yum --enablerepo=elrepo-kernel install -y kernel-lt
7) Ver las versiones de kernel disponibles y la secuencia de arranque
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
8) Instalar herramientas auxiliares (no es necesario, algunos sistemas vienen con esta herramienta): grub2-pc
yum install -y grub2-pc
9) Establecer el orden de arranque predeterminado del kernel
grub2-set-default 0
vim /etc/default/grub
GRUB_DEFAULT=0 #这里从原来的saved改为0
10) Generar archivo de configuración grub
# Ejecutar el comando grub2-mkconfig para recrear la configuración del kernel
grub2-mkconfig -o /boot/grub2/grub.cfg
11) Reiniciar la máquina
reboot
12) Comprobar si la versión del kernel es correcta
uname -r
13) Instale la herramienta yum-utils.
Cuando haya más de 3 kernels instalados en el sistema, la versión anterior del kernel se eliminará automáticamente o manualmente yum remove -y para eliminar la versión anterior después de ver el kernel instalado.
yum install -y yum-utils
14) Eliminar juegos de herramientas antiguos
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64
15) Instale una nueva versión del kit de herramientas
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt-tools.x86_64
16) Ver el núcleo instalado
rpm -qa | grep kernel
c. Configure ipv4, de lo contrario fallará (esto es un pozo, si no lo configura, no puede inicializarse correctamente)
vim /etc/sysconfig/modules/ipvs.modules
cat /etc/sysconfig/modules/ipvs.modules
nf_conntrack
systemctl enable --now systemd-modules-load.service
lsmod |egrep "ip_vs|nf_conntrack_ipv4"
lsmod |egrep "ip_vs|nf_conntrack_ipv"
D. Instalar contenedor
1) Instalar paquetes dependientes
yum -y install yum-utils device-mapper-persistent-data lvm2
2) Agregar fuente de Ali Docker
[raíz@k8s-maestro ~]
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3) Agregar módulos de superposición y filtro de red
cat >>/etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
4) Instale Containerd, instale la última versión aquí (no se puede usar la versión 1.5 y anteriores)
yum -y install containerd.io
5) Cree un archivo de configuración para Containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml
sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
6) inicio contenedor
systemctl enable containerd
systemctl start containerd
e. Instalar kubectl, kubelet, kubeadm
1) Agregar fuente de Ali kubernetes
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2) Instale kubectl, kubelet, kubeadm
Ver todas las ediciones disponibles
yum list kubelet --showduplicates |grep 1.27
Instale la última versión 1.27.1 aquí
yum -y install kubectl-1.27.1 kubelet-1.27.1 kubeadm-1.27.1
Configure el kubelet para que se inicie automáticamente en el arranque (en este momento, no hay un archivo de configuración de kubelet y no se puede iniciar, lo cual es normal)
systemctl enable kubelet
systemctl start kubelet
F. El nodo maestro realiza operaciones de inicialización.
1) Ver las imágenes requeridas para la inicialización de k8s v1.27.1
kubeadm config images list --kubernetes-version=v1.27.1
2) Comando de inicialización
kubeadm init --kubernetes-version=1.27.1 --apiserver-advertise-address=10.142.50.190 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
Nota: El segmento de red del pod es: 10.244.0.0/16, la dirección del servidor API es la IP local del Maestro y el segmento de red se puede personalizar, siempre que no haya conflicto.
Explicación detallada de los parámetros:
-- especifique la versión. (La versión se puede modificar según sea necesario)
-- Se establece el apserver, que es la ip del nodo actual.
-- Especifique la dirección del almacén espejo y tire del espejo.
-- service-cidr es la red de svc kubectl get svc #Ver información de svc
por defecto es 10.96.0.0/12
-- pod-network-cidr es la red de pod kubectl get pods -o wide #Ver información de red de pod
-- nodos de pod dentro k8s El segmento IP que puede usar la red, no se puede escribir igual que service-cidr y usa 10.244.0.0/16 de manera predeterminada
Esta operación lleva mucho tiempo.
3) Devuelva la información con éxito, simplemente ejecute el contenido devuelto
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join IP:6443 --token maod8l.w4g2cu2tl4er9gil \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ejecución del nodo maestro
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
ejecución de nodo de nodo
kubeadm join IP:6443 --token maod8l.w4g2cu2tl4er9gil \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2. Proceso de construcción binaria
a. Cree varias máquinas virtuales e instale el sistema operativo Linux
B. Inicialización del sistema operativo (varios apagado-apagado)
c. Certificados autofirmados para etcd y apserver (equivalentes a tarjetas de control de acceso, asegurando la interoperabilidad)
D. Implementar clúster etcd
e. Implementar el componente maestro
ser apserver ser controlador-administrador ser programador etcd
F. Implementar componentes de nodo
kubelet kube proxy ventana acoplable, etc.
g. Implementar la red del clúster